CV——图像点运算与局部运算

本文介绍了点运算(膨胀、腐蚀、开闭运算)和局部运算(均值、高斯、中值、锐化滤波)的基本原理及Matlab实现。重点比较了不同滤波器在处理高斯和椒盐噪声时的去噪效果,以及它们在不同场景下的适用性。

一、定义

点运算:对像素点的单独计算,不涉及到领域像素
局部运算:计算像素点时涉及到领域像素
常见的点运算:膨胀、腐蚀、开、闭
常见的局部运算:均值滤波器、高斯滤波器、中值滤波器、锐化滤波器——均为空间滤波器

二、原理介绍

膨胀

在这里插入图片描述

  1. a为待膨胀图像 b为膨胀结构元 (c为膨胀结构元的映像) d阴影部分为膨胀后的图像
  2. 腐蚀结构元原点 对准 某个图像的像素,当该像素为1,该像素对应的结构元位置被置为1
  3. 处理后的效果为原图像的目标被放大,填补目标的空洞

腐蚀

在这里插入图片描述

  1. a为待腐蚀图像 b为腐蚀结构元 c阴影部分为腐蚀后的图像
  2. 腐蚀结构元原点 对准 某个图像的像素,当该像素对应的结构元位置有不为1的,该像素被置为0
  3. 处理后的效果为原图像的目标被缩小,消除小而无意义的像素

开运算

  1. 先腐蚀后膨胀
  2. 处理后的效果为:去除比结构元小的像素

闭运算

  1. 先膨胀后腐蚀
  2. 处理后的效果为:填充比结构元小的像素

均值滤波器

在这里插入图片描述
步骤:

  1. 将卷积核内的像素进行相加
  2. 将相加的和 除以 卷积核的大小
  3. 使用均值填充卷积核的中心元素

效果:

  1. 平滑图像
  2. 减少噪声——特别是高斯噪声
  3. 模糊边缘
  4. 产生振铃现象——高斯卷积核可以解决

高斯滤波器

在这里插入图片描述
步骤:

  1. 确认卷积核大小
  2. 确认卷积核方差
  3. 计算卷积核每个位置的权重
  4. 对权重值进行归一化
    在这里插入图片描述

效果:

  1. 平滑图像
  2. 减少噪声
  3. 不会出现振铃现象

中值滤波器

在这里插入图片描述
步骤:

  1. 对卷积核内像素进行排序
  2. 取排序后的中值
  3. 使用中值代替卷积核的中心像素

效果:

  1. 减少噪声——特别是椒盐噪声
  2. 较好保留锐化部分和图像细节

锐化滤波器

在这里插入图片描述
步骤:

  1. 提高中心权重
  2. 计算局部均值
  3. 利用中心减去局部均值,凸显中心

效果:

  1. 图像锐化
  2. 突出细节

三、基础实验

一、matlab点运算函数介绍

%结构元的建立
strel = strel('arbitrary',eye(5))
创建一个对角线为1的,大小为5*5的结构元
其他类型的结构元创建 参考strel函数

%腐蚀
imerode(I,strel)
I为待处理图像,strel为结构元

%膨胀
imdilate(I,strel)
I为待处理图像,strel为结构元

%开运算——先腐蚀后膨胀
imdilate(imerode(I,strel),strel)

%闭运算——先膨胀后腐蚀
imdilate(imerode(I,strel),strel)

二、点运算实现

% 1、图片读取与显示
circbw=imread('circbw.tif');
subplot(2,4,1),imshow(circbw),title('原图像');
% 2、图片的腐蚀
template=strel('arbitrary',eye(5));
circbw_imerode=imerode(circbw,template);
subplot(2,4,5),imshow(circbw_imerode),title('腐蚀后');
% 3、图片的膨胀
template=strel('arbitrary',eye(5));
circbw_imdilate=imdilate(circbw,template);
subplot(2,4,6),imshow(circbw_imdilate),title('膨胀后');
% 4、图片的开运算——先腐蚀后膨胀
template=strel('arbitrary',eye(5));
circbw_imdilate=imdilate(imerode(circbw,template),template);
subplot(2,4,7),imshow(circbw_imdilate),title('开运算后');
% 5、图片的闭运算——先膨胀后腐蚀
template=strel('arbitrary',eye(5));
circbw_imerode=imerode(imdilate(circbw,template),template);
subplot(2,4,8),imshow(circbw_imerode),title('闭运算后');

在这里插入图片描述

三、matlab局部运算函数介绍

%选取指定滤波器
H = fspecial(TYPE) 
TYPE为滤波的类型,可取
'average' 'disk' 'gaussian' 'laplacian' 'log' 'motion' 'prewitt' 'sobel'

%使用指定滤波器进行卷积
Y = filter2(B,X) 
Y = filter2(B,X,SHAPE) 
B为滤波器,X为待处理图像
SHAPE为输出图像大小,可取'same' 'valid' 'full' 

%均值滤波
filter2(fspecial('average',3),lena_noise)/255;

