opencv - 如何在 OpenCV 中计算图像的散度和梯度?
问题描述
我会使用这段代码:
Mat o_k;
Mat Lapl;
double lambda;
Laplacian(o_k, Lapl, o_k.depth(), 1, 1, 0, BORDER_REFLECT);
Lapl = 1.0 - 2.0*lambda*Lapl;
但是,我试图在 OpenCV 中实现以下等式:
我知道div
,或分歧,术语会是这样的,对吧?
int ksize = parser.get<int>("ksize");
int scale = parser.get<int>("scale");
int delta = parser.get<int>("delta");
Sobel(res, sobelx, CV_64F, 1, 0, ksize, scale, delta, BORDER_DEFAULT);
Sobel(res, sobely, CV_64F, 0, 1, ksize, scale, delta, BORDER_DEFAULT);
div = sobelx + sobely;
res
括号中项的结果在哪里。但是我如何得到括号中的术语?
还是我做错了?上面实际上是否div
等于 的梯度?res
如果是这样,那么我如何获得分歧?
编辑:
根据此链接,幅度也可以计算为mag = abs(x) + abs(y)
:https ://docs.opencv.org/2.4/doc/tutorials/imgproc/imgtrans/sobel_derivatives/sobel_derivatives.html#sobel-derivatives
并且由于div
梯度是拉普拉斯算子,下面的代码是否等同于第二个方程?
Sobel(res, sobelx, CV_64F, 1, 0, ksize, scale, delta, BORDER_DEFAULT);
Sobel(res, sobely, CV_64F, 0, 1, ksize, scale, delta, BORDER_DEFAULT);
convertScaleAbs( sobelx, abs_grad_x );
convertScaleAbs( sobely, abs_grad_y );
/// Total Gradient (approximate)
Mat mag;
addWeighted( abs_grad_x, 1, abs_grad_y, 1, 0, mag);
Laplacian(o_k, Lapl, o_k.depth(), 1, 1, 0, BORDER_REFLECT);
Mat top;
top = lambda * Lapl;
Mat result;
divide(top, mag, result);
解决方案
推荐阅读
- python - 将单个文件中的 2 个参数传递给函数参数
- javascript - 我想在我的 ajax 表中添加编辑按钮
- python - 如何在pandas df中并行循环两组列?
- c# - C# Net Core System.InvalidOperationException:无法解析服务类型
- uipath - 我想在不使用 HAA 的情况下为我的 Uipath Orchestrator 进行故障转移。我希望我的标准编排器切换到基本编排器,这可能吗?
- deep-learning - 获取 PyTorch 中特定索引处的值
- javascript - 寻找一种将标准打字稿js项目与使用模块的项目混合的方法
- c# - 为什么同步控制台 Main Method 挂起调用异步方法?
- python-3.x - 运行时出现错误“NoneType”对象没有属性“成员”
- node.js - 数据库更新后通知 Socket 发送消息