空间域图像增强(matlab实现)

图像增强的目的:消除噪声,显现那些被模糊了的细节或简单地突出衣服图像中读者感兴趣的特征

 

1.图像增强基础

图像增强概念:根据特定的需要突出一幅图像中的某些信息,同时削弱或除去某些不需要的信息处理方法。其主要目的是使处理后的图像对某种特定的应用来说,比原始图像更适用。处理的结果是使图像更适合于人的观察或机器的识别系统。

空间域图像增强是基于图像中每个小范围(邻域)内的像素进行灰度变换运算,某个点变换之后的灰度由该点邻域之内的那些点的灰度值共同决定,因此空间域增强也称为邻域运算或邻域滤波。

 

2.空间域滤波

滤波:是信号处理中的一个概念,是将信号中特定波段频率滤除的操作,在数字信号处理中通常通过傅里叶变换及其逆变换实现。

边界处理:执行滤波操作要注意的一点是当模板位于图像边缘时,会产生模板的某个元素很可能位于图像之外的情况,这时对于在边缘附近执行滤波操作需要单独处理,以避免引用到不属于图像的无意义的值。

解决边界问题的方法:

(1)收缩处理范围:处理时忽略位于图像f边界附近会引起问题的那些点

(2)使用常数填充图像:根据模板形状为图像f虚拟出边界,虚拟边界像素值为指定的常数,如0,得到虚拟图像f1,保证模板在移动过程中始终不会超过f1边界。

(3)使用复制像素的方法填充图像:和(2)基本相同,只是用来填充虚拟边界像素值的不是固定的常数,而是复制图像f本身边界的模式。

滤波函数imfilter()原型如下

g=imfilter(f,w,option1,option2,...)

f是要进行滤波操作的图像

w时滤波操作所使用的模板,为一个二维数组

option1,option2,..是可选项,具体可以包括以下内容:边界选项、尺寸选项、模式选项

matlab实现

f=imread('pout.tif');%读入图像
imshow(f);
w=[1 1 1;1 1 1;1 1 1]/9 %滤波模板

g=imfilter(f,w,'corr','replicate');%滤波
figure,imshow(g);

空间域图像增强(matlab实现)

二维滤波器fsspecial()原型如下:

h=fspecial(type,parameters)

type:指定了滤波器的类型

可选输入parameters:是和所选定的滤波器类型type相关的配置参数,如尺寸和标准差等,如果不提供则函数使用该类型的默认参数配置

返回时h:为特定的滤波器

 

3图像平滑

定义:图像平滑是一种可以减少和抑制图像噪声的使用数字图像处理技术,在空间域中一般可以采用邻域平均来达到平滑的目的。

matlab实现

I=imread('baby_noise.bmp');
figure,imshow(I)%原图
h=fspecial('average',3);%3x3平均模板
I3=imfilter(I,h,'corr','replicate');%相关滤波,重复填充边界
figure,imshow(I3)
h=fspecial('average',5)%5x5平均模板
I5=imfilter(I,h,'corr','replicate');
figure,imshow(I5)
h=fspecial('average',7);%7x7平均模板
I7=imfilter(I,h,'corr','replicate');
figure,imshow(I7)

空间域图像增强(matlab实现)

空间域图像增强(matlab实现)

空间域图像增强(matlab实现)

空间域图像增强(matlab实现)

高斯平滑定义:平均平滑对于邻域内的像素一视同仁,为了减少平滑处理过程中的模糊,得到更自然的平滑效果,很自然的想到适当加大模板中心点的权重,随着距离中心点的距离增大,权重迅速减小,从而可以确保中心点看起来更接近于与它距离更近的点,基于这样的考虑得到的模板即为高斯模板。

matlab实现

I=imread('baby_noise.bmp');
subplot(2,3,1),imshow(I),title('原图像');
h3_5=fspecial('gaussian',3,0.5);%sigma=0.5的3x3高斯模板
I3_5=imfilter(I,h3_5);
subplot(2,3,2),imshow(I3_5),title('3x0.5');

h3_8=fspecial('gaussian',3,0.8);%sigma=0.8的3x3高斯模板
I3_8=imfilter(I,h3_8);
subplot(2,3,3),imshow(I3_8),title('3x0.8');

h3_18=fspecial('gaussian',3,1.8);%sigma=1.8的3x3高斯模板,接近于平均模板
I3_18=imfilter(I,h3_18);
subplot(2,3,4),imshow(I3_18),title('3x1.8');

h5_8=fspecial('gaussian',5,0.8);%sigma=0.8的3x3高斯模板
I5_8=imfilter(I,h5_8);
subplot(2,3,5),imshow(I3_8),title('5x0.8');
imwrite(I5_8,'baby5_8.bmp');

h7_12=fspecial('gaussian',7,1.2);%sigma=0.8的3x3高斯模板
I7_12=imfilter(I,h7_12);
subplot(2,3,6),imshow(I7_12),title('7x1.2');
imwrite(I7_12,'baby7_12.bmp');

空间域图像增强(matlab实现)

 

4中值滤波

定义:中值滤波本质上是一种统计排序滤波器。中值是指排序队列中位于中间位置的元素的值

性能比较:中值滤波对于某些类型的随机噪声具有非常理想的降噪能力,对于线性平滑滤波而言,在处理的像素邻域之类包含噪声点时,噪声的存在总会或多或少影响该点像素值的计算(对于高斯平滑,影响程度同噪声点到中心点的距离成正比),但在中值滤波中,噪声点则常常是直接被忽略掉的;而且同线性平滑滤波器相比,中值滤波在降噪的同时引起的模糊效应较低。中值滤波的一种典型应用是消除椒盐噪声。

