直方图均衡化与规定化
图像增强——直方图均衡化

图像增强——————直方图均衡化摘要图像增强是指按特定的需要突出一幅图像的某些信息,削弱或消除不需要信息的处理方法。
处理的结果使图像更适合于人的视觉特性或机器的识别系统。
本文主要采用直方图均衡化、中值滤波的方法对图像进行处理,通过对处理结果进行比较,从而加深对图像增强的理解及应用。
一、图像增强在获取图像的过程中,由于多种因素的影响导致图像无法达到令人满意的视觉效果。
对原始图像做一些改善,从而实现人眼观察或者机器自动分析、识别的目的的行为,就叫做图像增强。
图像增强的主要内容⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎧⎪⎪⎪⎩⎪⎪⎪⎨⎧⎪⎪⎩⎪⎪⎨⎧⎪⎩⎪⎨⎧⎪⎪⎪⎪⎩⎪⎪⎪⎪⎨⎧⎩⎨⎧⎪⎪⎩⎪⎪⎨⎧⎩⎨⎧代数运算彩色变换增强彩色平衡假彩色增强常规处理彩色图像增强伪彩色增强彩色增强同态滤波增强低通滤波高通滤波频率域图像锐化图像平滑局部运算局部统计法规定化均衡化直方图修正法灰度变换点运算空间域图像增强二、直方图均衡化1.直方图均衡化是通过累积函数对灰度值进行调整以实现对比度的增强,具体地说就是把给定图像的直方图分布改变成近似均匀分布的直方图。
2.直方图均衡化的过程如下:①计算原图像的灰度直方图;②计算原图像的灰度累积分布函数,进一步求出灰度转换表; ③根据灰度转换表,将原图像各灰度级映射为新的灰度级。
3.直方图均衡化的优点:扩张了像素值的动态范围。
直方图均衡化后,图像的概率密度函数近似服从均匀分布,灰度几乎是均匀的分布在整个范围内,图像明暗分明,对比度很大,图像比较清晰明亮,很好的改善了原始图的视觉效果。
2.1原理及计算过程先讨论连续图像的均衡化问题。
设变量r 和s 代表原图像灰度和经直方图修正后的的图像灰度。
在图像中,像素的灰度级可作归一化处理,这样r,s 的值将限定在下述范围之内:0≤r,s ≤1,r=0代表黑,r=1代表白,可以对[0,1]区间内的任一个值进行如下变换:s=T(r)变换函数T 应满足下列条件:(1)在0≤r ≤1区间内T[r]单值单调增加; (2)对于0≤r ≤1,有0≤s ≤1。
利用直方图均衡化和规定化进行图像增强的算法设计 数字图像处理毕业论文

目录第1章绪论 (1)1.1 数字图像处理的研究背景 (1)1.2 数字图像处理的研究内容 (1)1.3 DSP系统简介 (2)1.4 图像增强简介 (4)第2章DSP系统 (5)2.1 DSP芯片 (5)2.1.1 DSP芯片的特点 (6)2.1.2 图像处理系统中DSP芯片的选择 (7)2.2 基于DSP的图像处理系统 (8)第3章图像增强 (9)3.1 图像增强的基本概念 (9)3.2 图像增强的方法 (9)3.2.1 图像锐化 (10)3.2.1.1 图像锐化原理 (10)3.2.1.2 拉普拉斯算子 (11)3.2.1.3 基于DSP的算法实现 (12)3.2.1.4 图片锐化效果比较 (14)3.2.2 Sobel边缘检测算法 (16)3.2.2.1 Sobel边缘检测算法原理 (16)3.2.2.2 Sobel边缘检测算法的变异及实现 (16)3.2.3 直方图均衡化算法 (20)3.2.3.1 直方图均衡化 (20)3.2.3.2 直方图规定化 (21)3.2.3.3实验结果及分析 (23)第4章直方图均衡化和规定化算法的DSP实现 (25)4.1 算法的DSP实现与优化 (25)4.1.1 算法开发硬件平台选择 (25)4.1.2 算法的实现与优化 (26)4.2 实验及结果分析 (27)结论 (31)致谢 (32)参考文献 (33)第1章绪论1.1 数字图像处理的研究背景数字图像处理又称为计算机图像处理,它最早出现于20世纪50年代,当时的电子计算机已经发展到一定水平,人们开始利用计算机来处理图形和图像信息。
数字图像处理作为一门学科大约形成于20世纪60年代初期。
图像处理的基本目的是改善图像的质量,它以人为对象,以改善人的视觉效果为目的。
图像处理中,输入的是质量低的图像,输出的是改善质量后的图像,常用的图像处理方法有图像增强、复原、编码、压缩等。
图像处理技术在许多应用领域受到广泛重视并取得了重大的开拓性成就,属于这些领域的有航空航天、生物医学工程、工业检测、机器人视觉、公安司法、军事制导、文化艺术等,使图像处理成为一门引人注目、前景远大的新型学科。
直方图均衡化和直方图规定化-实验报告

