#opencv #image-processing #computer-vision
#opencv #обработка изображений #компьютерное зрение
Вопрос:
Я новичок в opencv, я предполагаю, что эта проблема может быть несколько простой: я пытаюсь обнаружить объект размером почти 25 на 15 пикселей на изображении размером 470 на 590 пикселей.
Я прикрепляю увеличенное изображение этого объекта, у меня есть несколько вариантов:
1 — Обнаружение двух близких кругов с использованием преобразования Хафа, 2 — Сопоставление гистограммы, 3 — Обнаружение функции SURF
Есть какие-нибудь рекомендации относительно того, в каком направлении мне следует действовать? Пожалуйста, учитывайте скорость и возможности приложения в реальном времени. Спасибо
Комментарии:
1. Ваш фон будет черным или это может быть что угодно? Кроме того, гарантируется ли, что светодиоды будут определенного размера и ориентации? В целом: преобразования хафа слишком медленные, чтобы выполнять их в режиме реального времени; варианты 2 и 3 будут лучше смотреться на общем фоне. Если фон темный, простые алгоритмы, основанные на цвете или яркости, будут самыми быстрыми.
2. @Luke Спасибо тебе. Да, мой фон черный. Я пытаюсь избежать простых алгоритмов, потому что могут быть другие яркие объекты, которые могут не быть двумя светодиодами, которые я ищу…
3. В OpenCV есть детектор больших двоичных объектов, который (также) используется для (а) калибровки шаблона симметричного круга. Он должен быть способен обнаруживать центры круглых двоичных объектов, таких как эти светодиоды.
4. Я думаю, что это могло бы помочь в вашем случае docs.opencv.org/doc/tutorials/imgproc/shapedescriptors /…
Ответ №1:
Я думаю, что это должно идти без явного указания этого, но, вероятно, есть сотни вещей, которые можно попробовать, и только с одним примером изображения это довольно сложно посоветовать. Например, всегда ли светодиод горит зеленым? мы не знаем.
Помимо этого, имхо, двумя хорошими способами начать было бы со старого верного сопоставления с шаблоном или обнаружения больших двоичных объектов.
Тогда, если это недостаточно надежно, вам нужно будет посмотреть на некоторые альтернативные представления шаблона / большого двоичного объекта, такие как классический HoG (хорош для формы, может быть, немного тяжеловато для этого приложения.), или даже на ваш собственный, который кодирует ваши собственные знания об этой проблеме, относящиеся к конкретной предметной области.
Затем, если это недостаточно надежно, создайте набор данных из репрезентативных ve и -ve примеров как можно большего размера, а затем обучите машину, такую как svm, или расширенный классификатор.
Соответствие шаблону:
http://docs.opencv.org/doc/tutorials/imgproc/histograms/template_matching/template_matching.html
Обнаружение больших двоичных объектов:
https://code.google.com/p/cvblob/
Машинное обучение:
http://docs.opencv.org/modules/ml/doc/ml.html
Советы: Добавьте как можно больше знаний о предметной области, т. Е. Если они всегда зеленые, используйте цвет в представлении, например, hog на канале g. Если они всегда круглые, попробуйте закодировать это, например, использовать логарифмически полярную сетку в шаблоне, а не обычную сетку … и так далее.
Машинное обучение — это не волшебство, линейный классификатор, по сути, будет взвешивать разные точки в пространстве объектов, поэтому вам все равно требуется хорошее представление, поэтому, если сопоставление с шаблоном было полным сбоем, маловероятно, что простой linear ml поможет, но если сопоставление с шаблоном прошло нормально, то ml вполне может повысить производительность до хорошего уровня.
Комментарии:
1. спасибо за ваш ответ. Светодиоды всегда зеленые. Как вы думаете, сопоставление шаблонов для ядра 25 на 25 будет достаточно быстрым?
2. @Samer Я думаю, что это будет зависеть от реализации, представления и функции расстояния, и, самое главное, от размера изображения 🙂 т.Е. действительно ли работа в меньшем масштабе повредит производительности? Что касается opencv, я полагаю, вы могли бы просто попробовать и посмотреть…
3. @Samer о, а также простой трюк для ускорения называется каскадом. В вашем случае, в качестве первого уровня в вашем каскаде, вы могли бы устранить большинство пикселей изображения, используя простой порог, удалив большую часть очевидной черной области, затем передать полученную маску в средство сопоставления шаблонов для финальной стадии. Это уменьшит вычислительную нагрузку на средство сопоставления шаблонов.
Ответ №2:
шаг 1: Удалите черный фон.
шаг 2. Для определения границ вашего объекта можно использовать алгоритм snake
Комментарии:
1. или вы можете использовать snake напрямую, без шага 1