Собель может вычислять только вторую производную от пикселя изображения, которая не является тем, что мы хотим.
(е (я + 1, к) + е (я-1, J) - 2е (I, J))/2
Что мы хотим
(е (я + I, J) -f (я-1, J))/2
Таким образом, мы должны применить
Mat kernelx = (Mat_<float>(1,3)<<-0.5, 0, 0.5);
Mat kernely = (Mat_<float>(3,1)<<-0.5, 0, 0.5);
filter2D(src, fx, -1, kernelx)
filter2D(src, fy, -1, kernely);
Matlab обрабатывает пиксели границы в отличие от внутренних пикселей. Таким образом, приведенный выше код не соответствует значениям границы. Можно использовать BORDER_CONSTANT для выравнивания значения границы с постоянным числом, к сожалению, постоянное число равно -1 по OpenCV и не может быть изменено на 0 (это то, что мы хотим).
Что касается границ, у меня нет очень аккуратного ответа на него. Просто попробуйте вычислить первую производную вручную ...
'резюме :: Собел()' это именно то, что вы хотите. Если вы публикуете код, который вы использовали (и что вы ожидаете от него), мы можем посмотреть и посмотреть, что ваша проблема. – Aurelius