2011-06-13 301 views
7

是否有可用于MATLAB的imfilter的三维等价物?我希望将高斯滤波应用于3D直方图。我将自己实现它,通过创建一个(3D)高斯滤波器,然后遍历我的直方图中的每个元素,并总结相应的数据条目。MATLAB中的三维高斯滤波器

但是,如果已经存在某种东西或者更明智的方法,我不想自己以低速低效的方式实现它。

+0

假设您的高斯滤波器是可分离的,那么您应该可以应用2D滤波器,然后应用1D滤波器? – 2011-06-13 13:10:41

回答

5

有两种方法,以执行滤波以有效的方式来解决这个问题:

(1)使用CONVN三次具有三个1D高斯过滤数据,一个x由-1-由-1,1乘1乘1,1乘1乘1。 (2)如果您有信号处理工具箱,请使用FFTFILT在反空间中执行滤波(或在文件交换中使用任何一种fft-卷积算法)。

[(3)给我发电子邮件,我会送你我的fftFilterImage,这确实3D高斯滤波]

4

imfilter已经可以做3D滤波,只要数据矩阵,你给过滤器它是3D。见the imfilter page

1

这个任务可以使用新的(截至R2015a)imgaussfilt3函数来处理。

的基本语法如下:

B = imgaussfilt3(A,sigma) 

还有许多name-value pair arguments

  • 'FilterSize':高斯滤波器的大小,默认为大小2*ceil(2*sigma)+1的立方体。
  • 'Padding':填充类型('replicate'(默认)| 'circular' | 'symmetric')。
  • 'FilterDomain':在域中执行卷积:'frequency''spatial'(默认自动)。