直方图规定化——GML和SML映射规则

GML和SML原理

GML规定化(组映射)
先列出图像灰度值i,j,计算原始直方图Pr(i),列出规定直方图Pz(j),计算原始累计直方图Pi和规定累计直方图Pj,然后按照Pj到Pi寻找最接近的值存储为j,当满足给定的值多于一个时,按惯例取最小值。确定变换关系为i->j,最后列出匹配直方图P(j)。
SML规定化(单映射)
先列出图像灰度值i,j,计算原始直方图Pr(i),列出规定直方图Pz(j),计算原始累计直方图Pi和规定累计直方图Pj,然后按照Pi到Pj寻找最接近的值存储为j,当满足给定的值多于一个时,按惯例取最小值。确定变换关系为i->j,最后列出匹配直方图P(j)。

映射结果与分析

GML(组映射)映射结果
在这里插入图片描述
GML映射分析
先列出图像灰度值i,j,计算原始直方图Pr(i),列出规定直方图Pz(j),计算原始累计直方图Pi和规定累计直方图Pj,然后按照Pj到Pi寻找最接近的值存储为j,当满足给定的值多于一个时,按惯例取最小值。确定变换关系为i->j,最后列出匹配直方图P(j)。
SML(单映射)映射结果
在这里插入图片描述
SML映射分析
先列出图像灰度值i,j,计算原始直方图Pr(i),列出规定直方图Pz(j),计算原始累计直方图Pi和规定累计直方图Pj,然后按照Pi到Pj寻找最接近的值存储为j,当满足给定的值多于一个时,按惯例取最小值。确定变换关系为i->j,最后列出匹配直方图P(j)。
两种映射方法对比分析
在这里插入图片描述

代码

GML映射

%Write  by 长安 Rjex
clc ,clear all
A = [0.1 0.05 0.15 0.2 0.2 0.15 0.05 0.1];  %原直方图矩阵
C = [0 0.3 0 0.45 0 0 0.25 0];  %规定直方图矩阵
F=zeros(1,size(A,2));  %规定化后直方图矩阵
for i = 1:size(A,2)    %B为A的累计直方图矩阵
    if i == 1    
        B(i) = A (i);    
    else    
        B(i) = B(i-1) + A(i);    
    end
end
for i = 1:size(C,2)
    if i == 1    
        D(i) = C (i);    
    else     
        D(i) = D(i-1) + C(i);    
    end
end
min=1;
flag2 = 1;
for i = 1:size(D,2)
    if C(i)~=0    
        for j = flag2:size(B,2)      
              t=abs(D(i)-B(j));            
              if(t<min)            
                  min=t;   %min为求差最小绝对值                
                  flag=j;  %flag为所求的最小绝对值下标            
               end        
         end        
     for k = flag2:flag        
         E(k) = i;  %E为GML映射规则矩阵        
     end        
     flag2 = flag+1;        
     min=1;    
     end
end
for i = 1:size(E,2)
    F(E(i))=F(E(i))+A(i);
end 
j=1:size(A,2);
subplot(1,2,1),stem(j-1,A(j),'fill','black'),title('原始直方图'),xlabel('r_{k}'),ylabel('p_{r}(r_{k})');
subplot(1,2,2),stem(j-1,F(j),'fill','black'),title('GML映射规则'),xlabel('s_{k}'),ylabel('p_{s}(s_{k})'); 

SML映射

%Write  by 长安 Rjex
clc ,clear all
A = [0.1 0.05 0.15 0.2 0.2 0.15 0.05 0.1];  %原直方图矩阵
C = [0 0.3 0 0.45 0 0 0.25 0];  %规定直方图矩阵
F=zeros(1,size(A,2));  %规定化后直方图矩阵
for i = 1:size(A,2)    %B为A的累计直方图矩阵
    if i == 1    
        B(i) = A (i);   
    else    
        B(i) = B(i-1) + A(i);    
    end
end
for i = 1:size(C,2)     %D为C的累计直方图矩阵
    if i == 1    
        D(i) = C (i);    
    else    
        D(i) = D(i-1) + C(i);    
    end
end
min=1;
flag = 1;
for i = 1:size(B,2)
    for j = 1:size(D,2)    
        if C(j)~=0        
            t=abs(B(i)-D(j));            
            if(t<min)                
                min=t;   %min为求差最小绝对值                
                flag=j;  %flag为所求的最小绝对值下标            
            end        
        end   
     end    
     E(i) = flag; %E为CML映射规则矩阵    
     min=1;  
end
for i = 1:size(E,2)  %F为规定化后直方图矩阵    
     F(E(i))=F(E(i))+A(i);
end j=1:size(A,2);
subplot(1,2,1),stem(j-1,A(j),'fill','black'),title('原始直方图'),xlabel('r_{k}'),ylabel('p_{r}(r_{k})');
subplot(1,2,2),stem(j-1,F(j),'fill','black'),title('CML映射规则'),xlabel('s_{k}'),ylabel('p_{s}(s_{k})');
  • 17
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值