影象處理之影象增強

學繪o嗿翫發表於2018-08-12

        在影象的獲取、傳輸等過程中往往會有諸多因素對影象帶來一定的干擾,從而使得影象產生噪聲、質量降低等現象,進而不能達到人們對影象的視覺要求。為了使影象充分的滿足人們的需求,所以需要對影象進行相應的處理。

        影象增強處理是對影象進行加工,使其結果對於特定的應用比原始影象更合適的一種處理。它能夠提高影象整體和區域性的對比度,突出影象的細節資訊,從而使得增強後的影象更符合人眼的視覺特性且易於機器識別。影象增強沒有通用的“理論”,不同的環境所使用的影象增強技術並不一定是相同的,比如對於增強X射線影象非常有用的方法,可能並不是增強由電磁波譜中遠紅外波段拍攝的影象的最好方法。影象增強應當注意以下四個方面:(1)提高影象整體和區域性的對比度,影象增強演算法不僅僅只是使影象整體的對比度提高,而且還能使得影象的區域性細節資訊得到相應的增強。(2)在增強影象的同時,應該避免放大噪聲,這在一定程度上將會對影象質量造成影響。(3)增強後的影象應該具有良好的視覺效果,避免增強後的影象區域性增強過度或過弱。(4)影象增強應該具備較好的實時性。近年來應用最為廣泛的影象增強演算法包含直方圖均衡、小波變換、偏微分方程以及基於Retinex理論的影象增強演算法。

        本文主要講述的影象增強演算法是直方圖均衡化。

       直方圖是多種空間域處理技術的基礎,它表示了影象中每個灰度級與出現該灰度級的畫素點個數的統計關係,反映了影象中每種灰度出現的概率。

       假設I∈I(i,j)表示的是灰度級為L的影象,I(i,j)表示座標位置為(i,j)處的灰度值,I(i,j)∈[0,L-1],影象I灰度級的概率密度函式定義為:

                                                                       p(k)=\frac{nk}{N},(k=0,1,...,L-1)

式中,N為畫素點的總數,nk表示灰度級為k的畫素點的個數。影象I灰度級的累積分佈函式定義為:

                                                                     c(k)=\sum_{i=0}^{k}p(i),(k=0,1,...,L-1)

標準的直方圖均衡演算法通過累積分佈函式將原始影象對映為具有近似均勻灰度級分佈的增強影象,相應的對映關係為:

                                                         f(k)=(L-1)*c(k)=(L-1)*\sum_{i=0}^{k}p(k),(k=0,1,...,L-1)

MATLAB程式碼:

clc;
close all;
clear
image=imread('ball.tif');
[height,width,z]=size(image);
if z>1
    Img=rgb2gray(image);
else
    Img=image;
end
[hist,x1]=imhist(Img);
hist=hist./(height*width);
%% 統計每個灰度的畫素值累計數目
NumPixel=zeros(1,256);
for s=1:height
    for t=1:width
        NumPixel(Img(s,t)+1)=NumPixel(Img(s,t)+1)+1;
    end
end
%% 將每個灰度值的畫素值累計數目轉變成頻率
ProbPixel=zeros(1,256);
for s=1:256
    ProbPixel(s)=NumPixel(s)/(height*width);
end

CumuPixel=cumsum(ProbPixel);
CumuPixel=uint8(255.*CumuPixel+0.5);
%%  直方圖均衡的反對映
for  s= 1:height
	for t = 1: width
		HE(s,t) = CumuPixel(Img(s,t)+1);
	end
end
[hist2,x2]=imhist(HE);
%%   顯示影象
figure,subplot(121),imshow(Img),title('original image')
subplot(122),imshow(HE),title('histogram equalization')


結果圖:

 

相關文章