matlab - Matlab中高斯滤波器的导数

标签 matlab filter

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/

相关文章:

matlab - 脚本中的语句可以停止 Matlab M 脚本吗?

javascript - 如何在 Angular 中仅按一个值过滤数据?

javascript - 使用 jquery 或 javascript 的下拉列表过滤器

MATLAB:将 LaTeX 字符与轴标题中的数据格式相结合

Matlab:如何在等高线图上设置对数刻度

Python:使用 h5py 和 NumPy 从 MATLAB .mat 文件读取 str 时出现问题

c++ - 无法在 Windows 10 上安装的 Cuda 工具包 v7.5 上找到 deviceQuery

ios - 按字符串属性的首字母过滤数组

python - 是否有将日期时间转换为 "5 hours ago"或 "12 days ago"的 Django 模板过滤器?

java - 找到一个具体的实例,最好的方法是什么