直方图均衡化matlab程序.doc
- 文档编号:1339075
- 上传时间:2023-04-30
- 格式:DOC
- 页数:7
- 大小:25KB
直方图均衡化matlab程序.doc
《直方图均衡化matlab程序.doc》由会员分享,可在线阅读,更多相关《直方图均衡化matlab程序.doc(7页珍藏版)》请在冰点文库上搜索。
直方图和直方图均衡的Matlab完整程序(数字图像处理)
一、实验目的
掌握基本的图象增强方法,观察图象增强的效果,加深对灰度直方图及直方图均衡化的理解,掌握直方图均衡化方法。
二、实验内容
将一张彩色图片转换成灰色图片,画灰度直方图和均衡化后的直方图,并将灰度图和均衡化后的图片对比。
三、实验原理
灰度直方图是将数字图像中的所有像素,按照灰度值的大小,统计其所出现的频度。
通常,灰度直方图的横坐标表示灰度值,纵坐标为像素个数,也可以采用某一灰度值的像素数占全图像素数的百分比作为纵坐标。
直方图均衡方法的基本原理是:
对在图像中像素个数多的灰度值(即对画面起主要作用的灰度值)进行展宽,而对像素个数少的灰度值(即对画面不起主要作用的灰度值)进行归并。
从而达到清晰图像的目的。
四、实验程序
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%函数功能,画出图像的直方图,并对图像进行直方图均衡
%直接读图像abc.jpg,读到tuu中
%graydis是原始直方图各灰度级像素个数
%原始直方图graydispro,利用原始直方图计算原始累计直方图graydispro
%t[]计算和原始灰度对应的新的灰度t[],建立映射关系,t坐标代表原始的灰度,t[]代表对应原始坐标的新坐标
%new_graydis是统计新直方图各灰度级像素个数
%计算新的灰度直方图new_graydispro,利用新的直方图计算新的累计直方图new_graydispro
%计算直方图均衡后的新图new_tu
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clearall
closeall
tuu=imread('abc.jpg');%读入图片
tu=rgb2gray(tuu);%将彩色图片转换为灰度图
graydis=zeros(1,256);%设置矩阵大小
graydispro=zeros(1,256);
new_graydis=zeros(1,256);
new_graydispro=zeros(1,256);
[hw]=size(tu);
new_tu=zeros(h,w);
%计算原始直方图各灰度级像素个数graydis
forx=1:
h
fory=1:
w
graydis(1,tu(x,y))=graydis(1,tu(x,y))+1;
end
end
%计算原始直方图graydispro
graydispro=graydis./sum(graydis);
subplot(1,2,1);
plot(graydispro);
title('灰度直方图');
xlabel('灰度值');ylabel('像素的概率密度');
%计算原始累计直方图
fori=2:
256
graydispro(1,i)=graydispro(1,i)+graydispro(1,i-1);
end
%计算和原始灰度对应的新的灰度t[],建立映射关系
fori=1:
256
t(1,i)=floor(254*graydispro(1,i)+0.5);
end
%统计新直方图各灰度级像素个数new_graydis
fori=1:
256
new_graydis(1,t(1,i)+1)=new_graydis(1,t(1,i)+1)+graydis(1,i);
end
%计算新的灰度直方图new_graydispro
new_graydispro=new_graydis./sum(new_graydis);
subplot(1,2,2);
plot(new_graydispro);
title('均衡化后的灰度直方图');
xlabel('灰度值');ylabel('像素的概率密度');
%计算直方图均衡后的新图new_tu
forx=1:
h
fory=1:
w
new_tu(x,y)=t(1,tu(x,y));
end
end
figure,imshow(tu,[]);
title('原图');
figure,imshow(new_tu,[]);
title('直方图均衡化后的图');
//////////////////////////////////////////////////////
另外两种代码:
代码
Matlab
下面的代码来自archiless,注释非常详细,适合初学。
%数字图像处理程序作业
%本程序能将JPG格式的彩色图像文件灰度化并进行直方图均衡
%
%输入文件:
PicSample.jpg待处理图像
%输出文件:
PicSampleGray.bmp灰度化后图像
%PicEqual.bmp均衡化后图像
%
%输出图形窗口说明
%figureNO1待处理彩色图像
%figureNO2灰度化后图像
%figureNO3直方图
%figureNO4均衡化后直方图
%figureNO5灰度变化曲线
%figureNO6均衡化后图像
%1,处理的图片名字要为PicSample.jpg
%2,程序每次运行时会先清空workspace
%作者;archilesslorder
clearall
%一,图像的预处理,读入彩色图像将其灰度化
PS=imread('PicSample.jpg');%读入JPG彩色图像文件
imshow(PS)%显示出来figureNO1
title('输入的彩色JPG图像')
imwrite(rgb2gray(PS),'PicSampleGray.bmp');%将彩色图片灰度化并保存
PS=rgb2gray(PS);%灰度化后的数据存入数组
figure,imshow(PS)%显示灰度化后的图像,也是均衡化前的样品figureNO2
title('灰度化后的图像')
%二,绘制直方图
[m,n]=size(PS);%测量图像尺寸参数
GP=zeros(1,256);%预创建存放灰度出现概率的向量
fork=0:
255GP(k+1)=length(find(PS==k))/(m*n);%计算每级灰度出现的概率,将其存入GP中相应位置
end
figure,bar(0:
255,GP,'g')%绘制直方图figureNO3
title('原图像直方图')
xlabel('灰度值')
ylabel('出现概率')
%三,直方图均衡化
S1=zeros(1,256);
fori=1:
256forj=1:
iS1(i)=GP(j)+S1(i);%计算Skend
endS2=round(S1*256);%将Sk归到相近级的灰度
fori=1:
256GPeq(i)=sum(GP(find(S2==i)));%计算现有每个灰度级出现的概率
end
figure,bar(0:
255,GPeq,'b')%显示均衡化后的直方图figureNO4
title('均衡化后的直方图')
xlabel('灰度值')
ylabel('出现概率')
figure,plot(0:
255,S2,'r')%显示灰度变化曲线figureNO5
legend('灰度变化曲线')
xlabel('原图像灰度级')
ylabel('均衡化后灰度级')
%四,图像均衡化
PA=PS;
fori=0:
255PA(find(PS==i))=S2(i+1);%将各个像素归一化后的灰度值赋给这个像素
end
figure,imshow(PA)%显示均衡化后的图像figureNO6
title('均衡化后图像')
imwrite(PA,'PicEqual.bmp');
另一段Matlab的代码,来自直方图均衡化--图像增强
I=imread('LENA256.bmp');
imshow(I);
figure;
imhist(I);
[m,n]=size(I);
hf=zeros(1,256);
pa=zeros(1,256);
I=double(I);
fori=1:
mforj=1:
nhf(I(i,j)+1)=hf(I(i,j)+1)+1;%统计各灰度像素个数end
end
bmap=zeros(1,256);
fori=1:
256temp=0;forj=1:
itemp=temp+hf(j);endbmap(i)=floor(temp*255/(m*n));
end
y=zeros(m,n);
fori=1:
mforj=1:
ny(i,j)=bmap(I(i,j)+1);end
end
y=uint8(y);
figure;
imshow(y);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 直方图 均衡 matlab 程序