數字圖像處理--(03)數字圖像增強之直方圖操作(MATLAB)

直方圖

直方圖是圖象的一種統計表達,反映了圖中灰度的分佈情況。

直方圖處理以概率論爲基礎,常用的方法主要有直方圖均衡化和直方圖規定化。

直方圖均衡化:自動增強,效果不易控制,總得到全圖增強的結果

直方圖規定化:有選擇地增強,須給定需要的直方圖,可特定增強的結果

直方圖均衡化

直方圖均衡化是一種利用灰度變換自動調節圖像對比度質量的方法,基本思想是通過灰度級的概率密度函數求出灰度變換函數,它是一種以累計分佈函數變換法爲基礎的直方圖修正法。
通俗點說就是:

把原始圖像的灰度直方圖從比較集中的某個灰度區間變成在全部灰度範圍內的均勻分佈。直方
圖均衡化就是對圖像進行非線性拉伸,重新分配圖像像素值,使一定灰度範圍內的像素數量大
致相同。直方圖均衡化就是把給定圖像的直方圖分佈改變成“均勻”分佈直方圖分佈,說的簡單
點,就是把原來的圖像的灰度分配均勻,使得0-255都有一定的取值,這樣對比度相對大些,
視覺上更好看。

主要作用: 增強動態範圍偏小的圖像的反差 。

基本思想: 把原始圖的直方圖變換爲在整個灰度範圍內均勻分佈的形式,增加了像素灰度值的動態範圍,從而達到增強圖像整體對比度的效果。直方圖更一般的(歸一化的)概率表達形式 :
在這裏插入圖片描述
上式中,n 是圖像裏像素的總個數。通過圖像裏像素的總個數歸一化,所得到的直方圖表達了比例。

實現步驟

直方圖均衡化處理的步驟如下:

  1. 求出給定待處理圖像的直方圖
  2. 利用累計分佈函數對原圖像的統計直方圖做變換,得到新的圖像灰度。
  3. 進行近似處理,將新灰度代替舊灰度,同時將灰度值相等或相近的每個灰度直方圖合併在一起

MATLAB實現直方圖均衡化處理的函數是:J=histeq(I,n):I爲輸入的原圖像,J爲直方圖均衡化後得到的圖像,n爲均衡化後的灰度級數,默認值爲64

MATLAB實現

Matlab圖像處理工具箱提供了用於直方圖均衡化的函數histeq(),調用語法如下:[J,T]=histeq(I)
I是原始圖像,J是經過直方圖均衡化的輸出圖像,T是變換矩陣
圖像歸一化:將圖像轉換成唯一的標準形式以抵抗各種變換,從而可消除同類圖像不同變形體之間的外觀差異
灰度歸一化:當圖像歸一化用於消除灰度因素(光照)等造成的圖像外觀變化時,稱爲灰度歸一化.

編寫均衡化函數

clc;
clear all;close all;
img = imread('../img1.jpg');
subplot(2,2,1);imshow(img);title("原始圖像");
subplot(2,2,2);imhist(img);title("原始圖像直方圖");

%% 進行灰度統計
[H,W]=size(img);
nk = zeros(1,256);
for i = 1 : H
    for j = 1: W
        nk(img(i,j)+1) = nk(img(i,j)+1)+1;
    end
end

%% 計算灰度分佈
pk= zeros(1,256);
pk= nk / (H*W);

%% 計算累計直方圖分佈
sk= zeros(1,256);
sk(1)=pk(1);
for i = 2:256
   sk(i) = sk(i-1) +pk(i); 
end

%% 累積分佈取整數值歸一化
kt = zeros(1,256);
kt = uint8(255.* sk );

%% 對圖像均衡化
o_img = zeros(size(img));
for i = 1 : H
    for j = 1: W
        o_img(i,j)=kt(img(i,j)+1);
    end
end
o_img = uint8(o_img);
subplot(2,2,3);imshow(o_img);title("輸出圖像");
subplot(2,2,4);imhist(o_img);title("輸出圖像直方圖");

在這裏插入圖片描述

histeq函數使用

clc;
clear all;close all;
gray1 = uint8(imread('../gray1.jpg'));
o_gray1=histeq(gray1);
subplot(2,2,1);imshow(gray1);title("灰度原始圖像");
subplot(2,2,2);imhist(gray1);title("灰度原始圖像直方圖");
subplot(2,2,3);imshow(o_gray1);title("灰度輸出圖像");
subplot(2,2,4);imhist(o_gray1);title("灰度輸出圖像直方圖");

在這裏插入圖片描述

直方圖規定化

直方圖規定化的基本思想:有目的的增強某個灰度區間的圖像,即能夠人爲地修正直方圖的形狀,使之與期望的圖像相匹配。

直方圖規定化是在運用均衡化原理的基礎上,通過建立原始圖像和期望圖像之間的關係,選擇地控制直方圖,使原始圖像的直方圖變成規定的形狀,從而彌補了直方圖均衡不具備交互作用的特性。

方法步驟

直方圖的規定劃的方法步驟:
1.分別計算原圖像與目標圖像的累計概率分佈
2.分別對原圖像與目標圖像進行直方圖均衡化操作
3.利用組映射關係使原圖像直方圖按照規定進行變換

代碼實現

clear
I=imread('../img1.jpg');%讀取圖像
Imatch=imread('../img2.jpg');%讀取匹配圖像
Jmatch=imhist(Imatch);%獲取匹配圖像直方圖
Iout=histeq(I,Jmatch);%直方圖匹配
figure;%顯示原圖像、匹配圖像和匹配後的圖像
subplot(1,3,1),imshow(I);title('原圖像');
subplot(1,3,2),imshow(Imatch);title('匹配圖像');
subplot(1,3,3),imshow(Iout);title('匹配之後圖像');
figure;%顯示原圖像、匹配圖像和匹配後圖像的直方圖
subplot(3,1,1),imhist(I,64);title('原圖像直方圖');
subplot(3,1,2),imhist(Imatch,64);title('匹配圖像圖像直方圖');
subplot(3,1,3),imhist(Iout,64);title('匹配之後圖像直方圖');

彩色圖像效果

在這裏插入圖片描述
在這裏插入圖片描述

灰度圖像效果

在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章