Matlab中高斯滤波的导数

cer*_*rou 5 matlab filter

在Matlab中是否存在高斯滤波函数的导数?将高斯滤波器与[1 0 -1]进行卷积以获得结果是否合适?

cif*_*ifz 13

据我所知,没有内置的高斯滤波器导数.你可以很容易地为自己创建一个如下:

对于2D

G1=fspecial('gauss',[round(k*sigma), round(k*sigma)], sigma);
[Gx,Gy] = gradient(G1);   
[Gxx,Gxy] = gradient(Gx);
[Gyx,Gyy] = gradient(Gy);
Run Code Online (Sandbox Code Playgroud)

其中k确定它的大小(取决于你想要支持的程度).

对于1D是相同的,但您没有两个渐变方向,只有一个.你也可以用另一种方式创建高斯滤波器,我假设你已经有了自己喜欢的方法.

在这里,我给了你第二个订单,但你可以在这里看到模式以继续进一步的订单.

您发布的卷积滤波器([1 0 -1])看起来像有限差分.虽然我认为你在概念上是正确的,但最正确和最常见的方法是使用[1 -1]或[-1 1],在中间你用0来跳过中心样本近似导数.这也可以起作用(但是记住这是高阶与真实结果不同的近似值),但我通常更喜欢上面发布的方法.


注意:如果您确实对2D滤波器感兴趣,则高斯族的导数具有可操纵性,这意味着您可以轻松地从我放弃的任何方向创建高斯导数的滤波器.假设您想要的方向定义为

cos(theta), sin(theta)
Run Code Online (Sandbox Code Playgroud)

那么高斯在那个方向上的导数就是

Gtheta = cos(theta)*Gx + sin(theta)*Gy
Run Code Online (Sandbox Code Playgroud)

如果你以递归的方式重新申请,你可以去任何你喜欢的订单.