Arp*_*hah 2 matlab opencv gradient derivative
我正在尝试将一些代码从Matlab迁移到Opencv,并且需要一个完全复制的渐变函数.我尝试过cv :: Sobel函数,但由于某种原因,生成的cv :: Mat中的值与Matlab版本中的值不同.我需要在单独的矩阵中使用X和Y梯度进行进一步的计算.
任何可以实现这一目标的解决方法都会很棒
小智 5
Sobel只能计算图像像素的二阶导数,这不是我们想要的.
(f(i + 1,j)+ f(i-1,j)-2f(i,j))/ 2
我们想要的是什么
(f(i + i,j)-f(i-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);
Run Code Online (Sandbox Code Playgroud)
Matlab以不同于内部像素的方式处理边框像素.所以上面的代码在边界值上是错误的.可以使用BORDER_CONSTANT用一个常数来扩展边界值,不幸的是OpenCV的常数是-1,不能改为0(这就是我们想要的).
对于边界价值观,我没有一个非常巧妙的答案.试着手动计算一阶导数......