Matlab del2与Matlab梯度梯度之间的差异

时间:2012-09-10 13:49:58

标签: matlab image-processing operators gradient

任何人都可以解释为什么当我使用

时,我在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          ]
正如您所看到的,

将在任何其他方程式中产生显着差异。可能有人都有解释,非常感谢!

2 个答案:

答案 0 :(得分:1)

正如您在documentation of del2上看到的那样,它与1/4因子与您将其进行比较的gradient方法区别开来。

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

答案 1 :(得分:1)

如果你仔细观察Matlab的文档,那么f at(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计算的。因此差异。

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