opencv - 使用 opencv 的 Sobel 滤波器逼近真实的高度图梯度幅度
问题描述
我有一个表示网格采样高度函数的图像 ( cv::Mat
, type )。网格每像素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)以获得真实比例的导数,但情况似乎并非如此:我正在测试这个在具有不同光栅但没有得到一致结果的半球合成图像上。
应该如何使用比例来合并栅格尺寸,从而获得真正的导数估计?
解决方案
比例必须等于 0.25,从这里开始:OpenCV 的 Sobel 过滤器 - 为什么它看起来如此糟糕,尤其是与 Gimp 相比?
内核的归一化除数可以通过以下公式计算:
enter code here
f = max(abs(sumNegative), abs(sumPositive))
其中 sumNegative 是内核中负值的总和,而 sumPositive 是内核中正值的总和。
推荐阅读
- javascript - 如何使用 Alpine.js 创建动画数字计数器?
- reactjs - 如何在选择输入反应管理员中设置值?
- r - r:为什么在应用 as.Date() 和 origin 时字符串显示日期而不是日期?
- python - 使用 List 切片 Numpy 数组
- java - cmd中的“java -version”没有结果
- python - Python中的圆和弦图
- c# - 如何处理与 HttpClient 的并发冲突?
- macos - 无法在 MacOS 上使用 gfortran 在 makefile 中链接 BLAS 和 LAPACK
- scope - 在 Coq 中模拟全局和局部变量
- python - 从字典和字符串格式创建表 - Python