2016-08-14 9 views
10

У меня есть сетка на изображениях (они из камеры). После бинаризации они выглядят следующим образом (красный - 255, синий - 0): gridОбнаружение узлов сетки с использованием OpenCV (или с использованием чего-то другого)

Каков наилучший способ определения узлов сетки (крестов) на этих снимках? Примечание: сетка искажается из ячейки в ячейку неравномерно.

Update:

Некоторые примеры различных сетей и тир искажения до бинаризации: enter image description here

enter image description here

enter image description here

+1

Вы пробовали обнаружение линий с помощью [поджилки преобразования] (http://docs.opencv.org/3.1.0/dd/d1a/group__imgproc__feature.html#ga46b4e588934f6c8dfd509cc6e0e4545a&gsc.tab=0) ? ([учебник 1] (http://docs.opencv.org/2.4/doc/tutorials/imgproc/imgtrans/hough_lines/hough_lines.html), [учебник 2] (http://docs.opencv.org/3.0- beta/doc/py_tutorials/py_imgproc/py_houghlines/py_houghlines.html)) –

+0

Да, я пробовал. Но вот искаженная сетка и hough работает не хорошо :( –

+0

Теперь я использую угловой детектив Harris, он работает неплохо, но он приносит много шумных точек (неправильные узлы). –

ответ

1

я полагаю, что это может быть потенциальный ответ (на самом деле упомянутых в комментариях): http://opencv.itseez.com/2.4/modules/imgproc/doc/feature_detection.html?highlight=hough#houghlinesp

Также могут использоваться другие способы использования инструментов для просмотра изображений.

Но на самом деле я думаю, что вместо преобразования Хафа, которое может способствовать огромному раздуванию и отсутствию точности (прямые линии), я бы предложил попробовать определение угла Гарриса - http://docs.opencv.org/2.4/doc/tutorials/features2d/trackingmotion/harris_detector/harris_detector.html.

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

+0

Спасибо! Можете ли вы рассказать больше об этом моменте: «Местный максимум должен зависеть от распределения« пересечений »? –

+1

При работе с растровыми изображениями локальные максимумы могут быть получены путем анализа пикселей вместе с их близким окружением. Как и в FAST - см. Статью: http://lanl.arxiv.org/pdf/0810.2434. Ваша цель должна заключаться в том, чтобы найти независимое от вращения поперечное распределение. Это можно сделать как путем вычисления, так и итеративно. Поскольку функции GPU теперь будут быстрыми, итеративный подход будет достаточным. Однако вы должны учитывать, что размер региона должен быть скорректирован до масштаба вашего шаблона. Попробую представить пример в следующем комментарии. – Hibryda

2

В таких случаях я сначала попытаюсь найти наилучшую отправную точку. Итак, сначала я пороги изображения (однако я также мог скелетирую его и только тогда порог Но таким образом некоторые данные будут потерян безвозвратно.):

Imgur

Затем я попытался нагрузками инструментов, чтобы получить максимальные заметные черты подчеркиваются навалом.И, наконец, играть с G'MIC плагин Gimp, я нашел это:

Imgur

Исходя из вышеизложенного, я подготовил универсальный шаблон, который выглядит следующим образом:

Imgur

Тогда я только что получил часть этого изображения:

Imgur

Чтобы помочь determ угол ини я сделал местную FREQ Фурье график - таким образом, вы можете получить ваш шаблон локального угла:

Imgur

Затем вы можете сделать простой густой, что быстро работает на современных графических процессорах - получить разницу, как этот (пропущенного случай) :

Imgur

Когда ударил разница минимальна; то, что я имел в виду, говоря о местных максимумах, более или менее относится к тому, как следует обрабатывать полученную разницу. Было бы нецелесообразно взвешивать за пределами разности кругов рисунка, так же как и внутри, из-за чувствительности к масштабному коэффициенту. Таким образом, внутри с крестом следует взвешивать больше в используемом алгоритме. Тем не менее разностная модель с изображением выглядит следующим образом:

Imgur

Как вы можете видеть, что можно различать хит и пропустить. Важно установить правильную допуск и использовать частоты Фурье для получения угла (с пороговыми изображениями Фурье обычно следует общей ориентации анализируемого изображения). Вышеуказанный способ может быть позже дополнен обнаружением Харриса, или обнаружение Харриса может быть изменено с использованием вышеприведенных узоров, чтобы отличить два-четыре близко расположенных угла. К сожалению, все методы зависят от масштаба в таком случае и должны быть соответствующим образом скорректированы. Существуют также другие подходы к вашей проблеме, например, сначала путем их водоразделения, затем получения областей, а затем игнорирования переднего плана, затем упрощения кривых, а затем проверки того, являются ли их углы последовательным эквидистантным шаблоном. Но для моего носа это не принесло бы правильных результатов.

Еще одна вещь - libgmic - это библиотека G'MIC, где вы можете напрямую или через привязки использовать преобразования, показанные выше. Или получите алгоритмы и перепишите их в своем приложении.

+0

Спасибо за подробный ответ. Это хорошая идея использовать локальный Фурье. Но что, если узор будет крестом с другим углом между поперечными линиями? Например, не около 90 градусов, но 40? –

+1

Это на самом деле усложняет вопросы. При небольшом отклонении от 90 градусов проблему можно смягчить с допуском. – Hibryda

+0

Пропущено время для редактирования выше - так продолжайте здесь ... С большой разницей можно применять несколько подходов. Все зависит от того, насколько глубоко вы хотите вникать в эту проблему. На самом деле лучшим, хотя и довольно сложным, было бы применение фильтров Габора с угловыми углами, преобразование его в небольшие участки линии (настройка соответствующего допуска до ограничения уровня шума), а затем проверка пересечений. Хотя лучше всего, для этого подхода потребуется некоторый алгоритм самообучения и использование методов оптимизации OCR. – Hibryda

0

Возможно, вы облака вычислите Hough Lines и определите пересечения. Документацию OpenCV можно найти here

+0

К сожалению, это приносит много неправильных шумовых линий, потому что сетка искажена :( –

+0

Ок, я вижу. Итак, [Угольный детектор Харриса] (http://docs.opencv.org/2.4/doc/tutorials/features2d/trackingmotion /harris_detector/harris_detector.html) тоже не поможет? – L4CK4

+0

Это не помогло :( –