一、实验目的掌握直方图均衡化和直方图规定化的图像增强方法掌握图像平滑滤波和锐化滤波的模板计算方法二、实验内容:1. 使用IPT中imhist,histeq函数进行直方图的均衡化和规定化,并显示结果2. 编写myhisteq函数实现直方图均衡化,与1中结果进行对比3. 给读取的图像叠加椒盐噪音(imnoise),分别使用均值滤波和中值滤波进行去噪,并对比图像处理的结果(使用IPT函数)4. 自定义3*3模板矩阵F,编写myfilter函数实现模板和图像的卷积运算,设计模板矩阵,实现图像的平滑和锐化。
三、实验代码及结果(1) 直方图的均衡化和规定化clc;clear;I= imread('H:\image\jpg\flower.jpg');I= rgb2gray(I) ; %将图像转换为灰度图像J= histeq( I) ; %对I 进行直方图均衡化figure,subplot( 2,2,1) ,imshow(I) ,title('原始图像') ;subplot (2,2,2), imshow(J), title('直方图均衡化后的图像');subplot( 2,2,3) ,imhist(I, 64), title( '原始的直方图');subplot( 2,2,4) ,imhist(J,64) ,title(' 均衡化后的直方图');clc;clear;I= imread('H:\image\jpg\flower.jpg');I= rgb2gray(I) ; %将图像转换为灰度图像h=0:255;h=1-h/255;J= histeq( I,h) ;figure,subplot( 2,3,1) ,imshow(I) ,title('原图像') ; subplot( 2,3,2) ,imhist(I, 64), title( '原图像的直方图'); subplot (2,3,3), stem(h), title('目标直方图');subplot( 2,3,4) ,imshow(I, 64), title( '规定化后的图像'); subplot( 2,3,5) ,imhist(J,64) ,title(' 规定化后的直方图');二、myhisteq函数实现直方图均衡化I = imread('j:\image\jpg\flower.jpg');I = rgb2gray(I);[height,width] = size(I);figuresubplot(2,2,1)imshow(I)%显示原始图像title('原图像');subplot(2,2,2)imhist(I)%显示原始图像直方图title('原图像直方图');%进行像素灰度统计;s = zeros(1,256);%统计各灰度数目,共256个灰度级for i = 1:heightfor j = 1: widths(I(i,j) + 1) = s(I(i,j) + 1) + 1;%对应灰度值像素点数量增加一endend%计算灰度分布密度p = zeros(1,256);for i = 1:256p(i) = s(i) / (height * width * 1.0);end%计算累计直方图分布c = zeros(1,256);c(1) = p(1);for i = 2:256c(i) = c(i - 1) + p(i);end%累计分布取整,将其数值归一化为1~256c = uint8(255 .* c + 0.5);%对图像进行均衡化for i = 1:heightfor j = 1: widthI(i,j) = c(I(i,j)+1);endendsubplot(2,2,3)imshow(I)%显示均衡化后的图像title('均衡化后图像');subplot(2,2,4)imhist(I)%显显示均衡化后的图像的直方图title('均衡化后图像的直方图');三、使用均值滤波和中值滤波进行去噪I= imread('j:\image\jpg\flower.jpg');I= rgb2gray(I) ; %将图像转换为灰度图像I1 = imnoise(I,'salt & pepper',0.02);%0.02是噪声强度,其值越大噪声越多h=fspecial('average',5);J1=filter2(h,I1,'valid');J2= imfilter(I1,h,'full');figure,subplot(3,3,1),imshow(I1);title('原始椒盐噪声图像图1');subplot(3,3,2),imshow(uint8(J1));title('filter2均值滤波图2');subplot(3,3,3),imshow(J2);title('imfilter均值滤波图3');J3 = medfilt2(I1,[5,5]);subplot(3,3,4),imshow(J3),title('中值滤波效果图4');G1= histeq(I1);subplot(3,3,5),imhist(G1,64),title('原图均衡化后的直方图');G2= histeq(J1);subplot(3,3,6),imhist(uint8(G2),64),title('图2均衡化后直方图'); G3= histeq(J2);subplot(3,3,7),imhist(G3,64),title('图3均衡化后直方图');G4= histeq(J3);subplot(3,3,8),imhist(G4,64),title('图4均衡化后直方图');问题:对于filter2均值滤波均衡化直方图不显示,不知道原因。
直方图均衡化与规定化

