基於直方圖的圖像增強算法(HE、CLAHE、Retinex)之(一)

2020-12-03 電子產品世界

  直方圖是圖像色彩統計特徵的抽象表述。基於直方圖可以實現很多有趣的算法。例如,圖像增強中利用直方圖來調整圖像的對比度、有人利用直方圖來進行大規模無損數據隱藏、還有人利用梯度直方圖HOG來構建圖像特徵進而實現目標檢測。本節我們就來討論重要的直方圖均衡化算法,說它重要是因為以此為基礎後續又衍生出了許多實用而有趣的算法。

本文引用地址:http://www.eepw.com.cn/article/201702/344363.htm

  Histogram equalization

  如果一幅圖像的像素灰度值在一個過於有限的範圍內聚集,那麼圖像的程序效果即會很糟糕,直接觀感就是對比度很弱。下圖來自維基百科,第一幅圖的直方圖分布非常不均衡。如果把直方圖均勻地延展到整個分布域內,則圖像的效果顯得好了很多。

    

 

  Matlab中提供了現成的函數「histeq()」來實現圖像的直方圖均衡。但為了演示說明算法的原理,下面我將在Matlab中自行編碼實現圖像的直方圖均衡。通過代碼來演示這個算法顯然更加直觀,更加易懂。當然,其實我還不得不感嘆,如果僅僅是作為圖像算法研究之用,Matlab確實非常好用。

  首先讀入圖像,並將其轉化為灰度圖。然後提取圖像的長和寬。

  image = imread('Unequalized_Hawkes_Bay_NZ.jpg');

  Img = rgb2gray(image);

  [height,width]=size(image);

  然後繪製一下原始圖像的直方圖。

  [plain] view plain copy

  [counts1, x] = imhist(Img,256);

  counts2 = counts1/height/width;

  stem(x, counts2);

    

 

  統計每個灰度的像素值累計數目。

  NumPixel = zeros(1,256);%統計各灰度數目,共256個灰度級

  for i = 1:height

  for j = 1: width

  %對應灰度值像素點數量增加一

  %因為NumPixel的下標是從1開始,但是圖像像素的取值範圍是0~255,所以用NumPixel(Img(i,j) + 1)

  NumPixel(Img(i,j) + 1) = NumPixel(Img(i,j) + 1) + 1;

  end

  end

  然後將頻數值算為頻率

  ProbPixel = zeros(1,256);

  for i = 1:256

  ProbPixel(i) = NumPixel(i) / (height * width * 1.0);

  end

  再用函數cumsum來計算cdf,並將頻率(取值範圍是0.0~1.0)映射到0~255的無符號整數。

  CumuPixel = cumsum(ProbPixel);

  CumuPixel = uint8(255 .* CumuPixel + 0.5);

  直方圖均衡。賦值語句右端,Img(i,j)被用來作為CumuPixel的索引。比如Img(i,j) = 120,則從CumuPixel中取出第120個值作為Img(i,j) 的新像素值。

  for i = 1:height

  for j = 1: width

  Img(i,j) = CumuPixel(Img(i,j));

  end

  end

  最後顯示新圖像的直方圖。

  imshow(Img);

  [counts1, x] = imhist(Img,256);

  counts2 = counts1/height/width;

  stem(x, counts2);

    

 

  當然,上述討論的是灰度圖像的直方圖均衡。對於彩色圖像而言,你可能會想到分別對R、G、B三個分量來做處理,這也確實是一種方法。但有些時候,這樣做很有可能導致結果圖像色彩失真。因此有人建議將RGB空間轉換為HSV之後,對V分量進行直方圖均衡處理以保存圖像色彩不失真。下面我們來做一些對比實驗。待處理圖像是標準的圖像處理測試用圖couple圖,如下所示。

    

 

  首先,我們分別處理R、G、B三個分量,為了簡便我們直接使用matlab中的函數histeq()。

  a = imread('couple.tiff');

  R = a(:,:,1);

  G = a(:,:,2);

  B = a(:,:,3);

  R = histeq(R, 256);

  G = histeq(G, 256);

  B = histeq(B, 256);

  a(:,:,1) = R;

  a(:,:,2) = G;

  a(:,:,3) = B;

  imshow(a)

  下面的代碼使用了另外一種方式,即將色彩空間轉換到HSV後,對V通道進行處理。由於代碼基本與前面介紹的一致,這裡我們不再做過多解釋了。

  Img = imread('couple.tiff');

  hsvImg = rgb2hsv(Img);

  V=hsvImg(:,:,3);

  [height,width]=size(V);

  V = uint8(V*255);

  NumPixel = zeros(1,256);

  for i = 1:height

  for j = 1: width

  NumPixel(V(i,j) + 1) = NumPixel(V(i,j) + 1) + 1;

  end

  end

  ProbPixel = zeros(1,256);

  for i = 1:256

  ProbPixel(i) = NumPixel(i) / (height * width * 1.0);

  end

  CumuPixel = cumsum(ProbPixel);

  CumuPixel = uint8(255 .* CumuPixel + 0.5);

  for i = 1:height

  for j = 1: width

  V(i,j) = CumuPixel(V(i,j));

  end

  end

  V = im2double(V);

  hsvImg(:,:,3) = V;

  outputImg = hsv2rgb(hsvImg);

  imshow(outputImg);

  最後,來對比一下不同方法對彩色圖像的處理效果。下面的左圖是採用R、G、B三分量分別處理得到的結果。右圖是對HSV空間下V通道處理之結果。顯然,右圖的效果更理想,而左圖則出現了一定的色彩失真。事實上,對彩色圖像進行直方圖均衡是圖像處理研究領域一個看似簡單,但是一直有人在研究的話題。我們所說的對HSV空間中V分量進行處理的方法也是比較基本的策略。很多相關的研究文章都提出了更進一步的、適應性更強的彩色圖像直方圖均衡化算法。有興趣的讀者可以參閱相關文獻以了解更多。

    

 

  分別處理R、G、B三個分量之結果 轉換到HSV空間後處理V分量

  這是本系列文章的第一篇,在下一篇文章中我們將要討論CLAHE算法,也就是限制對比度的自適應直方圖均衡算法。

