%规定化直方图 规定灰度为[zeros(1,49),0.1,zeros(1,49),0.2,zeros(1,49),0.3,zeros(1,49),0.1,zeros(1,49),0.2,zeros(1,49),0.1]
clear all
A=imread('lena.bmp'); %读入bmp彩色图像
imshow(A) %显示出来
title('输入的bmp图像')
%绘制直方图
[m,n]=size(A); %测量图像尺寸
B=zeros(1,256); %预创建存放灰度出现概率的向量
for k=0:255
B(k+1)=length(find(A==k))/(m*n); %计算每级灰度出现的概率,将其存入B中相应位置
end
figure,bar(0:255,B,'g'); %绘制直方图
title('原图像直方图')
xlabel('灰度值')
ylabel('出现概率')
axis([0,260,0,0.015])
S1=zeros(1,256);
for i=1:256
for j=1:i
S1(i)=B(j)+S1(i); %计算原灰度图累计直方图
end
end
counts=[zeros(1,49),0.1,zeros(1,49),0.2,zeros(1,49),0.3,zeros(1,49),0.1,zeros(1,49),0.2,zeros(1,49),0.1];%规定化直方图
S2=zeros(1,256);
for i=1:256
for j=1:i
S2(i)=counts(j)+S2(i);
end
end; %"累计"规定化直方图
%对比直方图,找到相差最小的灰度级
for i=1:256
for j=1:256
if S1(j)<=S2(i)&S1(j+1)>=S2(i)
if abs(S1(j)-S2(i))<=abs(S1(j+1)-S2(i)) T(i)=j;
else T(i)=j+1;
end
end
end
end
%确定变换关系,重组直方图
for j=1:256
for i=1:256
H(j)=sum(B(find(T==j)));
end
end
figure,bar(0:255,H,'g') %显示规定化后的直方图
title('规定化后的直方图')
xlabel('灰度值')
ylabel('出现概率')
axis([0,260,0,0.6])
%显示规定图
PA=A;
for i=0:255
PA(find(A==i))=T(i+1); %将各个像素归一化后的灰度值赋给这个像素
end
figure,imshow(PA) %显示均衡化后的图像
title('规定化后图像')
imwrite(PA,'lenaguiding.bmp');
评论30
最新资源