Welcome to my blog.|

Khru

园龄:2年11个月粉丝:22关注:1

2022-04-15 00:02阅读: 2087评论: 0推荐: 0

Matlab-形态学滤波去除椒盐噪声实例

形态学滤波最基本的两个形态学操作是腐蚀和膨胀,其他的高级形态学操作是基于这两个基本的形态学操作进行的,比如开运算、闭运算、形态学梯度、顶帽、黑帽等。

需要注意的是,在Matlab中,亮值是目标物,暗值是背景点。

先上结果:

 

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
%% 形态学去噪
P = imread('cameraman.jpg');
I = imnoise(P, 'salt & pepper', 0.05);
 
SE = strel('disk', 1);
 
J1 = imerode(I, SE);
J1 = imerode(J1, SE);
J2 = imdilate(J1, SE);
J2 = imdilate(J2, SE);
J2 = imdilate(J2, SE);
J2 = imdilate(J2, SE);
J3 = imerode(J2, SE);
J3 = imerode(J3, SE);
figure;
subplot(2,3,1), imshow(P), title("原图");
subplot(2,3,2), imshow(I), title("椒盐噪声");
subplot(2,3,3), imshow(J1), title("腐蚀两次");
subplot(2,3,4), imshow(J2), title("膨胀两次");
subplot(2,3,5), imshow(J3), title("膨胀两次");
subplot(2,3,6), imshow(J4), title("腐蚀两次");
 
%% 另一种方式
J1 = imclose(I, SE);
J2 = imopen(J1, SE);
J3 = imclose(J2, SE);
J4 = imopen(J3, SE);
figure;
subplot(2,3,1), imshow(P), title("原图");
subplot(2,3,2), imshow(I), title("椒盐噪声");
subplot(2,3,3), imshow(J1), title("闭运算");
subplot(2,3,4), imshow(J2), title("开运算");
subplot(2,3,5), imshow(J2), title("闭运算");
subplot(2,3,6), imshow(J4), title("开运算");
 
%% 中值滤波对比
m = medfilter(I, 3);
figure;
subplot(1,3,1), imshow(P), title("原图");
subplot(1,3,2), imshow(I), title("椒盐噪声");
subplot(1,3,3), imshow(m), title("中值滤波");

  中值滤波的函数可以参考 Matlab-代码实现图像平滑去噪 这一篇文章。

 

通过先腐蚀膨胀后膨胀腐蚀的方式可以实现先消除白点再消除黑点。也可以通过闭运算再开运算的方式消除椒盐噪声。形态学滤波的形式多种多样。

就结果而言,形态学滤波和中值滤波在处理椒盐噪声上的效果是近似的,在细节方面形态学滤波逊于中值滤波,因为形态学滤波只能够使图像总的位置和形状不变,在进行腐蚀和膨胀的时候会造成较多的信息丢失,而中值滤波相对损失较少的信息。

就过程而言,形态学滤波需要尝试结构元素的现状和大小、腐蚀和膨胀的先后顺序和开运算闭运算的顺序,过程比较复杂,而中值滤波较为简单。

本文作者:Khru

本文链接:https://www.cnblogs.com/khrushchefox/p/16147184.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Khru  阅读(2087)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起