zoukankan      html  css  js  c++  java
  • Matlab实现直方图均衡化

    直方图均衡化

    算法分析

    1. 对原图像每个通道统计0-255的灰度级概率

    2. 求原图像每个通道累积概率分布

    3. 根据累积概率直方图分别对每个通道(K)求每个像素点的映射

      p(k, i) = p(k, i) * 255

    function outputimg = myhisteq( A )
    % 直方图均衡化
    % 参数A是读入的图像矩阵
    % outputimg是经过直方图均衡化的图像
    
    [H,W,K] = size(A);
    P = zeros(K,256); %用于统计各个通道灰度级概率的行向量
    
    %统计每个通道0-255灰度级的概率
    for k = 1:K
        for v = 0:255
            P(k,v + 1) = length(find(A(:,:,k) == v)) / (H * W);
        end
    end
    
    %求累积概率分布
    for k = 1 : K
        for i = 2 : 256
            P(k, i) = P(k, i - 1) + P(k, i);
        end
    end
    
    %映射到0-255
    for k = 1: K   
        P(k,:) = round(P(k,:) * 255); 
    end
    
    outputimg = zeros(H,W,K);
    
    %对新图像每一个像素点映射
    for k = 1:K
        for i = 1:H
            for j = 1 :W
                outputimg(i,j,k) = P(k, A(i, j, k) + 1);
            end
        end
    end
          
    outputimg = uint8(outputimg);
    end
    

    实验结果

    %调用示例:
    A = imread('lena.png');
    B = myhisteq(A);
    subplot(1,2,1),imshow(A),title('原图');
    ubplot(1,2,2),imshow(B),title('直方图均衡');
    

    实验分析

    • 第一步统计原图中每个灰度级出现的概率,这里注意计数数组下标是从1-256,但是灰度值是从0-255
       for k = 1:K
          for v = 0:255
              P(k,v + 1) = length(find(A(:,:,k) == v)) / (H * W);  %这里是v+1
          end
      end  
    

    这里调用了Matlab中自带的find和length函数,另外也可以使用以下语句分两步实现,先统计灰度级的频数,再求概率

    % 统计每个像素值出现次数
    count = zeros(1, 256);
    for i = 1 : R
        for j = 1 : C
            %f(i,j)中的像素值是从0-255,数组下标是从1-256  
            count(1, fx(i, j) + 1) = count(1, fx(i, j) + 1) + 1;
        end
    end
    % 统计每个像素值出现的概率, 得到概率直方图
    for i = 1 : 256
        T(1, i) = count(1, i) / (R * C);
    end
    
    • 求完累积概率分布,将概率映射到0-255灰度级,这样可以使灰度值范围比较窄的像素点,占据到整个图像所允许范围

    • 直方图均衡化的目的:通过使得图像的灰度级更加均匀,反映在图像上使得相邻的像素之间的差别增大,从而达到增大图像对比度的效果

  • 相关阅读:
    ‘Host’ is not allowed to connect to this mysql server
    centos7安装mysql
    further configuration avilable 不见了
    Dynamic Web Module 3.0 requires Java 1.6 or newer
    hadoop启动 datanode的live node为0
    ssh远程访问失败 Centos7
    Linux 下的各种环境安装
    Centos7 安装 python2.7
    安装scala
    Centos7 安装 jdk 1.8
  • 原文地址:https://www.cnblogs.com/Vicky1361/p/13922014.html
Copyright © 2011-2022 走看看