您的位置:首页 > 编程语言 > MATLAB

直方图规范化用于图像增强 matlab程序

2012-05-29 17:56 736 查看
题目要求:
1. 直方图的规范化。处理图像:2.bmp。

1) 单映射规则(single mapping law,SML)

2) 组映射规则(group mapping law,GML)

3) 比较SML和GML的误差大小。

规定化函数 y=x

源程序:(参考原理自己写 有两幅图没输出来)

function[]=H_Matching()

clear;

close all;

I=imread('2.bmp');

diff=zeros(256,256);

diff=double(diff);

HistogramSML=zeros(256);

%HistogramSML=double(HistogramSML);

HistogramGML=zeros(256);

%HistogramGML=double(HistogramGML);

scr=zeros(256);

%scr=double(scr);

dest=zeros(256);

%dest=double(dest);

for k=1:256

scr(k+1)=length(find(I==k));

end

scrpro=scr/sum(scr);

for i=2:256

scrpro(i)=scrpro(i-1)+scrpro(i);

end

for i=1:256

dest(i)=i;

end

destpro=dest/sum(dest);

for i=2:256

destpro(i)=destpro(i-1)+destpro(i);

end

for j=1:256

for i=1:256

diff(i,j)=destpro(i)-scrpro(j);

if diff(i,j)<0

diff(i,j)=-diff(i,j);

end

end

end

%SML

for j=1:256

minx=0;

minvalue=diff(1,j);

for i=2:256

if minvalue>diff(i,j)

minvalue=diff(i,j);

minx=i;

end

end

HistogramSML(j)=minx;

end

%SML规定化后直方图

SH=zeros(256);

SH=double(SH);

for i=1:256

SH(HistogramSML(i)+1)=SH(HistogramSML(i)+1)+scr(i);

end

%规定化后概率直方图

SHpro=SH/sum(SH);

subplot(2,3,2);

plot(SHpro);

title('SML映射后的概率直方图');

xlabel('灰度值');

ylabel('概率密度');

%GML

lastStartY=1;

lastEndY=1;

startY=1;

endY=1;

for i=1:256

minvalue=diff(i,1);

for j=2:256

if minvalue>diff(i,j)

minvalue=diff(i,j);

endY=j;

end

end

if (startY~= lastStartY) || (endY~=lastEndY)

for k=startY:endY

HistogramGML(k)=i;

end

lastStartY=startY;

lastEndY=endY;

startY=lastEndY+1;

end

end

%GML规定化后直方图

GH=zeros(256);

GH=double(GH);

for i=1:256

GH(HistogramGML(i)+1)=GH(HistogramGML(i)+1)+scr(i);

end

%规定化后概率直方图

GHpro=GH/sum(GH);

subplot(2,3,3);

plot(GHpro);

title('GML映射后的概率直方图');

xlabel('灰度值');

ylabel('概率密度');

S=zeros(256,256);

%S=double(S);

G=zeros(256,256);

%G=double(G);

subplot(2,3,4);

imshow(I);

subplot(2,4,1);

K=rgb2gray(I);

imhist(K);

title('origin');

for i=1:256

for j=1:256

S(i,j)=HistogramSML(I(i,j)+1);

end

end

subplot(2,3,5);

imshow(S);

title('SML');

for i=1:256

for j=1:256

G(i,j)=HistogramGML(I(i,j)+1);

end

end

subplot(2,3,6);

imshow(G);

title('GML');


运行结果:





标准结果:




内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: