数字图像处理第二次试验:图像增强

  • 前言
  • 一、实验目的
  • 二、实验主要仪器设备
  • 三、实验原理
  • 四、实验内容
  • 五、实验步骤
  • 六、实验程序
  • 七、实验报告要求
  • 八、预习要求
  • 九、思考题


前言

为了帮助同学们完成痛苦的实验课程设计,本作者将其作出的实验结果及代码贴至CSDN中,供同学们学习参考。如有不足或描述不完善之处,敬请各位指出,欢迎各位的斧正!

一、实验目的

(1)熟悉并学会使用MATLAB中图像增强的相关函数及Photoshop操作。
(2)掌握图像灰度修正、平滑去噪、锐化加强边缘和轮廓的方法,并编程实现。

二、实验主要仪器设备

(1)台式计算机或笔记本电脑
(2)MATLAB软件(含图像处理工具箱)、Photoshop
(3)典型的灰度、彩色图像文件

三、实验原理

数码相机的曝光量指达到数码相机(DC)感光器件上的光线总量,用曝光值(EV)表示。图像过度曝光或曝光不足时,可用曝光补偿调节曝光量,这种功能将修正自动曝光设置值为上升或下降几级。例如,某些DC的EV调整范围为+30-3。尝试对同一景象进行正确曝光、过度曝光和曝光不足三种情况成像情况。
(1)将一幅图像视为一个二维矩阵,用MATLAB进行图像增强。
(2)利用MATLAB图像处理工具箱中的函数imread(读)、imshow(显示)、imnoise(加噪)、filter2(滤波)对图像进行去噪处理。
(3)图像灰度修正:灰度变换。对不满意的图像通过线性或非线性灰度映射关系进行变换,其效果可以得到明显提高。通过分析,会发现变换前后图像的直方图也发生响应的变化。
(4)图像平滑方法:邻域平均、中值滤波。分析图像降质的性质,区分平稳型还是非平稳型、加性还是乘性等,采用合适的去噪方法,可以去除或降低噪声对图像的影响。从频率域看,平均操作在降低噪声的同时衰减了图像的高频分量,会影响图像细节的重现。中值滤波对某些信号具有不变性,适用于消除图像中的突发干扰,但如果图像含有丰富的细节,则不宜使用。
(5)图像锐化方法:人眼对目标的边缘和轮廓较为敏感,对图像进行锐化,有助于突出图像的这些特征。从频率域看,锐化提升了图像的高频分量。

四、实验内容

(1)MATLAB图像增强:①图像灰度修整;②图像平滑方法;③图像锐化方法

五、实验步骤

(1)MATLAB图像增强。
① 图像灰度修正。测试图像为pout.tif、tire.tif。读入一幅灰度级分布不协调的图像,分析其直方图。根据直方图,设计灰度变换表达式,或调用imadjust函数。调整变换表达式的参数,直到显示图像的灰度级分布较为均衡为止。
② 不均匀光照的校正。测试图像为pout.tif。采用分块处理函数blkproc和图像相减函数imsubtract校正图6.6存在的不均匀光照现象。
③ 三段线性变换增强。测试图像为couple.tif。选择合适的转折点,编程对图6.10进行三段线性变换增强。
④ 图像平滑方法。测试图像为eight.tif。对有噪图像或人为加入噪声的图像进行平滑处理。根据噪声的类型,选择不同的去噪方法,如邻域平均、中值滤波等方法,调用filter2,medfilt2函数,选择不同的滤波模板和参数,观测和分析各种去噪方法对不同噪声图像处理的去噪或降噪效果。
⑤ 图像锐化方法。测试图像为rice.tif、cameraman.tif。读入一幅边缘模糊的图像,利用罗伯茨梯度对图像进行四种锐化处理,比较各自的结果。

六、实验程序

① 图像灰度修正。测试图像为pout.tif、tire.tif。读入一幅灰度级分布不协调的图像,分析其直方图。根据直方图,设计灰度变换表达式,或调用imadjust函数。调整变换表达式的参数,直到显示图像的灰度级分布较为均衡为止。

clear
clc
I = imread('pout.tif'); 
subplot(2,2,1);
imshow(I); 
subplot(2,2,2);
imhist(I);
J = imadjust(I,[0.3 0.7],[]);
subplot(2,2,3); 
imshow(J);
subplot(2,2,4); 
imhist(J)

运行截图如下:

实验医学图像增强 图像增强的实验原理_图像处理


实验医学图像增强 图像增强的实验原理_实验医学图像增强_02

② 不均匀光照的校正。测试图像为pout.tif。采用分块处理函数blkproc和图像相减函数imsubtract校正图6.6存在的不均匀光照现象。

clear
clc
I=imread('rice.png');
subplot(2,2,1);
imshow(I);
title('原始图像');
J = imnoise(I,'salt & pepper', 0.1);
subplot(2,2,2);
imshow(J);
title('加噪图像');
global thr;
thr=2;
J=double(J);
blocks=blkproc(J,[128 128],@estibackground);
background=imresize(blocks,[256 256],'bilinear');
subplot(2,2,3);
imshow(background,[]);
title('提取背景');
I2=imsubtract(J,background);
Iout=medfilt2(I2,[3 3]);
subplot(2,2,4);
imshow(Iout,[]);
title('校正图像');

运行截图如下:

实验医学图像增强 图像增强的实验原理_图像处理_03

③ 三段线性变换增强。测试图像为couple.tif。选择合适的转折点,编程对图6.10进行三段线性变换增强。

