openCV против GIMP, обнаружение края терпит неудачу в openCV

Я делаю обнаружение края Sobel в openCV, используя следующие параметры:

cv.Sobel(mat, edgemat, 1, 1)
# mat -> source image
# edgemat -> taget output image 
# 1 -> xorder (int) – Order of the derivative x
# 1 -> yorder (int) – Order of the derivative y
# apertureSize (int) – Size of the extended Sobel kernel -> its by default set to 3

Я также сделал обнаружение края Sobel на изображении с помощью GIMP.

Источник изображения: Source image Выход openCV -openCV output Выход GIMP GIMP output

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

1 ответов


простой ответ: Вы делаете это неправильно. См.документация - то, что вы делаете вычисления d^2/(dx dy) производная от изображения-это означает ,что" как горизонтальные края изменяются вертикально "(или, что эквивалентно," как вертикальные края изменяются горизонтально"), это означает, что для вертикального или горизонтального края вы ожидаете вывод нуля (потому что он не изменяется в направлении, перпендикулярном ему). Итак, то, что вы делаете с вашей линией opencv, не является обнаружением края на все. Вы, вероятно, хотите что-то вроде sobel с 1, 0 как параметры и 0, 1, затем квадрат этих результатов и сложить их, а затем взять квадратный корень из результата. Это может привести к чему-то вроде того, что делает GIMP.