OpenCV 4.12.0
開源計算機視覺
載入中...
搜尋中...
無匹配項
直方圖均衡化

上一個教程: 仿射變換
下一個教程: 直方圖計算

原始作者Ana Huamán
相容性OpenCV >= 3.0

目標

在本教程中,您將學習

  • 什麼是影像直方圖以及它為什麼有用
  • 透過使用 OpenCV 函式 cv::equalizeHist 來均衡影像的直方圖

理論

什麼是影像直方圖?

  • 它是影像強度分佈的圖形表示。
  • 它量化了每個強度值的畫素數量。

什麼是直方圖均衡化?

  • 它是一種改善影像對比度的方法,目的是拉伸強度範圍(另請參閱相應的 Wikipedia 條目)。
  • 為了更清楚地說明,從上面的影像中,您可以看到畫素似乎聚集在可用強度範圍的中間。直方圖均衡化所做的是拉伸這個範圍。看一下下圖:綠色圓圈表示未充分填充的強度。應用均衡化後,我們得到了像中心圖中那樣的直方圖。結果影像顯示在右側的圖片中。

它是如何工作的?

  • 均衡化意味著對映一種分佈(給定的直方圖)到另一種分佈(更寬且更均勻的強度值分佈),以便強度值分佈在整個範圍內。
  • 為了實現均衡化效果,重對映應該是累積分佈函式 (cdf)(更多細節,請參考Learning OpenCV)。對於直方圖 \(H(i)\),它的累積分佈 \(H^{'}(i)\) 是

    \[H^{'}(i) = \sum_{0 \le j < i} H(j)\]

    要將此用作重對映函式,我們必須對 \(H^{'}(i)\) 進行歸一化,使其最大值為 255(或影像強度的最大值)。從上面的例子中,累積函式是

  • 最後,我們使用一個簡單的重對映程式來獲得均衡影像的強度值

    \[equalized( x, y ) = H^{'}( src(x,y) )\]

程式碼

  • 此程式的作用是什麼?
    • 載入影像
    • 將原始影像轉換為灰度圖
    • 透過使用 OpenCV 函式 cv::equalizeHist 來均衡直方圖
    • 在視窗中顯示源影像和均衡化後的影像。

說明

  • 載入源影像

  • 將其轉換為灰度圖

  • 使用函式 cv::equalizeHist 應用直方圖均衡化

    正如很容易看到的,唯一的引數是原始影像和輸出(均衡化)影像。

  • 顯示兩張影像(原始影像和均衡化後的影像)

  • 等待使用者退出程式

結果

  1. 為了更好地欣賞均衡化的結果,讓我們引入一張對比度不高的影像,例如

順便說一句,它有這樣的直方圖

請注意,畫素聚集在直方圖的中心附近。

  1. 在使用我們的程式應用均衡化後,我們得到這樣的結果

這張影像肯定具有更高的對比度。像這樣檢查一下它的新直方圖

請注意,畫素的數量如何更均勻地分佈在強度範圍內。

注意
您是否想知道我們是如何繪製上面顯示的直方圖的?檢視以下教程!