相關焦點

  • 警微圈 圖像處理第五講--Retinex
    clearclose allclc%% 讀取圖像I=imread('test.jpg');figure;imshow(I);title('原圖'); m=size(I,1);n=size(I,2);% 初始化矩陣rr = zeros(m,n);
  • CLAHE算法實現圖像增強「AI工程論」
    CLAHE起到的作用簡單來說就是增強圖像的對比度的同時可以抑制噪聲CLAHE的英文是Contrast Limited Adaptive Histogram Equalization 限制對比度的自適應直方圖均衡。
  • 利用CLAHE實現低光照圖像增強
    一、Lab1.簡述 Lab彩色空間由三個要素組成,一個要素是亮度(L),a 和b是兩個顏色通道。
  • OpenCV-Python 直方圖-2:直方圖均衡|二十七
    例如,在人臉識別中,在對人臉數據進行訓練之前,對人臉圖像進行直方圖均衡化處理,使其具有相同的光照條件。OpenCV中的直方圖均衡OpenCV具有執行此操作的功能cv.equalizeHist()。它的輸入只是灰度圖像,輸出是我們的直方圖均衡圖像。
  • 【圖像增強03】基於Retinex理論的圖像增強
    基於單尺度Retinex的增強方法具體算法步驟如下:(1)計算C顏色通道的光照分量估計值ic(x,y);(2)對fc(x,y)進行對數變換處理:      (3)計算反射分量,獲得單尺度Retinex增強圖像:
  • 圖像算法工程師必備:灰度直方圖
    圖像的灰度直方圖,大概是數字圖像處理專業課接觸到的第一節講圖像具體算法的一堂課了。所謂的灰度直方圖,就是統計一個8比特的灰度圖像,其灰度等級從0到255的像素的分布情況。我們很容易就能想到,一幅圖像對應唯一的直方圖,而同一直方圖肯定會對應很多不同的圖像。
  • 一種自適應紅外圖像增強處理的FPGA實現
    但是由於受紅外探測器件的影響,紅外成像儀的成像效果還不夠理想,主要表現為圖像中的目標與背景區分不明顯、對比度低、噪聲大、信噪比低等缺點,因而紅外圖像處理首要解決的問題是圖像增強。要實現圖像的增強處理,主要有兩個途徑:一是改善探測器性能,一是在紅外圖像系統電子部分加入實時圖像處理功能。在目前條件下,加入實時圖像處理功能是快速而經濟的做法。
  • 【精彩論文推薦】西安郵電大學 王殿偉 等:基於細節特徵融合的低照度全景圖像增強
    本文在光照反射模型的基礎上,將全景圖像的對比度增強與細節增強相結合,提出了基於細節特徵加權融合的低照度全景圖像增強算法。具體步驟(見圖1)如下:1)將全景圖像從RGB色彩空間轉到HSV色彩空間,獲取圖像的亮度分量(V);2)利用雙邊濾波器對V分量進行處理,估計出全景圖像的光照分量;3)推導出三個光照輸入,輸入一為原始光照分量,輸入二與輸入三分別為對光照分量進行自適應伽馬校正與限制性直方圖均衡化的結果,提出基於像素級的細節特徵融合算法,對三個輸入進行加權融合,得到校正後的光照分量;4)對反射分量進行自適應調整,以增強圖像的細節信息
  • 【圖像基礎教程】直方圖均衡化
    一、直方圖均衡化概述  直方圖均衡化(Histogram Equalization
  • Matlab圖像增強與復原技術在SEM圖像中的應用
    圖像增強與復原是一種基本的圖像處理技術。其按照特定的需要突出一幅圖像中的某些信息或強化某些感興趣的特徵,將原來不清晰的圖片變得清晰,使之改善圖像質量和豐富信息量,提高圖像的視覺效果和圖像成分的清晰度,加強圖像判讀和識別效果的圖像處理的方法。
  • 基於STFT濾波算法的指紋圖像識別系統的設計與實現
    本文在充分調研了目前的指紋預處理和特徵提取研究成果之後,分別針對指紋增強、指紋二值化和指紋特徵提取方面提出了三個新的算法,部分解決了目前指紋識別技術面臨的問題與挑戰,並且利用這些新的算法製作了一款指紋圖像識別系統。本文通過緒論、需求分析、系統設計、系統實現、系統測試一步步介紹指紋圖像識別技術在指紋識別系統中的應用情況。
  • MATLAB比較圖像的相似度-圖像搜索算法
    關注我們獲得更多精彩內容一、圖像相似度計算相關原理通過圖片進行搜索相似圖標的算法實現是:利用感知「感知哈希算法」,就是每一張圖片都按照某種桂林生成唯一的「標識」,通過對「標識」進 比較,那麼可以判斷兩張照片是相似以及相似程度。
  • MATLAB圖像處理之圖像增強(二)
    對數變換常用來擴展低值灰度,壓縮高值灰度,這樣可以使低值灰度的圖像細節更容易看清,從而達到圖像增強的效果。我們還是重點來學習直方圖灰度變換用到的函數以及實現的代碼和達到的效果:實現函數imhist函數用來計算和顯示圖像的直方圖 imhist(I) imhist(I,n) %I代表灰度圖像,n為指定的灰度級數目,默認值為256 imhist(X,map) %X為索引圖像
  • 紅外圖像處理中平臺實時直方圖均衡器的SoC實現
    O引言  直方圖均衡是紅外圖像處理中簡單有效的一種圖像增強方法[1]。直方圖均衡器在增強目標的同時也放大了背景和噪聲信號,因此有人提出了平臺直方圖均衡算法,該算法能達到增強目標且較好地抑制背景和噪聲的目的[2,5],具有很大的應用價值。
  • 【圖像處理】基於最小誤差法的胸片分割系統
    varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});else gui_mainfcn(gui_State, varargin{:});end% End initialization code - DO NOT EDITfunction InitAxes(handles)clc;axes(handles.axes1); cla
  • 乾貨|一文讀懂圖像局部特徵點檢測算法
    我們利用橫跨邊緣的地方,在沿邊緣方向與垂直邊緣方向表現出極大與極小的主曲率這一特性。所以通過計算特徵點處主曲率的比值即可以區分其是否在邊緣上。這一點在理解上可以參見Harris角點的求法。最後一步,即為特徵點的特徵描述。特徵點的方向的求法是需要對特徵點鄰域內的點的梯度方向進行直方圖統計,選取直方圖中比重最大的方向為特徵點的主方向,還可以選擇一個輔方向。
  • 一種基於FPGA的實時紅外圖像預處理方法
    摘要:由於紅外圖像預處理算法自身的複雜性,使得紅外圖像在DSP中的預處理時間較長。針對這一問題,提出一種基於FPGA的實時紅外圖像預處理方法。
  • 醫學信號與圖像處理算法中的並行化
    ,所以即使在並行處理環境中,不進行迭代運算也是無法生成圖像的直方圖的。要利用並行處理環境進行算法優化可以考慮將輸入數據分成多個塊,讓某一個線程去處理其中一塊形成一個局部直方圖,最後歸併成一個全局直方圖。但是對於GPU平臺這個算法需要進行調整,這是因為讀取圖像數據是順序的而訪問結果直方圖數組是數據依賴的,考慮到GPU平臺的存儲器結構最優的是採用共享存儲器而非全局存儲器。GPU硬體上共享存儲器的大小為16KB,共享存儲區沒有原子操作的支持。
  • 副詞在句首倒裝的特殊情況:Here he comes還是Here comes he?
    但是對這類倒裝句,需要我們注意以下幾點:一、這些副詞一般與方向方位有關。二、謂語是表示位置移動的動詞,如come, go, fly, lie, stand等動詞或系動詞be:三、副詞在句首,謂語動詞在主語前,不添加助動詞do或be。四、如果主語不是名詞,而是人稱代詞,謂語動詞不倒裝:所以「他來了。」
  • 基於單目圖像的深度估計算法,大幅度提升基於單目圖像深度估計的精度
    基於單目圖像的深度估計算法,大幅度提升基於單目圖像深度估計的精度 李倩 發表於 2018-06-04 15:46:49 基於視覺的自動駕駛系統需要基於單目攝像頭獲取的圖像