2015-10-28 4 views
1

Я кодирую свою собственную версию Canny. Так, из литературы, мы должны:Canny edge detector

  1. Smooth с гауссовой
    • Здесь я использую 5x5 маску
  2. Compute градиент величины и ориентации

    • Здесь я использую Sobel, а затем

      Grad = abs(Gx)+ abs(Gy) 
      Orient = (atan2(Gy/Gx) * 180/3.14159265) + 180 
      
  3. Non максимальное подавление
    • Для ех, если Ориент = 0º => если G (я, к)> G (I, J-1) & & G (I, J)> G (я, J + 1) => MAX здесь, в противном случае = 0
  4. Двойной порог
    • На этом шаге мы получаем NL и NH
    • При этом Ясно, что NL содержит NH, поэтому NL = NL - NH
    • Теперь для каждого ненулевого пикселя p в NH (x, y) я должен отмечать как допустимые пиксели все слабые пиксели в NL (x, у), которые соединены с р
  5. финальное изображение
    • Это будет NL + NH

в конце я получаю выход из OpenCV Осторожные для сравнения.

Что я делаю неправильно?

+0

Какой выходной сигнал без шага 1? – basav

ответ

1

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

P.S. Я не просмотрел все ваши шаги. Возможна другая ошибка/s

0

Кровавый ад! Произошла ошибка округления ориентации на возможные четыре случая. В некоторых случаях я забыл поставить знак равенства. Теперь все исправлено.

Теперь я доволен результатом :)

Спасибо вам всем!

С уважением

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