[數字圖像處理](四)直方圖均衡化[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);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM