课程名称___图像处理与分析题目名称_直方图均衡化与规定化学院信息工程专业电子信息工程年级班别 0503 学号 ********** 学生姓名姚艺锋指导老师曹江中2008年6月16日《图像处理与分析》课程设计报告直方图均衡化与规定化1、设计方案(原理)一般情况下,如果图像的灰度分别集中在比较窄的区间,从而引起图像细节的模糊,为了使图像细节清晰,并使目标得到突出,达到图像增强的目的,可通过改善各部分亮度的比例关系,即通过直方图的方法来实现.直方图的方法是以概率论为基础的.常用的方法有直方图均衡化和直方图规定化.(1) 直方图均衡化直方图均衡化又称直方图平坦化,是将一已知灰度概率密度分布的图像经过某种变换,变成一幅具有均匀灰度概率密度分布的新图像.其结果是扩展了像元取值的动态范围,从而达到增强图像整体对比度的效果.直方图均衡化的具体实现步骤如下:1).列出原始图像的灰度级1,,1,0,-=L j fj2).统计各灰度级的像素数目1,,1,0,-=L j n j3).计算原始图像直方图各灰度级的频数1,,1,0,/)(-==L j n nfP jjf4).计算累积分布函数1,,,1,0,)()(0-==∑=L k j f P f C k j j f5).应用以下公式计算映射后的输出图像的灰度级,P 为输出图像灰度级的个数,其中INT 为取整符号1,,1]5.0)()[(min min max -=++-=P i g f C g g INT g i6).统计映射后各灰度级的像素数目 ni, i=0,1,…,k,…P-1.7). 计算输出直方图Pg(gi)=ni/n, i=0,1,…,P-1.8). 用fj 和gi 的映射关系修改原始图像的灰度级,从而获得直方图近似为均匀分布的输出图像(2) 直方图规定化直方图均衡化的优点是能自动增强整个图像的对比度,但它的具体增强效果不易控制,处理的结果总是得到全局的均衡化的直方图.实际工作中,有时需要变换直方图使之成为某个特定的形状,从而有选择地增强某个灰度值范围内的对比度,这时可采用比较灵活的直方图规定化方法.直方图规定化增强处理的步骤如下:令P r (r )和P z (z )分别为原始图像和期望图像的灰度概率密度函数。
如果对原始图像和期望图像均作直方图均衡化处理,应有⎰==xr drr P r T S 0)()( (1) ⎰==xz dzz p Z G V 0)()( (2))(1V G Z -= (3)由于都是进行均衡化处理,处理后的原图像概率密度函数Ps (S )及理想图像概率密度函数PV (V )是相等的。
于是,我们可以用变换后的原始图像灰度级S 代替(2)式中的V 。
即Z = G - 1(S ) (4) 这时的灰度级Z 便是所希望的图像的灰度级。
此外,利用(1)与(3)式还可得到组合变换函数 Z = G - 1[T (r )] (5) 对连续图像,重要的是给出逆变换解析式。
对离散图像而言,有n n Z P ii Z =)( (6)∑-===1)()(l i i z i i Z P Z G V (7) )]([)(11i i i r T G S G Z --== (8)2、设计内容(主要代码)%----------------------------选择图片路径及显示---------------------------% global f%选择图片路径[filename,pathname]= ... %...表示与下行连接uigetfile({'*.bmp';'*.jpg';'*gif';'*tif'},'选择图片'); %打开文件类型,对话框名称 f=imread([pathname filename]);axes(handles.axes1); %在axes1显示原图像imshow(f) ;title('原始图像');%------------------设置下拉菜单分别选择显示图像------------% global fva=get(handles.popupmenu1,'Value');val=get(hObject,'Value');switch val %用switch语句设置选项case 1 %原图像直方图I=double(f);[m,n]=size(I);H=zeros(1,256);for i=1:mfor j=1:nH(I(i,j)+1)=H(I(i,j)+1)+1;endends=zeros(1,256);t=zeros(1,256);for i=1:256 s(i)=H(i)/(m*n);for j=1:it(i)=t(i)+s(j);endendaxes(handles.axes2);plot(s);title('原图像直方图');case 2 %均衡化后图像及直方图I=double(f);[m,n]=size(I);H=zeros(1,256);for i=1:mfor j=1:nH(I(i,j)+1)=H(I(i,j)+1)+1;endends=zeros(1,256);t=zeros(1,256);for i=1:256 s(i)=H(i)/(m*n);for j=1:it(i)=t(i)+s(j);endendt1=round(t*(256-1)+0.5);H1=zeros(1,256);for i=1:256H1(t1(i))=H1(t1(i))+s(i);endaxes(handles.axes4);bar(H1);title('均衡化后直方图');I2=t1(I+1)-1;axes(handles.axes3);imshow(uint8(I2));title('均衡化后图像');case 3 %规定化后图像及直方图I=f;J=I;New=I;L=256; %灰度级Ps=zeros(L,1); % 存储原图像直方图概率数据nk=zeros(L,1); % 存储原图像直方图数据nk2=zeros(L,1); % 存储直方图规定化后的图像的直方图Rk=zeros(L,1); % 存储原图像累积直方图数据Ps2=zeros(L,1);Rk2=zeros(L,1);[row,col]=size(I); % 计算图像数据矩阵的行列数n=row*col; %总像素个数for i = 1:rowfor j = 1:colnum = double( I(i,j))+1; %获取像素灰度级nk(num) = nk(num)+1; %统计nkendend%计算直方图概率估计for i=1:LPs(i)=nk(i)/n;%计算累积直方图if i==1Rk(i)=Ps(i);else 1<=256Rk(i)=Rk(i-1)+Ps(i);end%规定化直方图Ps2Temp=[0.05,zeros(1,9),0.05,zeros(1,9),0.05,zeros(1,9),0.05,zeros(1,9),0.05,zeros(1,9),0.05,zeros(1,9),0.05,zeros(1,39),0.05,zeros(1,19),0.05,zeros(1,19),0.05,zeros(1,19),ones(1,80).*0.0045,ones(1,16).*0.0088];Ps2=Ps2Temp';%计算规定化累积直方图for c=1:Lif c==1Rk2(c)=Ps2(c);elseRk2(c)=Rk2(c-1)+Ps2(c);endend%计算原图像与目标图像累计直方图数值的差的绝对值double ScMin=zeros(256,256);for Y=1:Lfor X=1:LScMin(X,Y)=abs(Rk(Y)'-Rk2(X)');endend%建立映射HisM=zeros(L:1);for P=1:Lmin = 0;minV=ScMin(1,P);for Q=1:Lif(minV>ScMin(Q,P))minV=ScMin(Q,P);min = Q;endendHisM(P)= min;end%将原图像的每个像素灰度转换为直方图均衡化后的灰度for x = 1:rowfor y = 1:colNum = double( I(x,y))+1;if Num==iNew(x,y)=HisM(i);endendendend%计算直方图规定化后的直方图for p = 1:rowfor q = 1:colNN = double( New(p,q))+1;nk2(NN) = nk2(NN)+1;endendaxes(handles.axes5);imshow(New),title('规定化后图像');axes(handles.axes6);plot(Ps2),title('规定化后直方图');end;%--------------------直接调用函数-----------------------------------------%global fva=get(handles.popupmenu2,'Value');val=get(hObject,'Value');switch valcase 1axes(handles.axes1); %在axes1显示图像imshow(f);title('原图像');axes(handles.axes2);h=imhist(f,256);plot(h)ylim('auto'); %自动设定Y轴坐标范围和刻度title('原始直方图')case 2j=histeq(f);axes(handles.axes3);imshow(j) ;title('均衡化图像');axes(handles.axes4);h=imhist(j,256);plot(h)ylim('auto');title('均衡化图像直方图')case 3hgram=50:2:250k=histeq(f,hgram);axes(handles.axes5);imshow(k) ;title('规定化图像');axes(handles.axes6);h=imhist(k,256);plot(h)ylim('auto');title('规定化图像直方图')end;3、实验结果GUI界面设计: 选择图片路径:直接调用函数均衡化和规定化:原图像与均衡化和规定化后对比:结果分析:通过直接调用函数和编程对图像进行处理的结果对比,可以看出实验结果和理论结果基本一致;在编程处理中,可以自定义对规定化中的直方图(Ps2Temp)进行修改,从而得到所希望的图像增强效果.4、心得体会通过这次课程设计,我学会如何利用MATLAB制作视图界面(GUI),并通过视图界面对数字图像进行处理,方便快捷,而且美观.在做设计的过程中,虽然遇到了不少问题,例如:程序结果如何通过GUI界面显示,程序的调试出错等,但是经过查资料并进行修改,及同学们的提点下,所有问题都一一得到解决;通过这次课程设计,揭开了数字图像的神秘面纱.5、参考文献(1). R.C Gonzalez,R.E.Woods.<<数字图像处理>>(第二版).北京:电子工业出版社,2007(2). 贺兴华. <<Matlab7.x 图像处理>> 人民邮电出版社,2006(3). 徐飞,施晓红. <<matlab应用图像处理>>.西安:西安电子科技大学出版社,2002。