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

题目要求:

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');


运行结果:

直方图规范化用于图像增强 matlab程序_第1张图片

标准结果:

直方图规范化用于图像增强 matlab程序_第2张图片


你可能感兴趣的:(function,matlab,plot)