2012-06-01 2 views
1

Поиск краев окружности:Нахождение кругов:

Вот два образца изображений, которые я опубликовал.

Нужно найти края круга:

ли возможность разработать один общий алгоритм круга, который может найти все возможные круги во всех сценариях ?? Как ниже 1. Круг может в разные цвета (белый, черный, серый, красный) 2. Цвет фона может отличаться 3. Различные по своим размерам

http://postimage.org/image/tddhvs8c5/

http://postimage.org/image/8kdxqiiyb/

Пожалуйста, предложите некоторая идея написать алгоритм, который должен работать над кругом выше

ответ

0

Вы можете применить преобразование обнаружения края к обоим изображениям.

Вот что я сделал в Paint.NET, используя эффект контура:

Circle 1Circle 2

Вы могли проверить край обнаруживать слишком, но это требует большего контраста в изображении.

Другая вещь, которую следует учитывать, это то, что именно вы хотите обнаружить; на первом изображении вы хотите обнаружить белое кольцо или диск внутри. Во втором изображении; вы хотите обнаружить все круги (есть много крошечных) или просто большой (ы). Эти требования будут влиять на то, какие преобразования использовать и как их инициализировать.

После преобразования изображений в версии, которые «выделяют» круги, вам понадобится алгоритм их поиска.

Опять же, есть больше вариантов, чем один. Here is a paper describing an algoritm

Поиск в Интернете для image processing circle recognition дает множество результатов.

+0

Могу ли я использовать OpenCV найти circles.As Я новичок в развитии обработки изображений alogrithm, я не мог в состоянии понять это шаги..пожалуйста, помогите мне в этом. Да. На первом изображении я хочу обнаружить диск внутри белого кольца. Во втором изображении я хочу найти только большой круг, который находится в центре изображения. (где вы могли видеть, что верхний край выглядит более резким/контрастным по краям, где нижняя часть выглядит так же, как и задний цвет земли - никаких изменений контраста на нижней поверхности) – MaccHere

0

Я думаю, вам придется использовать несколько различных вычислений функций, которые можно использовать для сегментации. На первом снимке круг распознается только интенсивностью, так что легко. На втором рисунке это в основном текстура, которая отличает край круга, в этом случае потребуется изображение функции на основе какого-то фильтра текстуры, например, вычисление локальной дисперсии приведет к скалярному изображению, которое может сегментировать круг. Если есть другие функции, которые определяют круг в других сценариях (разные цвета для фона переднего плана и т. Д.), Вам могут понадобиться другие явные фильтры, которые дают скалярную разницу для этих случаев.

Когда у вас есть скалярные изображения, где выделяются круги, вы можете использовать круговое преобразование Хафа, чтобы найти круг. Либо запустите его для разных размеров круга, либо измените его, чтобы определить диапазон размеров.

Если вы знаете, что будет только один круг, и вы знаете, какой шум будет присутствовать (вертикальные/горизонтальные линии и т. Д.), Альтернативный подход заключается в разработке более конкретного алгоритма, например. отфильтровать шум и найти центр тяжести и т. д.

Ответить на комментарий: Идея состоит в том, чтобы отделить алгоритм от независимых этапов. Я не знаю, как работает конкретный алгоритм, но предположительно он может принимать двоичное или полутоновое изображение, где высокие значения означают, что пиксельная часть круга и низкие значения пикселя не являются частью круга, настоящий алгоритм также должен давать некоторую величину достоверности на круг, который он находит. Этот настоящий алгоритм затем представлял бы некоторый этап (ы) в конце полного алгоритма. Затем вам нужно будет добавить первый этап, который должен генерировать изображения функций для всех типов ввода, которые вы хотите обработать. Для двух примеров это должно быть достаточно одного изображения интенсивности (просто градаций серого) и одного изображения, где каждый пиксель представляет локальную дисперсию. В цветовом случае сделать преобразование цвета использовать значение оттенка, возможно? Для каждого входного потока все изображения функций на более позднем этапе используйте значение достоверности для выбора наиболее вероятного кандидата. Если у вас есть другие неизвестные, которые необходимы вашему алгоритму в качестве входных параметров (размер окружности и т. Д.), Просто перебирайте возможные значения и убедитесь, что ваши последующие этапы возвращают значения доверия.

+0

Да, вы хорошо поняли мою проблему. разработанный конкретный алгоритм для второго изображения, но я знаю, что мой алгоритм не подходит для других кругов. Как определить алгоритм Generic Circle? Предположим, у нас есть 1-ый вид вида кругов. и я знаю, что на изображение есть только один круг, но он отличается по размерам и цвету. Не будем ли мы копировать наш мозг в алгоритме ??? – MaccHere

+0

Идея состоит в том, чтобы отделить алгоритм от независимых этапов. Я не знаю, как работает конкретный алгоритм, но предположительно он может принимать двоичное или полутоновое изображение, где высокие значения означают, что пиксельная часть круга и низкие значения пикселя не являются частью круга, настоящий алгоритм также должен давать некоторую величину достоверности на круг, который он находит. Этот настоящий алгоритм затем представлял бы некоторый этап (ы) в конце полного алгоритма. – hobb

2

Похоже, работа для круга преобразования Хока:

hough muesli

Я не использовал его сам до сих пор, но он входит в OpenCV. Среди других параметров вы можете дать ему минимальный и максимальный радиус.

Вот ссылки на documentation и tutorial.

Я бы себе ваш второй пример картина будет очень трудно обнаружить, хотя

+0

Извините, изображение выше имеет ту же круговую чашку белого цвета. так что было бы легко найти его, пожалуйста, подумайте в режиме реального времени. в моем сценарии .. вы можете проверить мое изображение в данной ссылке ..please пройти через это. – MaccHere

+0

Изображение просто для иллюстрации алоризма. Я видел ваши примеры, вам нужно будет проверить, насколько хорошо алгоритм работает с ними самостоятельно. Пока они имеют четко определенные края, которые появляются, когда вы применяете обнаружение кромок, и они являются чистыми кругами без значительных искажений, они должны работать. – HugoRune

+0

Спасибо @HugoRune, так как я сказал, что я прошел через половину пути .., где я улучшил обнаружение изображения и прикладного края, ссылка на изображение результата приведена ниже .http: //postimage.org/image/nk0omxdbz/ я смог см. некоторый круг в моем изображении, теперь как я должен идти дальше, чтобы получить координаты точек, таких как - центральная точка (x, y) или некоторые граничные точки. как это достичь? нам нужно применить некоторый фильтр в результирующем изображении ???? – MaccHere

Смежные вопросы