Обнаружение круга Хафа: размытие изображения перед вызовом алгоритма круга Хафа?

http://opencv-python-tutroals.readthedocs.org/en/latest/py_tutorials/py_imgproc/py_houghcircles/py_houghcircles.html

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

Кроме того, есть ли вообще какие-либо другие приемы, которые могут быть полезны при вызове алгоритма круга Хафа? В частности, если круглый объект имеет одинаковую яркость с фоном и, следовательно, выглядит однородным по шкале серого, могу ли я что-нибудь здесь сделать?

Кроме того, если я не могу получить идеальное обнаружение, я бы предпочел иметь меньше обнаруженных кругов, а обнаруженные - правильные.

Спасибо


person wudanao    schedule 18.09.2015    source источник


Ответы (2)


Размытие поможет избежать ложного обнаружения круга за счет уменьшения шума, поскольку openCV использует градиентную версию алгоритма обнаружения круга Хафа, описанную здесь: http://homepages.inf.ed.ac.uk/rbf/BOOKS./BANDB/LIB/bandb4_3.pdf

Размер размытия будет зависеть от верхнего порога внутреннего детектора границ Canny, который равен param_1. Вы захотите поиграть с этим.

Чтобы обойти проблему с яркостью, попробуйте проводить поиск только с изолированными каналами R, G и B. Чтобы получить более полные результаты, вы можете сдвинуть оттенок на 60, а затем снова использовать изолированные каналы.

person Richard Peterson    schedule 18.09.2015
comment
отличный ответ спасибо. Могу я узнать, что делает изменение оттенка на 60? - person wudanao; 19.09.2015
comment
Быстрый, грубый пример: imgur.com/CGB1W58. Вверху слева: исходное изображение, внизу слева: ненасыщенное исходное изображение, вверху справа: оттенок + 60. Внизу справа: обесцвеченная версия оттенка + 60. Иногда что-то становится очевидным в оттенках серого или в отдельных каналах RGB после того, как вы сдвинете оттенок на 60. Почему 60? Потому что он разделяется прямо между каналами. 120 просто перемешивает каналы, но ничего нового не дает. - person Richard Peterson; 19.09.2015
comment
Помогает ли это вам лучше распознавать круги на практике, я не могу сказать. Я просто знаю, что это очень простой и грубый способ вывести информацию, которую вы не можете найти в оттенках серого или в изолированных каналах. - person Richard Peterson; 19.09.2015
comment
поправьте меня, если я ошибаюсь, но оттенок и интенсивность оттенков серого не зависят друг от друга, не так ли? Я думал, что в HSV H, S и V независимы, а V - интенсивность зеленой шкалы. - person wudanao; 19.09.2015
comment
Или вы хотите ввести сам оттенок как интенсивность оттенков серого для серого изображения? - person wudanao; 19.09.2015
comment
Если вы просто используете V из своего изображения HSV, то да, вы правы на 100%. Но это не единственный способ получить оттенки серого. Взгляните на изображения здесь: en.wikipedia.org/wiki/HSL_and_HSV#Disadvantages чтобы увидеть несколько быстрых примеров. В открытом CV вы можете взять максимум (r, g, b), чтобы определить свою шкалу серого, вы можете взять среднее значение (r, g, b) или многие другие варианты. На эти параметры может довольно сильно влиять оттенок, и изменение оттенка имеет значение. Если вы просто берете V, то изменение оттенка ничего не даст. - person Richard Peterson; 19.09.2015
comment
Главное, по крайней мере, попробовать разные каналы R / G / B, а не только V. Это продвинет вас довольно далеко, если вы беспокоитесь о вещах, которые не отображаются только на канале V. - person Richard Peterson; 19.09.2015
comment
что ты имеешь в виду под размером блюра будет взаимодействовать с верхним порогом для внутреннего Canny? по вашему опыту, какой хороший размер выбрать? - person Surfer on the fall; 07.05.2018
comment
Пороги при обнаружении краев определяют, что считать сильным краем, слабым краем и вообще не краем. Верхний порог определяет, что требуется для создания сильного преимущества. Когда вы выполняете проход по Гауссу, вы будете делать две вещи. Во-первых, удаление шума, что снижает вероятность ложных срабатываний. Это обычный шаг для обнаружения края. Но вы также уменьшите контраст между соседними пикселями, а это означает, что вам нужно будет обнаруживать меньшие различия, чтобы прочитать край. - person Richard Peterson; 07.05.2018
comment
Что касается выбора подходящего размера, это полностью зависит от исходного изображения. Распространенной настройкой размытия является матрица 5x5. Если вы делаете что-то в реальном времени, помните, что чем больше ваша матрица размытия, тем медленнее она будет. Вам придется поиграть с параметрами, чтобы получить хорошую производительность и правильный баланс между несколькими ложными срабатываниями и несколькими ложными отрицательными результатами для вашего приложения. - person Richard Peterson; 07.05.2018
comment
Возьмите с недоверием. Я не посещал эту тему несколько лет. - person Richard Peterson; 07.05.2018

Да, это предназначено для уменьшения шума на изображении с целью улучшения обнаружения краев. Алгоритмы обнаружения краев чувствительны к шуму.

Описано здесь: https://en.wikipedia.org/wiki/Median_filter

Но это изображение лучше иллюстрирует, как размытие улучшает (даже ваш мозг) обнаружение границ: ://upload.wikimedia.org/wikipedia/commons/6/62/Cappadocia_Gaussian_Blur.svg

Это изображение взято из статьи о Gaussian Blur, еще одном методе сглаживания, уменьшающем шум в сигналах (например, изображениях). Однако Медианный фильтр сохраняет края лучше, чем Размытие по Гауссу, поэтому его используют при обработке изображений. (Описано в разделе «Свойства сохранения краев» в статье Median Filter Wiki)

person user1123701    schedule 18.09.2015