数字图像处理之二直方图规定化

 clear;
 close all;
 I=imread('D:/567.png');
 dif=zeros(256,256);%%变量的定义及其初始化
 dif=double(dif);
 H_SML=zeros(256);%单映射变量定义初始化
 H_GML=zeros(256);%组映射变量定义初始化
 src=zeros(256);%源图像像素分为256个等级
 dst=zeros(256);%处理后的图像像素等级256个


 for k=1:256
     src(k+1)=length(find(I==k));   %在这里计算每个分量bin的值    
 end
 src_pro=src/sum(src);%%进行归一化处理
 for i=2:256   
 src_pro(i)=src_pro(i-1)+src_pro(i);%%计算累计直方图
 end


 for i=1:256   
     dst(i)=i;   
 end
 dst_pro=dst/sum(dst);
 for i=2:256 
 dst_pro(i)=dst_pro(i-1)+dst_pro(i);%%这里已经计算出了规定后的累积直方图。
 end
 
 for j=1:256
     for i=1:256
        dif(i,j)=dst_pro(i)-src_pro(j);
        if dif(i,j)<0
            dif(i,j)=-dif(i,j);
        end
     end
 end
 
 %SML单映射
 for j=1:256
     minx=0;
     minvalue=dif(1,j);
     for i=2:256
         if minvalue>dif(i,j)
             minvalue=dif(i,j);
             minx=i;
         end
     end
         H_SML(j)=minx;
 end
 %SML规定化后直方图
 SH=zeros(256);
 SH=double(SH);
 for i=1:256
    SH(H_SML(i)+1)=SH(H_SML(i)+1)+src(i);
 end
%规定化后概率直方图
SHpro=SH/sum(SH);
subplot(2,3,2);
plot(SHpro);
axis([0,257,0,0.05]);
title('单映射后的概率直方图');
xlabel('灰度值');
ylabel('概率密度');




 %GML
 lastStartY=1;
 lastEndY=1;
 startY=1;
 endY=1;
 for i=1:256
     minvalue=dif(i,1);
     for j=2:256
         if minvalue>dif(i,j)
             minvalue=dif(i,j);
             endY=j;
         end
     end
     if (startY~= lastStartY) || (endY~=lastEndY)
         for k=startY:endY
             H_GML(k)=i;
         end
             lastStartY=startY;
             lastEndY=endY;
             startY=lastEndY+1;
     end
 end
 %GML组映射规定化后直方图
 GH=zeros(256);
 GH=double(GH);
 for i=1:256
    GH(H_GML(i)+1)=GH(H_GML(i)+1)+src(i);
 end
%规定化后概率直方图
GHpro=GH/sum(GH);
%gh=uint8(GH);


subplot(2,3,3);
plot(GHpro);
axis([0,257,0,0.05]);%这里是设置坐标轴的显示范围。


title('组映射后的概率直方图');
xlabel('灰度值');
ylabel('概率密度');
 S=zeros(256,256);
 S=uint8(S);%这里要转换为uint8类型的用于显示
 G=zeros(256,256);
 G=uint8(G);%这里也要对器进行转换转换为uint8类型的
 subplot(2,3,4);
 imshow(I);
 subplot(2,4,1);
 KK=rgb2gray(I);
 imhist(KK);
 title('源图像');
 for i=1:241
     for j=1:357
         S(i,j)=H_SML(I(i,j)+1);
     end
 end
 subplot(2,3,5);
 imshow(S);
 title('单映射后的图像');
 for i=1:241
     for j=1:357
         G(i,j)=H_GML(I(i,j)+1);
     end
 end
 subplot(2,3,6);
 imshow(G);
 title('组映射后的图像');
 figure(3) 
 plot(GH);
  title('组映射的直方图');
 xlabel('灰度值');
 ylabel('像素数');
  figure(4) 
 plot(SH,'Color',[0 0.03 1]);


  title('单映射的直方图');
 xlabel('灰度值');
 ylabel('像素数');
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值