clear
clc
f = imread('rice.png'); 
[M,N]=size(f);
g=zeros(M,N);
f=double(f); 
g=double(g); 
k1=min(min(f)); 
k2=max(max(f));
a=k1+50; 
b=k2-50; 
c=k1-30; 
d=k2+20; 
for i=1:M 
    for j=1:N  
        if((f(i,j)>=a)&&((f(i,j))<b)) 
            g(i,j)=((d-c)/(b-a))*(f(i,j)-a)+c; 
        end
        if(f(i,j)<a) 
            g(i,j)=c;
        end
        if(f(i,j)>=b) 
            g(i,j)=d;
        end
    end
end
figure;  
subplot(1,2,1);
imshow(f,[]);
subplot(1,2,2);
imshow(g,[]);

运行截图如下:

实验医学图像增强 图像增强的实验原理_图像处理_04

④ 图像平滑方法。测试图像为eight.tif。对有噪图像或人为加入噪声的图像进行平滑处理。根据噪声的类型,选择不同的去噪方法,如邻域平均、中值滤波等方法,调用filter2,medfilt2函数,选择不同的滤波模板和参数,观测和分析各种去噪方法对不同噪声图像处理的去噪或降噪效果。

clear
clc
I = imread('eight.tif');
subplot(2,3,1); 
imshow(I); 
title('原始图像');
J=imnoise(I,'gaussian',0.01);
subplot(2,3,2); 
imshow(J); 
title('高斯白噪声'); 
h0=1/9.*[1 1 1 1 1 1 1 1 1];
h1=[0.1 0.1 0.1;0.1 0.2 0.1;0.1 0.1 0.1];
h2=1/16.*[1 2 1;2 4 2;1 2 1]; 
h3=1/8.*[1 1 1;1 0 1;1 1 1]; 
g0=filter2(h0,J);
g1=filter2(h1,J);
g2=filter2(h2,J); 
g3=filter2(h3,J); 
subplot(2,3,3); 
imshow(g0,[]); 
subplot(2,3,4); 
imshow(g1,[]); 
subplot(2,3,5); 
imshow(g2,[]); 
subplot(2,3,6); 
imshow(g3,[]);

运行结果如图:

实验医学图像增强 图像增强的实验原理_实验医学图像增强_05

⑤  图像锐化方法。测试图像为rice.tif、cameraman.tif。读入一幅边缘模糊的图像,利用罗伯茨梯度对图像进行四种锐化处理,比较各自的结果。

clear
clc
I=imread('rice.png'); 
subplot(2,3,1); 
imshow(I);  
title('原始图像');
B1=edge(I,'roberts',0.1); 
subplot(2,3,2); 
imshow(B1); 
title('0.1');  
B2=edge(I,'roberts',0.05); 
subplot(2,3,3); 
imshow(B2); 
title('0.05'); 
B3=edge(I,'roberts',0.07);
subplot(2,3,4); 
imshow(B3);
title('0.07'); 
B4=edge(I,'roberts',0.01);
subplot(2,3,5); 
imshow(B4);
title('0.01');

运行结果如图:

实验医学图像增强 图像增强的实验原理_灰度_06


实验医学图像增强 图像增强的实验原理_实验医学图像增强_07


补充:estibackground.m如下(感谢 @jiaotshidi 的指正):

function backgray=estibackground(x)
global thr;
meanx=mean(x(:));
stdx=std(x(:));
minx=min(x(:));
backgray=max(meanx-thr*stdx,minx);
end

七、实验报告要求

(1)说明利用MATLAB图像处理工具箱实现图像灰度修正、图像平滑、图像锐化的方法。
(2)列出上述图像处理的程序
(3)记录灰度修正、图像平滑、图像锐化的图像
(4)回答思考题
(5)撰写心得和体会

八、预习要求

(1)了解MATLAB图像处理工具箱关于图像增强的有关功能。
(2)列出上述图像处理的流程

九、思考题

(1)如何针对图像过暗、过亮、对比度不足设计灰度变换函数?
灰度g与灰度f之间的关系为:g=a’+(b’-a’)(b-a)*(f-a),可见,如果b’-a’>b-a,则线性变换使得图像灰度范围增大,即对比度增大,图像会变得清晰;如果b’-a’<b-a,则使得图像灰度范围缩小,即对比度减小。在曝光不足或过度的情况下,图像灰度可能会局限在一个很小的范围内,这时在显示器上看到的将是一个模糊不清、没有灰度层次的图像。采用线性变换对图像的每一个像素灰度做线性拉伸,将有效地改进图像的视觉效果。以曝光不足为例,选取b’-a’>b-a,则使曝光不充分的图像中黑的更黑,拜的更白,从而有效的提高图像灰度的对比度。
(2)比较同一种去噪方法对不同噪声处理的效果。
对于高斯噪声,依然是中值滤波的峰值信噪比最低,总体变分的均方误差最小,情况一致。因此,对于高斯噪声,中值滤波的降噪效果不太理想,而总体变分模型则取得比较好。看出均值滤波的峰值信噪比最低,小波TV的峰值信噪比比较接近而总体变分的均方误差仍为最小,对于高斯噪声,线性均值滤波和TV去噪能够取得较好的去噪效果但对于根盐噪声,中值滤小波、总体变分(TV)的去噪平滑效果比较好其中,总体变分模型对两种噪声都取得了比较好的去噪效果,它是现在图像平滑去噪和复原最流行的方法但依然会丢失部分边界纹理信息。
(3)讨论用梯度法锐化图像的四种不同方法的应用范围。
Robert 算子一般会在图像边缘附近的区域内产生较宽的响应,用此算子能够很准确的定位边缘,可是她对噪声的敏感程度也相对较强。因此如果要用次算法进行锐化处理时,特别要考虑到噪声的影响。
Sobel 锐化算法也是图像微分锐化算法之一。一幅图像进行Sobel算子锐化后,图像的灰度变化的幅度会有所增加。