直方图图像增强实验报告.docx
《直方图图像增强实验报告.docx》由会员分享,可在线阅读,更多相关《直方图图像增强实验报告.docx(24页珍藏版)》请在冰豆网上搜索。
直方图图像增强实验报告
数字图像处理作业
——直方图图像增强
【摘要】
在自然界中很多图像可能都不符合人的视觉特点,因此有必要根据图像的特点采用一定的方法增强图像的视觉感知效果。
本次作业通过直方图来增强图像,主要是对直方图进行修正来达到视觉转换。
具体方法为直方图均衡、直方图匹配以及图像分割技术。
其中,直方图均衡是调整图像的对比度使其增强;直方图匹配是将所要处理图像的直方图与已知直方图进行类似匹配的方法;而图像分割是将一副图像的前景与背景区别开来的技术。
1.把附件图像的直方图画出:
【注】:
由于源图像中的附图均是以索引图的形式给出,因此在画直方图之前需要将其转换成灰度图。
如果调色板缺失,需要先将调色板中缺失的色彩信息补全之后,再用matlab工具箱提供的图像类型转换函数(G=ind2gray(A,map)%将索引图转换成灰度图)进行类型转换。
利用MATLAB工具箱,我们可以直接通过函数imhist()来画出图像的直方图。
处理结果如下:
2.把所有图像进行直方图均衡;输出均衡后的图像和源图像进行比对;分析改善内容;
【分析】:
直方图均衡化是图像处理领域中利用图像直方图对对比度进行调整的方法。
该方法通过灰度变换将一幅图像转换为另一幅具有均衡直方图,即在每个灰度级上都具有相同的象素点数的过程。
直方图均衡化则通过使用累积函数对灰度值进行“调整”以实现对比度的增强。
处理结果如下:
可见,处理后图像的对比度有一定程度的增强,但同时直方图均衡也存在着以下缺点:
1)变换后图像的灰度级减少,某些细节消失;
2)某些图像,如直方图有高峰,经处理后对比度不自然的过分增强。
3.进一步把图像按照对源图像直方图的观察,各自指定不同源图像的直方图,进行直方图匹配,进行图像增强;
分析:
直方图匹配:
是指使一幅图像的直方图变成规定形状的直方图而进行的图像增强方法。
将图像直方图以标准图像的直方图为标准作变换,使两图像的直方图相同和近似,从而使两幅图像具有类似的色调和反差。
均衡后的图像,灰度值减少,图像对比度明显增强,但是导致很多地方的细节模糊,看不清楚;而且有些地方过分增强,严重干扰清晰度。
利用Matlab工具箱实现图像直方图匹配,就用imhist()函数和histeq()函数。
处理结果:
4.利用直方图对图像elain和woman进行分割;
【分析】:
利用直方图对图像进行分割,我们可以采用阈值分割法。
阈值分割的实质是利用图像的灰度直方图信息获得用于分割的阈值。
它是用一个或几个阈值将图像的灰度级分为几个部分,认为属于同一部分的像素是同一个物体。
该方法特别适用于目标和背景占据不同灰度级范围的图像。
其灰度级直方图呈明显的双峰值。
然后在峰谷处的灰度值就可以作为阈值来对图像进行分割。
直方图统计的是灰度值出现的频数,那些在第一个峰值附近的灰度值和第一个峰值接近,在第二个峰值附近的灰度值和第二个峰值接近,所以以2个峰值的中间的峰谷对应的灰度值为阈值。
大于阈值的点归为一类,小于阈值的点归为一类,这样就把图像分割成2类。
以上是比较理想的情况,比如本实验中elain.bmp的直方图,就可以看成是双峰型。
因此,对于这幅图像,可以根据观察直方图来确定阈值。
但实际中很难找到这样的图像。
一幅通常有多个物体和背景所组成,假如,其灰度级直方图能呈现出多个明显的峰值,则仍可以选峰值间峰谷处的灰度值作为阈值,此时有多个阈值将图像进行分割,这样就是多峰值阈值选择。
比如有3个峰值,可以去两个峰谷处的灰度值T1,T2作为阈值。
同样,可以将阈值化后的图像变成二值图像。
阈值分割的主要方法有:
迭代法、最大类间方差法、动态阈值法、最大熵法等。
本次实验中,采用了阈值迭代法。
迭代的方法产生阈值,可以通过程序自动计算出比较合适的分割阈值。
其计算方法是这样的:
1.选择阈值T,通常可以选择图像的平均灰度值来作为初始值;
2.通过初始阈值T,把图像的平均灰度值分成两组R1和R2;
3.计算两组平均灰度值μ1和μ2;
4.重新选择阈值T,新的T的定义为:
T=(μ1+μ2)/2;循环做第二步到第四步,一直到两组的平均灰度值μ1和μ2不再发生改变,那么我们就获得了所需要的阈值。
算法描述:
1.取得原图得数据区指针以及图像的高和宽;
2.进行直方图统计;
3.设定初始阈值T=127;
4.分别计算图像中小于T和大于T的两组平均灰度值;
5.迭代计算阈值,直至两个阈值相等;
6.根据计算出的阈值,对图像进行二值化处理。
【处理结果】:
对于elain.bmp,观察其直方图,并经过试探,发现当阈值为115时,分割效果较为理想。
对于woman.bmp,采用迭代法进行取阈值。
处理结果如下图:
将分割结果与基于直接观察直方图法取阈值的结果进行对比,可知,迭代算法的效果更好一些。
【附录】
1、源代码:
第一题
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%画源图像的直方图
以citywall.bmp为例:
I=imread('E:
\大三下\图像处理英文课件\作业\第三次\源图像\citywall.bmp','bmp');
Figure;
subplot(2,2,1);
imhist(I);
title('citywall.bmp的原直方图');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%画处理后图像的直方图
以citywall1.bmp及citywall.bmp为例:
filename='E:
\大三下\图像处理英文课件\作业\第三次\源图像\citywall1.bmp';
fmt='bmp';
[A,map]=imread(filename,fmt);
fori=168:
1:
256
j=1;
map(i,j)=0;
j=2;
map(i,j)=0;
j=3;
map(i,j)=0;
end
G=ind2gray(A,map);
subplot(2,2,2);
imhist(G);
title('citywall1.bmp的直方图');
[A,map]=imread(''E:
\大三下\图像处理英文课件\作业\第三次\源图像\citywall2.bmp','bmp');
G=ind2gray(A,map);
subplot(2,2,3);
imhist(G);
title('citywall2.bmp的原直方图');
第二题
%%%%%%%%%%%%%%%%%%%%%%%%%%%%对源图像进行均衡处理
以citywall.bmp为例:
I=imread('E:
\大三下\图像处理英文课件\作业\第三次\源图像\citywall.bmp','bmp');
J=histeq(I);
imhist(J);
title('经过直方图均衡化的citywall.bmp的直方图');
imshow(J)
title('经过直方图均衡化的citywall.bmp');
I=imread('E:
\大三下\图像处理英文课件\作业\第三次\源图像\citywall.bmp','bmp');
J=histeq(I);
figure;
subplot(3,2,1);
imshow(J)
title('均衡化的citywall.bmp及其直方图');
subplot(3,2,2);
imhist(J);
%%%%%%%%%%%%%%%%%%%%%%%%对处理后的图像进行均衡处理
以citywall1.bmp为例:
filename='E:
\大三下\图像处理英文课件\作业\第三次\源图像\citywall1.bmp';
fmt='bmp';
[A,map]=imread(filename,fmt);
fori=168:
1:
256
j=1;
map(i,j)=0;
j=2;
map(i,j)=0;
j=3;
map(i,j)=0;
end
G=ind2gray(A,map);
J=histeq(G);
subplot(3,2,3);
imshow(J)
title('均衡化的citywall1.bmp及其直方图');
subplot(3,2,4)
imhist(J);
filename='E:
\大三下\图像处理英文课件\作业\第三次\源图像\citywall2.bmp';
fmt='bmp';
[A,map]=imread(filename,fmt);
G=ind2gray(A,map);
J=histeq(G);
subplot(3,2,5);
imshow(J)
title('均衡化的citywall2.bmp及其直方图');
subplot(3,2,6)
imhist(J);
第三题
%%%%%%%%%以源图像为citywall.bmp并经过直方图匹配的citywall1.bmp为例
I=imread('E:
\大三下\图像处理英文课件\作业\第三次\源图像\citywall.bmp','bmp');
I=I(:
);
hgram=imhist(I);
filename='E:
\大三下\图像处理英文课件\作业\第三次\源图像\citywall1.bmp';
fmt='bmp';
[A,map]=imread(filename,fmt);
fori=168:
1:
256
j=1;
map(i,j)=0;
j=2;
map(i,j)=0;
j=3;
map(i,j)=0;
end
G=ind2gray(A,map);
B=histeq(G,hgram);
figure;
subplot(1,2,1);
imshow(B);
title('经过直方图匹配的citywall1.bmp(源图像为citywall.bmp)');
subplot(1,2,2);
imhist(B);
title('经过匹配的citywall1.bmp的直方图');
第四题
对elain.bmp进行分割:
I=imread('E:
\大三下\图像处理英文课件\作业\第三次\源图像\elain.bmp','bmp');
imhist(I);
title('elain.bmp的直方图')
figure;
imshow(I);
t1=115;%从直方图的峰谷处得阈值;
[mn]=size(I);
I1=zeros(m,n);
fori=1:
m
forj=1:
n
ifI(i,j)>t1
I1(i,j)=1;
else
I1(i,j)=0;
end
end
end
figure
imshow(I1)
title('图像分割后的elain.bmp(阈值为115)')
对woman.bmp进行分割:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%迭代算法
I=imread('E:
\大三下\图像处理英文课件\作业\第三次\源图像\woman.bmp','bmp');
figure;
imhist(I);
title('elain.bmp的直方图')
figure;
imshow(I);
T=127;%设定初始阈值T=127;
sum1=0;sum2=0;
count1=1;count2=1;
[mn]=size(I);
I=double(I);
J=zeros(m,n);
T1=0;T2=255;
while(T1-T2>0)
fori=1:
m
forj=1:
n
ifI(i,j)>T
sum1=sum1+I(i,j);
count1=count1+1;
else
sum2=sum2+I(i,j);
count2=count2+1;
end
end
end
T1=sum1/count1;
T2=sum2/count2;
T=(T1+T2)/2;
end
fori=1:
m
forj=1:
n
ifI(i,j)>T
J(i,j)=1;
else
J(i,j)=0;
end
end
end
figure
imshow(J)
title('基于迭代阈值的图像分割之后的woman.bmp');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%观察直方图法
I=imread('E:
\大三下\图像处理英文课件\作业\第三次\源图像\woman.bmp','bmp');
imhist(I);
title('woman.bmp的直方图')
figure;
imshow(I);
t1=90;%从直方图的峰谷处得阈值;
[mn]=size(I);
I1=zeros(m,n);
fori=1:
m
forj=1:
n
ifI(i,j)>t1
I1(i,j)=1;
else
I1(i,j)=0;
end
end
end
figure
imshow(I1)
title('图像分割后的woman.bmp(阈值为90)')
2、参考文献:
[1].杨杰、李庆著.数字图像处理及MATLAB实现——学习与实验指导.北京:
电子工业出版社,2010
[2].冈萨雷斯著.数字图像处理(第三版).北京:
电子工业出版社,2010