Matlab中有高斯滤波函数的导数吗?将高斯滤波器与[1 0 -1]卷积得到结果是否合适?
最佳答案
据我所知,没有内置的高斯滤波器导数。您可以很容易地为自己创建一个,如下所示:
对于二维
G1=fspecial('gauss',[round(k*sigma), round(k*sigma)], sigma);
[Gx,Gy] = gradient(G1);
[Gxx,Gxy] = gradient(Gx);
[Gyx,Gyy] = gradient(Gy);
其中 k 决定它的大小(取决于你想要支持的程度)。
对于 1D 是一样的,但是你没有两个梯度方向,只有一个。您还可以用另一种方式创建高斯滤波器,我假设您已经有了自己喜欢的方法。
在这里我给了你第二个订单,但你可以在这里看到模式以继续进一步的订单。
您发布的卷积滤波器 ( [1 0 -1] ) 看起来像有限差分。虽然我认为你的概念在概念上是正确的,但最正确和最常见的方法是使用 [1 -1] 或 [-1 1],中间的 0 在近似导数时跳过中心样本。这也可能有效(但请记住,这是一个近似值,因为更高阶的结果与 true 结果不同),但我通常更喜欢上面发布的方法。
注意:如果您确实对 2D 滤波器感兴趣,高斯导数系列具有可操纵性,这意味着您可以轻松地为高斯导数在任何方向上创建一个滤波器放弃了你。假设你想要的方向定义为
cos(theta), sin(theta)
那么高斯在那个方向的导数是
Gtheta = cos(theta)*Gx + sin(theta)*Gy
如果你递归地重新应用这个,你可以按照你喜欢的任何顺序。
关于matlab - Matlab中高斯滤波器的导数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23980080/