Пороговые значения детектора Canny Edge дают разные результаты

Я пытаюсь найти контур изображения, перед этим применяю детектор краев Канни. Это дает разные результаты для разных изображений. Для одного изображения он дает идеальные контуры при пороговом значении - min-40 max-240, а для другого изображения - 30-120. Я хочу сделать его универсальным.


person Rahul galgali    schedule 21.07.2014    source источник


Ответы (1)


С точки зрения непрофессионала, обнаружение краев требует порога, чтобы определить, какое различие/изменение следует считать краем. Подробнее читайте здесь.

Таким образом, края зависят от содержимого изображения, т.е. уровня яркости/темноты/контрастности. Я предлагаю вам просто найти среднее значение всего серого изображения и принять пороговое значение следующим образом:

мин_порог = 0,66 * среднее

макс_порог = 1,33 * среднее

Я проверил это, и это дает впечатляющий результат. Вы можете использовать медиану вместо среднего с почти таким же результатом. Другой вариант - сначала выровнять изображение, а затем попробовать порог по вашему выбору/экспериментальный.

Но опять же настоятельно рекомендую попробовать средний метод. В случае возникновения вопросов пишите сюда.

Удачного кодирования :)

person Pervez Alam    schedule 21.07.2014
comment
привет, парвез, спасибо за ответ .. для изображений хорошего качества он работает идеально .. наш способ теперь охватывает 60% случаев :). Можете ли вы предложить мне альтернативу для обнаружения контура ?? - person Rahul galgali; 21.07.2014
comment
Привет, я рад, что это помогло. Пожалуйста, дайте несколько образцов проблемного изображения, чтобы сосредоточиться на проблеме. - person Pervez Alam; 21.07.2014
comment
Привет! Я попробую ваш способ установки порога ... Вы говорите о среднем уровне серого на входном изображении? или среднее значение градиентного изображения? Откуда берутся значения 0,66 и 1,33? - person remi; 21.07.2014
comment
Привет, Реми, я говорю о необработанном значении серого, а не о градиентах. Просто попробуйте. Я визуализировал это, когда работал над чем-то подобным. - person Pervez Alam; 21.07.2014
comment
Привет, парвез.. вот ссылка на изображение, над которым я работал i.imgur.com/mq9YBH7.jpg ?1 это не дает мне достаточно контуров с вашими значениями ... но когда я использовал камеру высокого разрешения с 5-мегапиксельной камерой или более ... это дало мне хорошие результаты (70-80%). .. заранее спасибо - person Rahul galgali; 21.07.2014
comment
Привет, Рахул, изображение, которое вы прикрепили, не является нормальным / естественным содержанием сцены. Человек может распознать его как бинарное изображение. Поэтому я предлагаю вам попробовать следующую вещь, которую я предложил в своем ответе, то есть вместо использования среднего значения попробуйте найти приблизительную медиану серого изображения и оставьте все как есть. Пожалуйста, опубликуйте свой результат, если требуется дальнейшее обсуждение. - person Pervez Alam; 21.07.2014
comment
Привет, парвез. Я тоже пытался использовать медиану, но значения почти одинаковы, а изображение слишком плохое, чтобы найти край. - person Rahul galgali; 22.07.2014
comment
Вспышка/яркость не является правильным показателем. Лучше контраст, лучше края. Посмотрите, поскольку изображение на самом деле двоичное, и человек его понимает, я бы посоветовал вам применить некоторый порог значения серого или просто попробовать адаптивный порог opencv, в вашем случае результат будет крайним. Еще одна вещь: вы можете уменьшать изображение в зависимости от различных факторов и видеть, какой фактор дает вам наилучшее преимущество. Для приложенного изображения масштабирование вдвое дает хитрый и адаптивный порог наилучшего преимущества. Надеюсь, это поможет. - person Pervez Alam; 22.07.2014