机器学习MATLAB实现:Matalb-邻域平均法、均值滤波法、中值滤波法对图像进行平滑去噪_邻域平均滤波
欢迎大家来到安静到无声的《模式识别与人工智能(程序与算法)》,如果对所写内容感兴趣请看模式识别与人工智能(程序与算法)系列讲解 - 总目录,同时这也可以作为大家学习的参考。欢迎订阅,优惠价只需9.9元,请多多支持!
目录标题
目录标题
1. 空间滤波增强
空间滤波是通过在图像空间借助模板进行邻域操作完成对图像的滤波操作,包括线性的和非线性的。
空域滤波的主要功能:
- 平滑:低通滤波器:
目的:- 模糊化:在提取较大目标前去除太小的细节或将目标内的小间断连接起来。
- 消除噪声。
- 锐化:高通滤波器,增强被模糊的细节,内容参看传送门
- 滤波处理方法:取中心像素周围的局部邻域 ( 2 M + 1 ) × ( 2 M + 1 ) (2M+1)×(2M+1) (2M+1)×(2M+1)邻域的加权和——局域处理。
注:本篇主要讲解平滑滤波器
2. 平滑滤波器
图像平滑:图像平滑是在图像噪声模型未知时消除噪声的一种常规办法。
特点:降低噪声;细节模糊。
原则:平滑掉图像的噪声,尽量保持图像的细节。
类别:常用的平滑滤波有邻域平均法、均值滤波法、中值滤波法。
3. 邻域平均法
g
(
x
,
y
)
=
1
M
∑
(
x
,
y
)
∈
S
f
(
x
,
y
)
g(x, y)=\frac{1}{M} \sum_{(x, y) \in S} f(x, y)
g(x,y)=M1(x,y)∈S∑f(x,y)
其中
S
S
S可以取4邻域或者8邻域
M
a
s
k
=
1
/
4
[
0
1
0
1
0
1
0
1
0
]
\mathrm{Mask}=1/4\left[\begin{array}{ccc} 0 & 1 & 0 \\ 1 & 0 & 1 \\ 0 & 1 & 0 \end{array}\right]
Mask=1/4
010101010
M
a
s
k
=
1
/
8
[
1
1
1
1
0
1
1
1
1
]
\mathrm{Mask}=1/8\left[\begin{array}{ccc} 1 & 1 & 1 \\ 1 & 0 & 1 \\ 1 & 1 & 1 \end{array}\right]
Mask=1/8
111101111
4. 均值滤波法
- 均值滤波 :在象素邻域内求(加权)局部均值,称为均值滤波。这是实现图像平滑的最常见方法。
-
3
×
3
3×3
3×3均值滤波
O ( X , Y ) = [ I ( X − 1 , Y − 1 ) + I ( X , Y − 1 ) + I ( X + 1 , Y − 1 ) + I ( X − 1 , Y ) + I ( X , Y ) + I ( X + 1 , Y ) + I ( X − 1 , Y + 1 ) + I ( X , Y + 1 ) + I ( X + 1 , Y + 1 ) ] / 9 \begin{aligned} \mathbf{O}(\mathbf{X}, \mathbf{Y})=&[\mathbf{I}(\mathbf{X}-\mathbf{1}, \mathbf{Y}-\mathbf{1})+\mathbf{I}(\mathbf{X}, \mathbf{Y}-\mathbf{1})+\mathbf{I}(\mathbf{X}+\mathbf{1}, \mathbf{Y}-\mathbf{1})\\ &+\mathbf{I}(\mathbf{X}-\mathbf{1}, \mathbf{Y})+\mathbf{I}(\mathbf{X}, \mathbf{Y})+\mathbf{I}(\mathbf{X}+\mathbf{1}, \mathbf{Y}) \\ &+\mathbf{I}(\mathbf{X}-\mathbf{1}, \mathbf{Y}+\mathbf{1})+\mathbf{I}(\mathbf{X}, \mathbf{Y}+\mathbf{1})+\mathbf{I}(\mathbf{X}+\mathbf{1}, \mathbf{Y}+\mathbf{1})] / \mathbf{9} \end{aligned} O(X,Y)=[I(X−1,Y−1)+I(X,Y−1)+I(X+1,Y−1)+I(X−1,Y)+I(X,Y)+I(X+1,Y)+I(X−1,Y+1)+I(X,Y+1)+I(X+1,Y+1)]/9 - 以下是常用的
3
×
3
3×3
3×3低通卷积模板
M a s k = 1 / 9 [ 1 1 1 1 1 1 1 1 1 ] \mathrm{Mask}=1/9\left[\begin{array}{ccc} 1 & 1 & 1 \\ 1 & 1& 1 \\ 1 & 1 & 1 \end{array}\right] Mask=1/9 111111111
M a s k = 1 / 10 [ 1 1 1 1 2 1 1 1 1 ] \mathrm{Mask}=1/10\left[\begin{array}{ccc} 1 & 1 & 1 \\ 1 & 2& 1 \\ 1 & 1 & 1 \end{array}\right] Mask=1/10 111121111
M a s k = 1 / 16 [ 1 2 1 2 4 2 1 2 1 ] \mathrm{Mask}=1/16\left[\begin{array}{ccc} 1 & 2 & 1 \\ 2 & 4& 2 \\ 1 & 2 & 1 \end{array}\right] Mask=1/16 121242121 - 实现步骤
- 模板游走
- 将mask对应下的灰度值相加,求平均值
- 用均值代替 f ( x , y ) f(x,y) f(x,y)
- 均值滤波的特点:
- 在mask中中心的元素占得比例越小,越平滑,图像就越模糊。
- Mask越大,模糊的作用就越强。
- 图像中景物的边缘也会有不同程度地变得模糊。
- 对图像四周我们可以进行补0操作,也可以选择不处理四周边缘。
5. 中值滤波
- 中值滤波:中值滤波与均值滤波的区别仅限于:中值滤波是求局部中值而不是局部均值,即对参与计算的象素灰度值按大小排序,然后取位置居中的象元灰度值。
- 目的:既要消除噪声又要保持图像的细节(边缘等)。
- 中值滤波的机理:在图像局部中,杂散噪声点的灰度值较大或较小,求中值可以自动将其消除。但中值滤波不同于均值滤波,其中值直接取自某个象素的灰度值,不经过计算,所以能较好地保持图像景物原状。
- 实现步骤
- 模板游走
- 将Mask下对应的灰度值(奇数个)进行排序。
- 用中间一个代替f(x,y),消除孤立的噪声点。
- 窗口形状:线状、方形、菱形、十字型、圆形、x形等。
如果窗口关于中心点对称,且包含中心点在内,则中值滤波可保持任意方向的跳变边缘 - 使用二维filter需注意 需注意:
- 窗口由小到大依次增大,达到要求的滤波效果为止。
- 对有缓变的较长轮廓线的图像,一般采用方形或圆形窗口。
- 有尖顶角几何结构的图像,一般采用十字窗,大小不超过最小有效物体的尺寸。
- 有较多的点、线、尖顶角的细节结构,不用中值滤波。
- 中值特点。
- 中值滤波可以消除杂散噪声点而不会或较小程度地造成边缘模糊。
- 对某些输入信号,中值滤波具有不变性。
6. Matlab代码实现
clc;clear all;
img = imread('C:\Users\lihuanyu\Desktop\opencv\image\lena256.bmp');
figure;
imshow(img),title("原图像");
%纵,横,通道数
[ROW,COL] = size(img);
img = double(img);
%构造画布
R = zeros(ROW,COL);
%中值滤波
%mask = zeros(3,3);
for i = 1:ROW - 2
for j = 1:COL - 2
mask = img(i:i+2,j:j+2);
s = sort(mask(:));
R(i+1,j+1) = s(5);
end;
end;
img_result = R/255;
figure(2);
imshow(img_result),title("中值滤波后的图像");
%均值滤波法
for i = 1:ROW - 2
for j = 1:COL - 2
mask = R(i:i+2,j:j+2);
s = sum(mask(:))/9;
R(i+1,j+1) = s;
end;
end;
img_result = R/255;
figure(3);
imshow(img_result),title("均值滤波后的图像");
%邻域均值法
neighbourhood = [1,1,1;1,0,1;1,1,1];
for i = 1:ROW - 2
for j = 1:COL - 2
mask = img(i:i+2,j:j+2);
s = neighbourhood .* mask;
s = sum(s(:));
R(i+1,j+1) = s/8;
end
end
img_result = R/255;
figure(4);
imshow(img_result),title("邻域滤波后的图像");
结果: