Рассчитайте y производную изображения

Я хочу реализовать производную у изображения.
Дана следующая функция openCV, которая использует оператор Собела:

Sobel(gray_input_picture, y_derivative_picture, CV_32FC1 , 0, 1, 3, BORDER_DEFAULT);

Вот пример, как это выглядит:

result_i_want

Теперь мне нужно реализовать это самостоятельно, не используя эту функцию sobel.

Я нашел некоторую помощь здесь: Расчет направления градиента

То, что я теперь реализовал, было:

for(int x=0; x<gray_input_picture.rows; x++)
{
for(int y=0; y<gray_input_picture.cols; y++)
{
if(x == gray_input_picture.rows-1 || x == 0)
{
y_derivative.at<Vec3b>(x,y) = gray_input_picture.at<Vec3b>(x,y);
}
else
{
Vec3b color;
color[0] = gray_input_picture.at<Vec3b>(x+1,y)[0] - gray_input_picture.at<Vec3b>(x-1,y)[0];
color[1] = gray_input_picture.at<Vec3b>(x+1,y)[1] - gray_input_picture.at<Vec3b>(x-1,y)[1];
color[2] = gray_input_picture.at<Vec3b>(x+1,y)[2] - gray_input_picture.at<Vec3b>(x-1,y)[2];
y_derivative_picture.at<Vec3b>(x,y) = color;
}
}
}

bitwise_not ( y_derivative_picture, y_derivative_picture2 );

Переключатель x и y происходит от openCV. Вот почему это немного по-другому. Что я не понимаю, так это то, что я получаю изображение, которое мне нужно конвертировать (черный в белый, белый в черный).

Результат тоже немного другой. Содержит синие области:

введите описание изображения здесь

Кто-нибудь знает, как я могу лучше реализовать производную y (что она похожа на функцию Собеля)?
Или кто-нибудь знает проблему в моей реализации?

Спасибо!

1

Решение

Я думаю, что вам, вероятно, нужно проверить, что оператор Sobel делает здесь:

http://en.wikipedia.org/wiki/Sobel_operator

1

Другие решения


По вопросам рекламы [email protected]