我有一张图像(cv::Mat
,键入CV_32F
)代表网格采样高度函数。网格每像素具有不变的栅格(dx,dy)
。
我想估计其梯度大小。使用OpenCV的Sobel滤波器,我可以近似得出这样的导数:
dfdx=zz.Sobel(zz,cv2.CV_32F,1,0,ksize=3,scale=?)
dfdy=zz.Sobel(zz,cv2.CV_32F,0,1,ksize=3,scale=?)
gradMag=np.sqrt(dfdx**2+dfdy**2)
scale 参数几乎没有记载,但是从源头上看,它用于乘法导数核,即(-1,0,1)
用于有限差分。使用3x3 Sobel内核,我假设比例应为1/2 * dx或1/2 * dy(有限差分scehme)以获得真实比例的导数,但事实并非如此:我正在测试在具有不同栅格但未获得一致结果的半球合成图像上。
应该如何使用 scale 合并栅格尺寸,从而获得真实的导数估计?
答案 0 :(得分:0)
小数位数必须等于0.25,从这里开始:OpenCV's Sobel filter - why does it look so bad, especially compared to Gimp?
内核的归一化除数可以通过以下公式计算:
enter code here
f = max(abs(sumNegative),abs(sumPositive))
其中sumNegative是内核中的负值之和,sumPositive是内核中的正值之和。