任何人都可以解释为什么当我使用
时,我在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 ]
正如您所看到的,将在任何其他方程式中产生显着差异。可能有人都有解释,非常感谢!
答案 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计算的。因此差异。
网格间距越大,这两个计算之间的差异就越大。