[数字图像处理](四)直方图均衡化[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);

原文地址:https://www.cnblogs.com/hoppz/p/14789860.html