Matlab del2和Matlab梯度之间的差异
有人能解释为什么我在使用Matlab时,得到了与拉普拉斯算子截然不同的结果吗Matlab del2和Matlab梯度之间的差异,matlab,image-processing,operators,gradient,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
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 ]
正如你所见,这将在任何进一步的方程式中产生巨大的差异。谁能解释一下,谢谢 正如您在上所看到的,它与您比较它的方法不同,系数为1/4
这在一定程度上解释了示例中的因子4。
我把其余的都归咎于边缘效应:如果你仔细观察,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来计算的。因此,差
网格间距越大,这两个计算之间的差异就越大。变量“image”代表什么函数?它是通过imread()加载的图像。您看过源代码吗?“type del2”,“type gradient”它们也可以被带到编辑器中。我可以花一整天的时间试图区分这些差异,但我想有人可能会有一个概念上的解释。什么戏剧性的效果?请举例说明!我只在边缘处得到了一些扭曲。用于测试的函数:
z=X.^2.*Y
是,或者其他函数可能是棋盘格,因为测试“场的分辨率太低了。我想起来了。谢谢。@GuntherStryuf。我之所以要问这个问题,是因为我陷入了一个类似的问题。Matlab定义的拉普拉斯算子真的正确吗?向量梯度的散度不应该等于拉普拉斯算子吗?为什么Matlab在边缘进行外推当他们把它放在文档中时,我觉得它是正确的。2.`div(梯度(F(X))==laplacian(F(X))因此,是的,它不是在matlab实现中吗?实际上没有使用它。我建议你做一些测试,看看什么适合你的需要。3.为了保持相同的向量大小,我在边缘做了外推。两个结果中可能也有一个样本发生了变化!这是正确的。我自己学过,但从未回到这个探索中所以,你得到了答案。:)这是不正确的。使用x和x+1计算梯度。重复的应用程序会使这个x、x+1和x+2发生变化,这只是del2
的变化。