zoukankan      html  css  js  c++  java
  • Matlab实现直方图规定化

    直方图规定化

    算法分析

    1. 求出原图的累积概率分布
    2. 求出规定图的累积概率分布
    3. 求出原图中每一个灰度级累积概率与规定图的累积概率最接近的灰度级
    4. 根据第3步的方法将原图的灰度映射到标准图中距离最近的灰度值

    伪代码

    function outputimg = my_histspec(A,B)
    % 灰度图的直方图规定化
    % 输入:A是读入的原图,B是读入的规定化的标准图
    % 输出:outputimg是将A规定化到B之后的图像
    
    [HA,WA] = 原图的大小
    [HB,WB] = 标准图的大小
    
    统计原图灰度级频数
    统计标准图灰度级频数
    计算原图灰度级概率
    计算标准图灰度级概率
    计算原图灰度级累积概率分布
    计算标准图灰度级累积概率分布
    
    %求原图和标准图的映射关系,找到两个累积概率最接近的灰度级
    遍历原图的每个灰度级    
        value{j} = 求标准图当前灰度级累积概率与原图所有灰度级累积概率之差的绝对值
        [temp{j},index(j)] = index中存的是vlaue中最小值的下标
    outputimg = 开辟一个和原图大小一致的新矩阵存放规定化后的图像
    遍历outputimg   
             outputimg(i,j) = 根据映射关系为每一个新矩阵的像素点赋灰度值
    转换outputimg成uint8数据类型
    end
    

    代码

    function outputimg = my_histspec(A,B)
    % 灰度图的直方图规定化
    % 输入:A是读入的原图,B是读入的规定化的标准图
    % 输出:outputimg是将A规定到B之后的图像
    
    [HA,WA] = size(A);
    [HB,WB] = size(B);
    PA = imhist(A) / (HA * WA);
    PB = imhist(B) / (HB * WB);
    
    %求累积概率分布
    for i = 2 : 256
        PA(i) = PA(i - 1) + PA(i);
        PB(i) = PB(i - 1) + PB(i);
    end
    %求原图和映射图的映射关系,找到两个累积直方图距离最近的点
    for j = 1:256    
        value{j} = abs(PB - PA(j));
        [temp{j},index(j)] = min(value{j}) %index中存的是最小值的下标,temp中存的是最小值
    end
    
    outputimg = zeros(HA, WA);
    for i = 1:HA   
         for j = 1:WA    
             outputimg(i,j) = index(A(i,j) + 1)-1;
         end
    end
    outputimg = uint8(outputimg);
    end
    

    实验结果

    %调用示例:
    A = imread('pout.tif');
    B = imread('coins.png');
    C = my_histspec(A,B);
    subplot(2,3,1);imshow(A);title('原图');
    subplot(2,3,2);imshow(B);title('标准图');
    subplot(2,3,3);imshow(C);title('匹配到标准图后');
    
    subplot(2,3,4);imhist(A);title('原图直方图');
    subplot(2,3,5);imhist(B);title('标准图直方图');
    subplot(2,3,6);imhist(C);title('匹配到标准图后直方图');
    

    实验分析

    • 直方图均衡化是直方图规定化的特例,理想状态下原图直方图均衡化和标准图均衡化后对应的直方图应该是相等的,通过求得原图累积概率和标准图累积概率最接近的灰度值映射,最后的效果是原图的直方图和标准图的直方图接近
  • 相关阅读:
    Spread for Windows Forms快速入门(11)数据筛选
    Spread for Windows Forms高级主题(7)自定义打印的外观
    Spread for Windows Forms高级主题(6)数据绑定管理
    使用WiX制作具有时间限制的安装包
    Spread for Windows Forms高级主题(2)理解单元格类型
    如何添加ActiveReports 6导出PDF时的安全设置和数字签名
    Spread for Windows Forms快速入门(10)绑定到数据库
    当心那些有歧义的命名
    【翻译】会有Silverlight6吗?
    Spread for Windows Forms快速入门(12)数据分组(Outlook风格)
  • 原文地址:https://www.cnblogs.com/Vicky1361/p/13922043.html
Copyright © 2011-2022 走看看