Matlab滤波函数



filter2
MATLAB图像处理工具箱提供了基于卷积的图象滤波函数filter2,filter2的语法格式为:
Y = filter2(h,X)
其中Y = filter2(h,X)返回图像X经滤波算子h滤波后的结果,默认返回图像Y与输入图像X大小相同。其实filter2和conv2是等价的。MATLAB在计算filter2时先将卷积核旋转180度,再调用conv2函数进行计算。

conv2函数

C=conv2(A,B,shape);

A:输入图像,B:卷积核
       假设输入图像A大小为ma x na,卷积核B大小为mb x nb,则
       当shape=full时,返回全部二维卷积结果,即返回C的大小为(ma+mb-1)x(na+nb-1)
      shape=same时,返回与A同样大小的卷积中心部分
       shape=valid时,不考虑边界补零,即只要有边界补出的零参与运算的都舍去,返回C的大小为(ma-mb+1)x(na-nb+1)
2、实现步骤
    假设输入图像A大小为ma x na,卷积核大小为mb x nb,则MATLAB的conv2函数实现流程如下:
        a、对输入图像补零,第一行之前和最后一行之后都补mb-1行,第一列之前和最后一列之后都补nb-1列(注意conv2不支持其他的边界补充选项,函数内部对输入总是补零)。
        b、关于卷积核的中心,旋转卷积核180度。
        c、滑动卷积核,将卷积核的中心位于图像矩阵的每一个元素。
        d、将旋转后的卷积核乘以对应的矩阵元素再求和。
3、实现过程展示
     假设有图像A=[4 3 1 2;0 1 1 3;5 2 0 0],卷积核B=[1 2 3;0 -1 2;1 1 0]
         a、首先是按照上面的步骤进行补零,如下图外圈红色的为补出的零

fspecial函数

用于建立预定义的滤波算子,其语法格式为:
h = fspecial(type)
h = fspecial(type,para),其中type指定算子的类型,para指定相应的参数;
MATLAB 中,滤波函数广泛用于信号和图像处理。这些函数可以实现多种滤波操作,包括平滑滤波、锐化滤波、带通滤波等。以下是常用的 MATLAB 滤波函数及其使用方法: ### 常用滤波函数 1. **`filter2`** `filter2` 函数用于对二维数据(如图像)进行卷积滤波。通常与 `fspecial` 配合使用,以生成特定的滤波核。 - 示例:使用 3×3 的平均滤波器对添加椒盐噪声的图像进行平滑滤波: ```matlab I = imread('c4.jpg'); I1 = imnoise(I, 'salt & pepper', 0.02); k1 = filter2(fspecial('average', 3), I1) / 255; ``` 其中,`fspecial('average', 3)` 创建了一个 3×3 的平均滤波核 [^1]。 2. **`fspecial`** `fspecial` 用于创建预定义的二维滤波器核,支持多种类型的滤波器,例如 `'average'`(均值滤波)、`'gaussian'`(高斯滤波)、`'sobel'`(Sobel 边缘检测)等。 - 示例:创建一个 5×5 的高斯滤波核: ```matlab h = fspecial('gaussian', [5 5], 2); ``` 3. **`imfilter`** `imfilter` 是专门针对图像设计的滤波函数,适用于多通道图像(如 RGB 图像)。相比 `filter2`,它更加灵活,支持边界扩展方式。 - 示例:使用 Sobel 滤波核对图像进行边缘检测: ```matlab h_sobel = fspecial('sobel'); edge_img = imfilter(double(gray_img), h_sobel); ``` 4. **`deconvwnr`** `deconvwnr` 是维纳滤波函数,常用于图像复原,特别是在存在模糊和噪声的情况下。该函数通过最小均方误差准则来估计原始图像。 - 示例:使用维纳滤波复原模糊图像: ```matlab img = imread('c2.jpg'); motion = 12; h = 1/motion * ones(1, motion); % 点扩散函数 nsr = 0.002; % 噪声功率与信号功率比 f_restored = deconvwnr(img, h, nsr); ``` 5. **`medfilt2`** `medfilt2` 实现中值滤波,常用于去除椒盐噪声。相比于线性滤波器,中值滤波在保留边缘的同时能有效抑制脉冲噪声。 - 示例:使用 3×3 的中值滤波器去除噪声: ```matlab I_clean = medfilt2(I_noisy, [3 3]); ``` 6. **`wiener2`** `wiener2` 是一种局部自适应维纳滤波器,适用于具有空间变化统计特性的图像。它可以自动调整滤波参数以适应局部图像特性。 - 示例:使用自适应维纳滤波器增强图像细节: ```matlab I_enhanced = wiener2(I_blurred, [5 5]); ``` 7. **`designfilt` 和 `filter`** 在一维信号处理中,MATLAB 提供了 `designfilt` 来设计数字滤波器,并结合 `filter` 进行滤波操作。适用于低通、高通、带通、带阻等滤波需求。 - 示例:设计并应用一个低通滤波器: ```matlab d = designfilt('lowpassfir', 'PassbandFrequency', 0.2, 'StopbandFrequency', 0.3, ... 'PassbandRipple', 1, 'StopbandAttenuation', 60, 'SampleRate', 1); y_filtered = filter(d, x_signal); ``` ### 使用方法总结 - **图像处理中的滤波**:主要使用 `filter2`、`imfilter`、`medfilt2`、`wiener2` 和 `deconvwnr`。其中 `fspecial` 可以配合生成不同类型的滤波核。 - **信号处理中的滤波**:推荐使用 `designfilt` 设计滤波器,并通过 `filter` 对信号进行处理。 - **滤波核选择**:根据任务需求选择合适的滤波核类型,例如 `'average'` 用于平滑、`'sobel'` 用于边缘检测、`'gaussian'` 用于高斯模糊等。 - **噪声处理策略**:对于椒盐噪声,优先考虑中值滤波;对于高斯噪声或模糊图像,可使用维纳滤波或自适应维纳滤波。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值