【问题标题】:Discrepancy between Matlab del2 and Matlab gradient of gradientMatlab del2和Matlab梯度梯度的差异
【发布时间】:2012-09-10 13:49:58
【问题描述】:

谁能解释为什么我在使用 Matlab 中的拉普拉斯算子时得到如此显着不同的结果

laplacian = del2(image);

对比

[x, y] = gradient(image);
[xx, xy] = gradient(x);
[yx, yy] = gradient(y);
laplacian = xx + yy;

这些不应该是同一件事吗?当一个包含 dx 项时,它们会变得特别不同。

把我的例子放在这里以防万一:我有一个由

组成的测试字段
 [5; 2.5+2.5i; 5i; -2.5+2.5i; -5; -2.5-2.5i; -5i; 2.5-2.5i] 

乘以它的转置(如果有帮助,我可以发布整个矩阵)。该字段的del2()的内块(3:6, 3:6)为:

[-2.5           -0.625-0.625i  -2.5i           0.625-0.625i ;
 -0.625+0.625i   0             -0.625+0.625i   0            ;
  2.5i          -0.625+0.625i  -2.5           -0.625+0.625i ;
  0.625+0.625i   0             -0.625+0.625i   0            ] 

而 xx + yy 的内块 (3:6, 3:6) 是:

[-5             -2.5-2.5i      -5i            -2.5-2.5i     ; 
 -2.5+2.5i      -2.5           -2.5-2.5i      -2.5i         ; 
  5i            -2.5+2.5i      -5             -2.5-2.5i     ; 
  2.5+2.5i       2.5i          -2.5+2.5i      -2.5          ]

如您所见,这将对任何进一步的方程式产生巨大影响。谁能解释一下,非常感谢!

【问题讨论】:

  • 你的变量'image'代表什么功能?
  • 是通过imread()加载的图片。
  • 看源码了吗? “类型 del2”,“类型渐变”
  • 它们都可以被带入编辑器。我可以花一整天的时间来区分这些差异,但我认为有人可能会有一个概念性的解释。
  • 什么戏剧效果?请说明!我只是在边缘有一些失真。用于测试的函数:z=X.^2.*Y

标签: matlab image-processing operators gradient


【解决方案1】:

正如您在 documentation of del2 上看到的那样,它与您比较的 gradient 方法相差 1/4

这部分解释了您示例中的因素 4。 我将其余的归咎于边缘效应:p

【讨论】:

  • 是的,否则其余的可能是棋盘式,因为测试字段的分辨率太低了。就是这么想的。谢谢。
  • @GuntherStryuf 大家好。我正在经历这个问题,因为我遇到了类似的问题。 Matlab 定义的拉普拉斯算子真的正确吗?不应该是向量梯度的散度等于拉普拉斯算子吗?为什么 MATLAB 在边缘做外推?
  • 1.当他们把它放在他们的文档中时,它看起来对我来说是正确的。 2. `div(gradient(F(X))) == laplacian(F(X))´ 确实如此,不是在 matlab 实现中吗?实际没用过。我建议你做一些测试,看看什么适合你的需要。 3. 边缘外推是为了保持相同的向量大小而完成的。
  • 两个结果中可能还有一个样本的偏移!
【解决方案2】:

如果你仔细观察Matlab's documentation,f 在 (x,y), del2(f(x,y)) 处的拉普拉斯算子仅使用 (x,y) 及其最近邻:x+1, x-1, y+1, y-1.

对于梯度函数(以及显式使用梯度函数的散度)也是如此。两次计算梯度涉及最近邻居的最近邻居。因此 div(grad(f(x,y)) 实际上是使用 (x,y) 和 x+2, x-2, y+2, y-2 计算的。因此存在差异。

网格间距越大,这两个计算之间的差异就会越大。

【讨论】:

  • 这是正确的。我自己学会了这一点,但从来没有回到这个问题。所以,你得到了答案。 :)
  • 这是不正确的。使用 x 和 x+1 计算梯度。重复应用会产生这个 x、x+1 和 x+2,这只是 del2 所做的一个转变。
猜你喜欢
  • 2013-09-30
  • 1970-01-01
  • 2015-04-11
  • 1970-01-01
  • 2014-07-22
  • 2011-10-28
  • 2017-01-03
  • 1970-01-01
  • 2014-03-14
相关资源
最近更新 更多