gpt4 book ai didi

opencv中的Matlab梯度等效

转载 作者:太空宇宙 更新时间:2023-11-03 21:19:49 24 4
gpt4 key购买 nike

我正在尝试将一些代码从 Matlab 迁移到 Opencv,并且需要梯度函数的精确副本。我尝试了 cv::Sobel 函数,但由于某种原因,生成的 cv::Mat 中的值与 Matlab 版本中的值不同。我需要单独矩阵中的 X 和 Y 梯度以进行进一步计算。

任何可以实现这一点的变通办法都是很好的

最佳答案

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);

Matlab 以不同于内部像素的方式处理边界像素。所以上面的代码在边界值处是错误的。可以使用 BORDER_CONSTANT 以常量扩展边界值,不幸的是,OpenCV 常量为 -1,不能更改为 0(这正是我们想要的)。

至于边界值,我没有一个非常简洁的答案。只需尝试手动计算一阶导数...

关于opencv中的Matlab梯度等效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17977936/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com