直方图均衡化与规定化%----------------------------选择图片路径及显示---------------------------% 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.1 利用直方图均衡化对图像进行增强通过灰度变换将一幅图像转换为另一幅具有均衡直方图的图像,即在一定灰度范围内具有相同的象素点数的图像的过程。
其“中心思想”是把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布。
直方图均衡化就是对图像进行非线性拉伸,重新分配图像像素值,使一定灰度范围内的像素数量大致相同。
直方图均衡化就是把给定图像的直方图分布改变成“均匀”分布直方图分布。
主要缺点:1、变换后图像的灰度级减少,某些细节消失;2、某些图像,如直方图有高峰,经处理后对比度不自然的过分增强。
算法如下:为讨论方便,以r 和s 分别表示归一化了的原图像灰度和经直方图修正后的图像灰度。
即1,0≤≤s r在[0,1]内设有变换S=T(r)且该函数单调递增,1)(0≤≤r T ,于是有反变换)(1s T r -=有概率论知,如果已知随即变量r 的概率密度)(r p r ,而随机变量s 是r 的函数。
则s 的概率密度)(s p s 可以有)(r p r 求出。
[])()()()()(1s T ds d r p ds dr r p dr r p ds d s p r r r r s -∞-===?从上式可以看出通过变换函数)(r T 可以控制图像灰度级的概率密度函数,从而改变图像灰度层次,这就是直方图修正技术的基础。
因为归一化规定 1)(=s p s有1式有 dr r p ds r )(=两边积分得 dr r p r T s rr )()(0?==上式就是所求得的变换函数。
它表明当变换函数)(r T 是原图像直方图累积分布函数时,能达到直方图均衡化的目的。
离散形式可表示为:∑∑=====ki i k i i r k k n n r p r T s 00)()(可见均衡后的各像素的灰度值k s 可直接由原图像的直方图算出。
python用直方图规定化实现图像风格转换

python⽤直⽅图规定化实现图像风格转换以下内容需要直⽅图均衡化、规定化知识均衡化:规定化:直⽅图均衡化应⽤:图像直⽅图均衡化能拉伸灰度图,让像素值均匀分布在0,255之间,使图像看起来不会太亮或太暗,常⽤于图像增强;直⽅图规定化应⽤:举个例⼦,当我们需要对多张图像进⾏拼接时,我们希望这些图⽚的亮度、饱和度保持⼀致,事实上就是让它们的直⽅图分布⼀致,这时就需要直⽅图规定化。
直⽅图规定化与均衡化的思想⼀致,事实上就是找到各个灰度级别的映射关系。
具体实现的过程中⼀般会选⼀个参考图像记为A,找到A的直⽅图与⽬标图像的直⽅图的映射关系,从⽽找到⽬标图像的像素以A为“参考”时的映射关系。
具体实现可参考⽂中链接(看完茅塞顿开)基于python利⽤直⽅图规定化统⼀图像风格参考图像原始图像(第⼀⾏)/处理后的图像(第⼆⾏)源码:import osimport cv2import numpy as npdef get_map(Hist):# 计算概率分布Prsum_Hist = sum(Hist)Pr = Hist/sum_Hist# 计算累计概率SkSk = []temp_sum = 0for n in Pr:temp_sum = temp_sum + nSk.append(temp_sum)Sk = np.array(Sk)# 计算映射关系img_mapimg_map = []for m in range(256):temp_map = int(255*Sk[m] + 0.5)img_map.append(temp_map)img_map = np.array(img_map)return img_mapdef get_off_map(map_): # 计算反向映射,寻找最⼩期望map_2 = list(map_)off_map = []temp_pre = 0 # 如果循环开始就找不到映射时,默认映射为0for n in range(256):try:temp1 = map_2.index(n)temp_pre = temp1except BaseException:temp1 = temp_pre # 找不到映射关系时,近似取向前最近的有效映射值off_map.append(temp1)off_map = np.array(off_map)return off_mapdef get_infer_map(infer_img):infer_Hist_b = cv2.calcHist([infer_img], [0], None, [256], [0,255])infer_Hist_g = cv2.calcHist([infer_img], [1], None, [256], [0,255])infer_Hist_r = cv2.calcHist([infer_img], [2], None, [256], [0,255])infer_b_map = get_map(infer_Hist_b)infer_g_map = get_map(infer_Hist_g)infer_r_map = get_map(infer_Hist_r)infer_b_off_map = get_off_map(infer_b_map)infer_g_off_map = get_off_map(infer_g_map)infer_r_off_map = get_off_map(infer_r_map)return [infer_b_off_map, infer_g_off_map, infer_r_off_map]def get_finalmap(org_map, infer_off_map): # 计算原始图像到最终输出图像的映射关系 org_map = list(org_map)infer_off_map = list(infer_off_map)final_map = []for n in range(256):temp1 = org_map[n]temp2 = infer_off_map[temp1]final_map.append(temp2)final_map = np.array(final_map)return final_mapdef get_newimg(img_org, org2infer_maps):w, h, _ = img_org.shapeb, g ,r =cv2.split(img_org)for i in range(w):for j in range(h):temp1 = b[i,j]b[i,j] = org2infer_maps[0][temp1]for i in range(w):for j in range(h):temp1 = g[i,j]g[i,j] = org2infer_maps[1][temp1]for i in range(w):for j in range(h):temp1 = r[i,j]r[i,j] = org2infer_maps[2][temp1]newimg = cv2.merge([b,g,r])return newimgdef get_new_img(img_org, infer_map):org_Hist_b = cv2.calcHist([img_org], [0], None, [256], [0,255])org_Hist_g = cv2.calcHist([img_org], [1], None, [256], [0,255])org_Hist_r = cv2.calcHist([img_org], [2], None, [256], [0,255])org_b_map = get_map(org_Hist_b)org_g_map = get_map(org_Hist_g)org_r_map = get_map(org_Hist_r)org2infer_map_b = get_finalmap(org_b_map, infer_map[0])org2infer_map_g = get_finalmap(org_g_map, infer_map[1])org2infer_map_r = get_finalmap(org_r_map, infer_map[2])return get_newimg(img_org, [org2infer_map_b, org2infer_map_g, org2infer_map_r]) if __name__ == "__main__":dstroot = './imgs'infer_img_path = './abc.png'infer_img = cv2.imread(infer_img_path)outroot = './out1'infer_map = get_infer_map(infer_img) # 计算参考映射关系dstlist = os.listdir(dstroot)for n in dstlist:img_path = os.path.join(dstroot, n)print(img_path)img_org = cv2.imread(img_path)new_img = get_new_img(img_org, infer_map) # 根据映射关系获得新的图像new_path = os.path.join(outroot, n)cv2.imwrite(new_path, new_img)。
直方图修正法

重庆交通大学测量与空间信息处理实验报告实验课程:遥感原理及应用实验名称:直方图修正法班级:姓名:学号:实验日期:2012 年11 月17 日实验原理一.直方图均衡化直方图均衡算法是图象增强空域法中的最常用、最重要的算法之一。
目前较常用的增强方法有全局直方图均衡化、局部直方图均衡化两大类。
全局直方图均衡化是将原图像的直方图通过变换函数变为均匀的直方图, 然后按均匀直方图修正原图像, 从而获得一幅灰度分布均匀的新图像。
它以概率理论作基础, 运用灰度点运算来实现直方图的变换, 从而达到图象增强的目的。
它的变换函数取决于图像灰度直方图的累积分布函数。
概括的说, 就是把一已知灰度概率分布的图像, 经过一种变换, 使之演变成一幅具有均匀概率分布的新图像。
当图像的直方图为一均匀分布时,图像的信息熵最大,此时图像包含的信息量最大,图像看起来就显得清晰。
下面先讨论连续变化图像的均衡化问题。
设r 、s 分别表示原图像和增强后图像的灰度。
假设r 被归一化到区间[0,1], 且r =0 表示黑色及 r = 1表示白色。
当r 、s 在[0,1] 之间时,表示像素灰度在黑白之间变化。
灰度变换函数为s=T(r) 0≤r≤1 (1)它满足以下两个条件:(1) T(r)在区间0≤r≤1中为单值且单调递增;(2) 当0≤r≤1时, 0 ≤T(r)≤1;条件(1)中要求T(r)为单值是为了保证反变换存在, 单调条件保证原图各灰度级在变换后仍保持从黑到白( 或从白到黑) 的排列次序;条件(2)保证变换前后灰度值动态范围的一致性。
图1 给出了满足这两个条件的一个变换函数的例子, 由s 到r 的反变换可以表示为:= 0≤s≤1 (2)r-),(1sT即使 T(r)满足条件(1)和(2), 相应的函数)(1sT-也可能不为单值。
一幅图像的灰度级可被视为区间[0,1] 的随机变量。
令)(r p r 和)(s p s 分别代表随机变量 r 和s 的概率密度函数。
直方图

j 0 j 0 k k
nj n
乘以n,再四舍五 入取整
44
说明
由于数字图像灰度取值的离散性,通过四 舍五入使得变换后的灰度值出现了归并现 象,从而致使变换后的图像并非完全均匀 分布,但是相比原始直方图要均匀得多
直方图修正
2.直方图规定化/直方图匹配 在某些情况下,并不一定需要具有均匀直 方图的图像,有时需要具有特定的直方图 的图像,以便能够增强图像中某些灰度级。 直方图规定化方法就是针对上述思想提出 来的。 直方图规定化是使原图像灰度直方图变成 规定形状的直方图而对图像作修正的增强 方法
0.89
0.95 0.98 1.00
6/7
1 1 1
s3=6/7
985
0.24
s4=1
448
0.11
41
例:
原图像的直方图
均衡后图像的直方图
42
例:直方图均衡化示例
43
例:
思考问题: 若在原图像一行上连续8个像素的灰度值分 别为:0、1、2、3、4、5、6、7,则均衡 后,对应的灰度值为多少?
46
直方图规定化
可见,它是对直方图均衡化处理的一种有 效的扩展。直方图均衡化处理是直方图规 定化的一个特例 对于直方图规定化,下面仍从灰度连续变 化的概率密度函数出发进行推导,然后推 广出灰度离散的图像直方图规定化算法
47
直方图规定化
假设pr(r)和pz(z)分别表示已归一化的原始 图像灰度分布的概率密度函数和希望得到 的图像的概率密度函数 首先对原始图像进行直方图均衡化,即求 变换函数:
H Pi log2 Pi
i 0 L 1
17
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程名称___图像处理与分析题目名称_直方图均衡化与规定化学院信息工程专业电子信息工程年级班别 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。