直方图均衡化matlab程序Word下载.doc
《直方图均衡化matlab程序Word下载.doc》由会员分享,可在线阅读,更多相关《直方图均衡化matlab程序Word下载.doc(7页珍藏版)》请在冰豆网上搜索。
%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);
%计算和原始灰度对应的新的灰度t[],建立映射关系
fori=1:
t(1,i)=floor(254*graydispro(1,i)+0.5);
%统计新直方图各灰度级像素个数new_graydis
new_graydis(1,t(1,i)+1)=new_graydis(1,t(1,i)+1)+graydis(1,i);
%计算新的灰度直方图new_graydispro
new_graydispro=new_graydis./sum(new_graydis);
subplot(1,2,2);
plot(new_graydispro);
均衡化后的灰度直方图'
fory=1:
new_tu(x,y)=t(1,tu(x,y));
end
figure,imshow(tu,[]);
原图'
figure,imshow(new_tu,[]);
直方图均衡化后的图'
//////////////////////////////////////////////////////
另外两种代码:
代码
Matlab
下面的代码来自archiless,注释非常详细,适合初学。
%数字图像处理程序作业
%本程序能将JPG格式的彩色图像文件灰度化并进行直方图均衡
%
%输入文件:
PicSample.jpg待处理图像
%输出文件:
PicSampleGray.bmp灰度化后图像
%PicEqual.bmp均衡化后图像
%输出图形窗口说明
%figureNO1待处理彩色图像
%figureNO2灰度化后图像
%figureNO3直方图
%figureNO4均衡化后直方图
%figureNO5灰度变化曲线
%figureNO6均衡化后图像
%1,处理的图片名字要为PicSample.jpg
%2,程序每次运行时会先清空workspace
%作者;
archilesslorder
%一,图像的预处理,读入彩色图像将其灰度化
PS=imread('
PicSample.jpg'
%读入JPG彩色图像文件
imshow(PS)%显示出来figureNO1
输入的彩色JPG图像'
)
imwrite(rgb2gray(PS),'
PicSampleGray.bmp'
%将彩色图片灰度化并保存
PS=rgb2gray(PS);
%灰度化后的数据存入数组
figure,imshow(PS)%显示灰度化后的图像,也是均衡化前的样品figureNO2
灰度化后的图像'
%二,绘制直方图
[m,n]=size(PS);
%测量图像尺寸参数
GP=zeros(1,256);
%预创建存放灰度出现概率的向量
fork=0:
255GP(k+1)=length(find(PS==k))/(m*n);
%计算每级灰度出现的概率,将其存入GP中相应位置
figure,bar(0:
255,GP,'
g'
)%绘制直方图figureNO3
原图像直方图'
出现概率'
%三,直方图均衡化
S1=zeros(1,256);
256forj=1:
iS1(i)=GP(j)+S1(i);
%计算Skend
endS2=round(S1*256);
%将Sk归到相近级的灰度
256GPeq(i)=sum(GP(find(S2==i)));
%计算现有每个灰度级出现的概率
255,GPeq,'
b'
)%显示均衡化后的直方图figureNO4
均衡化后的直方图'
figure,plot(0:
255,S2,'
r'
)%显示灰度变化曲线figureNO5
legend('
灰度变化曲线'
原图像灰度级'
均衡化后灰度级'
%四,图像均衡化
PA=PS;
fori=0:
255PA(find(PS==i))=S2(i+1);
%将各个像素归一化后的灰度值赋给这个像素
figure,imshow(PA)%显示均衡化后的图像figureNO6
均衡化后图像'
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
bmap=zeros(1,256);
256temp=0;
forj=1:
itemp=temp+hf(j);
endbmap(i)=floor(temp*255/(m*n));
y=zeros(m,n);
mforj=1:
ny(i,j)=bmap(I(i,j)+1);
y=uint8(y);
imshow(y);