噪声模型:

图片加噪声

J=imnoise(I,type,parameters)

type:噪声类型

中值滤波原型:

I2=medfilt2(I1,[m,n])

I1是原图矩阵

m和n是中值滤波处理的模板大小,默认3x3

输出I2是中值滤波后的图像矩阵

matlab实现

I=imread('lena_AdaptiveMedianFilter.bmp');
subplot(2,3,1),imshow(I),title('原图像');
J=imnoise(I,'salt & pepper'); %为图像叠加椒盐噪声
subplot(2,3,2),imshow(J),title('原图像叠加椒盐噪声');
w=[1 2 1;2 4 2;1 2 1]/9;
J1=imfilter(J,w,'corr','replicate');%高斯平滑
subplot(2,3,3),imshow(J1),title('高斯平滑');
w=[1 1 1;1 1 1;1 1 1]/9;
J2=imfilter(J,w,'corr','replicate');%平均平滑
subplot(2,3,4),imshow(J2),title('平均平滑');
J3=medfilt2(J,[3,3]);%中值滤波
subplot(2,3,5),imshow(J3),title('中值滤波');

空间域图像增强(matlab实现)

 

5图像锐化

定义:用于增强灰度的跳变部分,这一点与图像平滑对灰度跳变的抑制正好相反。图像锐化的目的是使模糊的图像变得更加清晰起来。

Robert交叉梯度图像锐化  matlab实现

I=imread('bacteria.bmp');
subplot(2,2,1),imshow(I),title('原图像');
I=double(I);%转换为double型,这样可以保存负值,否则unite8型会把负值截掉
w1=[-1 0;0 1];
w2=[0 -1;1 0];
G1=imfilter(I,w1,'corr','replicate');
G2=imfilter(I,w2,'corr','replicate');
G=abs(G1)+abs(G2);%计算Robert梯度
subplot(2,2,2),imshow(G,[]),title('Robert交叉梯度图像');
subplot(2,2,3),imshow(abs(G1),[]),title('w1滤波后取绝对值并重新标定');
subplot(2,2,4),imshow(abs(G2),[]),title('w1滤波后取绝对值并重新标定');

空间域图像增强(matlab实现)

基于二阶微分的图像增强——拉普拉斯算子

拉普拉斯算子对于接近水平和接近竖直方向的边缘都有很好的增强,从而也就避免读者在使用梯度算子时要进行两次滤波的麻烦

I=imread('bacteria.bmp');
subplot(2,2,1),imshow(I),title('原图像');
I=double(I);
w1=[0 -1 0;-1 4 -1;0 -1 0]
L1=imfilter(I,w1,'corr','replicate');
w2=[-1 -1 -1;-1 8 -1;-1 -1 -1]
L2=imfilter(I,w2,'corr','replicate');
subplot(2,2,2),imshow(abs(L1),[]),title('w1模板');
subplot(2,2,3),imshow(abs(L2),[]),title('w2模板');
w3=[1 4 1;4 -20 4;1 4 1]
L3=imfilter(I,w3,'corr','replicate');
subplot(2,2,4),imshow(abs(L3),[]),title('w3模板');

空间域图像增强(matlab实现)

基于一阶和二阶锐化算子的比较

一阶导数通常会产生较宽的边缘;

二阶导数对于跃性边缘中心产生零交叉,而对于屋顶状边缘,二阶导数取极值;

二阶导数对细节有较强的相应,如细线和孤立噪声点。

高提升滤波及其实现

原理:无论基于一阶微分的Robert、sobel模板还是基于二阶微分的拉普拉斯模板,其中各系数和均为零。这说明算子在灰度恒定区域的响应为0,即在锐化处理后的图像中,原图像的平滑区域近乎于黑色,而原图中所有的边缘、细节和灰度跳变点都作为黑色背景中高灰度部分突出显示。在基于锐化的图像增强中常常希望在增强边缘和细节的同时仍然保留原图像中的信息,而不是将平滑区域的信息丢失。因此可以把原图像加上锐化后的图像得到比较理想的结果。

注意:具有正的中心系数和具有负的中心系数的模板之间的差别,对于中心系数为负的模板,要达到上述的增强效果,显然应当让原图像f(i,j)减去锐化算子直接处理后的图像。为正的模板就加。

高斯——拉普拉斯变换

matlab实现

I=imread('baby.bmp');
subplot(2,2,1),imshow(I),title('原图像');
Id=double(I);
h_lap=[-1 -1 -1;-1 8 -1;-1 -1 -1]%拉普拉斯算子
I_lap=imfilter(Id,h_lap,'corr','replicate');
subplot(2,2,2),imshow(uint8(abs(I_lap)),[]),title('Laplacian锐化图像,噪声较明显');%取绝对值,并将255以上的响应截断
h_log=fspecial('log',5,0.5);%大小为5,sigma为0.5的LoG算子
I_log=imfilter(Id,h_log,'corr','replicate');
subplot(2,2,3),imshow(uint8(abs(I_log)),[]),title('经LoG处理后的图像,sigma=0.5');
h_log=fspecial('log',5,2);
I_log=imfilter(Id,h_log,'corr','replicate');
subplot(2,2,4),imshow(uint8(abs(I_log)),[]),title('经LoG处理后的图像,sigma=2');

空间域图像增强(matlab实现)