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

 

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

分类: 机器视觉   1833人阅读  评论(0)  收藏  举报
题目要求:

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


运行结果:

标准结果:



  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值