【问题标题】:Approximating true heightmap gradient magnitude with opencv's Sobel filter使用 opencv 的 Sobel 滤波器逼近真实的高度图梯度幅度
【发布时间】:2019-06-19 12:36:32
【问题描述】:

我有一个图像(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 应该如何用于合并栅格维度,从而获得真正的导数估计?

【问题讨论】:

    标签: opencv derivative sobel


    【解决方案1】:

    比例必须等于 0.25,从这里开始:OpenCV's Sobel filter - why does it look so bad, especially compared to Gimp?

    内核的归一化除数可以通过以下公式计算:

    enter code heref = max(abs(sumNegative), abs(sumPositive))

    其中 sumNegative 是内核中负值的总和,而 sumPositive 是内核中正值的总和。

    【讨论】:

    • 比例也取决于光栅大小。怎么样?
    猜你喜欢
    • 1970-01-01
    • 2021-08-14
    • 1970-01-01
    • 2018-09-16
    • 2014-04-18
    • 2020-09-12
    • 1970-01-01
    • 2014-02-01
    • 2018-02-07
    相关资源
    最近更新 更多