%高斯滤波
filter2(fspecial('gaussian',3),lena_noise)/255;

%中值滤波
B = medfilt2(A,[M N]) 
B = medfilt2(A) 
[M,N]为指定滤波大小

四、局部运算实现

(图像平滑滤波器)

% 1、图片读取与显示
lena=imread('lena.png');
subplot(2,3,1),imshow(lena),title('原图像');
% 2、均值滤波
average_lena=filter2(fspecial('average',3),lena)/255;
subplot(2,3,4),imshow(average_lena),title('均值滤波');
% 3、高斯滤波
gaussian_lena=filter2(fspecial('gaussian',3),lena)/255;
subplot(2,3,5),imshow(gaussian_lena),title('高斯滤波');
% 4、中值滤波
median_lena=medfilt2(lena);
subplot(2,3,6),imshow(median_lena),title('中值滤波');

(图像锐化滤波器)

% 1、图片读取与显示
lena=imread('lena.png');
subplot(1,2,1),imshow(lena),title('原图像');
% 2、图片锐化
template=[-1/9,-1/9,-1/9;-1/9,17/9,-1/9;-1/9,-1/9,-1/9;];
result=filter2(template,lena)/255;
subplot(1,2,2),imshow(result),title('图片锐化后');

在这里插入图片描述

四、综合实验——中值与均值的去噪能力

一、matlab噪声处理函数介绍

%高斯噪声
J = imnoise(I,'gaussian') 
J = imnoise(I,'gaussian',M,V) 
M为均值默认0,V为方差默认0.01

%泊松噪声
J = imnoise(I,'poisson')

%椒盐噪声
J = imnoise(I,'salt & pepper')
J = imnoise(I,'salt & pepper',D) 
D为噪声强度默认0.05,即噪声像素之和

二、高斯噪声下三种滤波器的去噪效果

  1. 代码
% 1、图片读取与显示
lena=imread('lena.png');
subplot(2,3,1),imshow(lena),title('原图像');
lena_noise=imnoise(lena,'gaussian');
subplot(2,3,2),imshow(lena_noise),title('加高斯噪声后');
% 2、均值滤波
average_lena=filter2(fspecial('average',3),lena_noise)/255;
subplot(2,3,4),imshow(average_lena),title('均值滤波');
% 3、高斯滤波
gaussian_lena=filter2(fspecial('gaussian',3),lena_noise)/255;
subplot(2,3,5),imshow(gaussian_lena),title('高斯滤波');
% 4、中值滤波
median_lena=medfilt2(lena_noise);
subplot(2,3,6),imshow(median_lena),title('中值滤波');
  1. 结果
    在这里插入图片描述
  2. 结论
    去噪效果:均值滤波>中值滤波>高斯滤波

三、椒盐噪声下三种滤波器的去噪效果

  1. 代码
% 1、图片读取与显示
lena=imread('lena.png');
subplot(2,3,1),imshow(lena),title('原图像');
lena_noise=imnoise(lena,'salt & pepper');
subplot(2,3,2),imshow(lena_noise),title('加椒盐噪声后');
% 2、均值滤波
average_lena=filter2(fspecial('average',3),lena_noise)/255;
subplot(2,3,4),imshow(average_lena),title('均值滤波');
% 3、高斯滤波
gaussian_lena=filter2(fspecial('gaussian',3),lena_noise)/255;
subplot(2,3,5),imshow(gaussian_lena),title('高斯滤波');
% 4、中值滤波
median_lena=medfilt2(lena_noise);
subplot(2,3,6),imshow(median_lena),title('中值滤波');
  1. 结果
    在这里插入图片描述

  2. 结论
    去噪效果:中值滤波>均值滤波>高斯滤波

五、实验讨论与总结

  1. 为什么均值滤波器处理高斯噪声优于中值滤波器?
    因为高斯噪声出现是一定的,幅值大小均值为0,通过均值滤波可以很好的抵消,但是中值滤波器选取的中值是噪声,无法选取未被污染的像素进行取代。
  2. 为什么中值滤波器处理椒盐噪声优于均值滤波器?
    因为椒盐噪声幅值大小是固定的,而出现是随机的,通过中值滤波器可以找到干净点去取代污染点,而因为其均值不为0,所以均值滤波器无法很好得去除。
  3. 为什么在两种噪声下高斯滤波表现得不好?
    因为高斯滤波器的出发点是中间值权重大,而周围点权重逐渐减小,如果像素中心点是噪点,那么它的权重被放大了,反而无法很好地去除噪声。
  4. 点运算与局部运算适用场景?
点运算备注
腐蚀原图像目标变小,消除小而无意义的像素
膨胀原图像目标变大,填补目标的空洞
开运算去除比结构元小的像素
闭运算填补比结构元小的像素
局部运算备注
均值滤波器能较好去除高斯噪声
高斯滤波器去噪能力一般
中值滤波器能很好去除椒盐噪声
锐化滤波器用于增强图像细节
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值