1、 matlab中imfilter平均滤波器的用法:
功能:对任意类型数组或多维图像进行滤波。
用法:
B = imfilter(A,H)
B = imfilter(A,H,option1,option2,...)
或写作g = imfilter(f, w, filtering_mode, boundary_options, size_options)
其中,f为输入图像,w为滤波掩模,g为滤波后图像。filtering_mode用于指定在滤波过程中是使用“相关”还是“卷积”。boundary_options用于处理边界充零问题,边界的大小由滤波器的大小确定。具体参数选项见下表:
参数 | 选项 | 描述 |
---|---|---|
filtering_mode | ‘corr’ | 通过使用相关来完成,该值为默认 |
‘conv’ | 通过使用卷积来完成 | |
boundary_options | ‘X’ | 输入图像的边界通过用值X(无引号)来填充扩展其默认值为0 |
‘replicate’ | 图像大小通过复制外边界的值来扩展 | |
‘symmetric’ | 图像大小通过镜像反射其边界来扩展 | |
‘circular’ | 图像大小通过将图像看成是一个二维周期函数的一个周期来扩展 | |
size_options | ‘full’ | 输出图像的大小与被扩展图像的大小相同 |
‘same’ | 输出图像的大小与输入图像的大小相同。这可通过将滤波掩模的中心点的偏移限制到原图像中包含的点来实现,该值为默认值。 |
举例:
例1:
originalRGB = imread('peppers.png');
imshow(originalRGB)
h = fspecial('motion', 50, 45);%创建一个滤波器
filteredRGB = imfilter(originalRGB, h);
figure, imshow(filteredRGB)
例2:
%生成一个8x8的均值滤波器
originalRGB = imread('peppers.png');
imshow(originalRGB)
w = fspecial('average',8);
filteredRGB = imfilter(originalRGB, w);
figure, imshow(filteredRGB)
例3:
单色图像的平滑:
单色图像(如灰度图像)平滑的过程:定义一个系数为1的模板,用这个空间模板的系数去乘以所有像素的值,并将结果除以模板中元素的总数。
彩色图像的平滑过程:
(1)抽取图像:I(R、G、B)三幅分量。
fR = I(:,:,1);
fG = I(:,:,2);
fB = I(:,:,3);
(2)分别对(R、G、B)这三幅图像分量进行滤波。
例如:平均滤波器 w = fspecial(‘average’, 25); 来进行平滑处理。
fR_filtered = imfilter(fR, w, 'replicate');
fG_filtered = imfilter(fG, w, 'replicate');
fB_filtered = imfilter(fB, w, 'replicate');
也可以对(R、G、B)这三个图像分量一起处理,不用进行第三步。
fc_filtered = imfilter(I, w, 'replicate');
(3)重建滤波后的 RGB 的图像。
fc_filtered = cat(3, fR_filtered, fG_filtered, fB_filtered)
例子程序:
close all
clear all
clc
I = imread('olivian.jpg'); %读取一张噪声图像
%提取图像的三个(R、G、B)分量图像
R = I(:,:,1);
G = I(:,:,2);
B = I(:,:,3);
%生成一个8x8的均值滤波器
w = fspecial('average',8);
fR = imfilter(R,w,'replicate');
fG = imfilter(G,w,'replicate');
fB = imfilter(B,w,'replicate');
fc_filtered = cat(3,fR,fG,fB); %将这四个句子可以改为:fc_filtered = imfilter(I, w, 'replicate');
figure
subplot(121);
imshow(I);title('彩色噪声图像');
subplot(122);
imshow(fc_filtered,'Border','tight');title('彩色图像平滑处理');
2、 matlab中medfilt2二维中值滤波器的用法:
功能:
中值滤波是一种常用的非线性运算 在图像处理中减少“盐和胡椒”噪声。中值滤波器的目标是同时 减少噪点并保留边缘。
如果输入图像 I 是整数类,则所有输出值以整数形式返回。如果邻域是偶数,然后是一些中值 可能不是整数。在这些情况下,小数部分将被丢弃。 逻辑输入的处理方式类似。例如,真实中位数 数组中 2×2 邻域的后续值为 4.5,但丢弃小数部分并返回 4.m*nuint8medfilt2
1 5
4 8
如果将 padopt 指定为 或 ,则填充可能会使中位数在 图像边界。邻域宽度的一半以内的像素的边缘可以 看起来扭曲了。‘zeros’‘indexed’[m n]/2
语法:
J = medfilt2(I)
J = medfilt2(I,[m n])
J = medfilt2(___,padopt)
描述:
J = medfilt2(I):在二维空间中对图像进行中值滤波,每个输出像素都包含围绕 输入图像中的相应像素I
J = medfilt2(I,[m n]):执行中值滤波,其中每个输出像素都包含周围的邻域输入图像中的相应像素mn
J = medfilt2(___,padopt):控制填充图像边界的方式
输入参数:
参数 | 选项 | 描述 |
---|---|---|
I | 数据类型为:single double int8 int16 int32 uint8 uint16 uint32 logical | 输入图像,指定为二维灰度或二进制图像 |
[m n] | 数据类型为:single double int8 int16 int32 int64 uint8 uint16 uint32 uint64 | 邻域大小,指定为正整数的 2 个元素向量 |
padopt | zeros’ (default) | 用 s 填充图像 |
symmetric | 在边界处对称地扩展图像 | |
indexed | 如果 I 的类是 ,则用 s 填充图像;否则,用 S 填充 |
例子:
I = imread('eight.tif');
figure, imshow(I); % 将图像读入工作区并显示
J = imnoise(I,'salt & pepper',0.02); % 添加盐和胡椒噪音
K = medfilt2(J); % 使用中值滤波器滤除噪声
imshowpair(J,K,'montage'); % 并排显示结果