zoukankan      html  css  js  c++  java
  • [数字图像处理](四)直方图均衡化[HE]算法

    图像处理(四)

    直方图均衡化


    0____前言

    ​ 直方图操作是图像处理中的一个基本工具。从观察一些图像的直方图中我们可以发现,在暗图像中 ,大多数直方图灰度容集在灰度低端;类似的在亮图像的直方图中,大多数直方图灰度容集在灰度级的高端。直方图均衡化就是通过计算每一灰度级数出现的概率,并将得到的概率前缀和映射到原图像中的过程,此处介绍的是最基本的基于全图像的均衡化的HE(直方图均衡化)算法,之后会继续介绍AHE(自适应直方图均衡化)与CLAHE(限制对比度直方图均衡)。

    1____算法流程

    1. 读入图像预处理
    2. 统计每个灰度级数在图像中出现的次数
    3. 计算每个灰度级数于总像素的概率,并统计数组的前缀和
    4. 将得到的前缀和映射到原图像数组中

    2____MATLAB实现

    clc;
    close all;
    clear all;
    
    %   读入,预处理
    im = imread('p21.png');
    imgray = rgb2gray(im);
    
    figure;
    subplot(2,2,1);
    imshow(imgray);
    %   统计每个灰度级数
    hist = zeros(1,256);
    [n,m] = size(imgray);
    
    %   后面要+1因为图像的范围是在0~255,但是matlab的数组是从1开始映射的
    for i = 1:1:n
        for j = 1:1:m
            hist( imgray(i,j)+1 ) = hist( imgray(i,j) +1) + 1;
        end
    end
    
    subplot(2,2,2);
    bar(hist);
    %   求分布概率前缀和
    pro = zeros(1,256);
    sumim = sum(hist)
    
    pro(1) = hist(1)/sumim;
    for i = 2:1:256
        pro(i) = pro(i-1)+hist(i)/sumim;
    end
    %   灰度映射
    transim = zeros(n,m);
    
    for i = 1:1:n
        for j = 1:1:m
            transim(i,j) = pro(imgray(i,j))*255 + 0.5;
        end
    end
    
    transim = uint8(transim);
    subplot(2,2,3);
    imshow(transim);
    subplot(2,2,4);
    imhist(transim);
    
    
  • 相关阅读:
    数据攻略●R语言自述
    测试实例
    xml反射
    过滤器
    使用s标签来进行简单的表格配置
    将Spring、Hibernate、Struts2连接起来
    Spring容器
    初见Spring框架
    Spring框架的AOP
    Hibernate里面的几个方法
  • 原文地址:https://www.cnblogs.com/hoppz/p/14789860.html
Copyright © 2011-2022 走看看