1.2 理論基礎(chǔ)
1.2.1 空域圖像增強
根據(jù)圖像處理空間的不同, 圖像增強基本上可分為兩大類: 頻域處理法, 空域處理法.
頻域處理法的基礎(chǔ)是卷積定理, 其通過進行某種圖像變換(如傅里葉變換, 小波變換等)得到頻域結(jié)果并進行修改的方法來實現(xiàn)圖像的增強處理.
空域處理法是直接對圖像中的像素進行處理, 一般是以圖像灰度映射變換為基礎(chǔ)并且根據(jù)圖像增強的目標來采用所需的映射變換, 常見的圖像對比度增強, 圖像的灰度層次優(yōu)化等處理均屬于空域處理法.
本案例主要介紹空域的直方圖增強算法.
1.2.2 直方圖均衡化
直方圖是圖像的一種統(tǒng)計表達形式, 對于一幅灰度圖像來說, 其灰度統(tǒng)計直方圖可以反映該圖像中不同灰度級出現(xiàn)的統(tǒng)計情況. 一般而言, 圖像的視覺效果和其直方圖有對應(yīng)關(guān)系, 通過調(diào)整或變換其直方圖的形狀會對圖像顯示效果有很大影響.
直方圖均衡化主要用于增強灰度值動態(tài)范圍偏小的圖像的對比度. 該方法的基本思想是把原始圖像的灰度統(tǒng)計直方圖變換為均勻分布的形式, 這樣就增加了像素灰度值的動態(tài)范圍, 從而達到增強圖像整體對比度的效果.
數(shù)值圖像是離散化的矩陣, 其直方圖可以被視為一個離散函數(shù), 它表示數(shù)字圖像中每一灰度級與其出現(xiàn)概率間的統(tǒng)計關(guān)系. 假設(shè)一幅數(shù)字圖像 的像素總數(shù)為N, 表示第k個灰度級對應(yīng)的灰度, 表示灰度為 的像素個數(shù)即頻數(shù), 用橫坐標表示灰度級, 縱坐標表示頻數(shù), 則直方圖可定義為 , 其中, 表示灰度出現(xiàn)的頻率. 直方圖在一定程度上能夠反映數(shù)字圖像的概述, 包括圖像的灰度范圍, 灰度分布, 整幅圖的亮度均值和疑難對比度等, 并可以此為基礎(chǔ)進行分析來得出對圖像進一步處理的重要依據(jù).
直方圖均衡化就是把給定圖像的直方圖分布變換成均勻分布的直方圖, 是一種較為常用的灰度增強算法. 有三個主要步驟:
- 預處理, 輸入圖像, 計算該圖像直方圖
- 灰度變換表, 根據(jù)輸入圖像的直方圖計算灰度值變換表
- 查表變換, 執(zhí)行變換, 表示對步驟1得到的直方圖使用步驟2得到的灰度值變換表進行查表變換操作, 通過遍歷整幅圖像的每一個像元, 將原始圖像的灰度值x放入變換表中, 可得到變換后的新灰度值
假設(shè)圖像有n級灰度, 其第i級灰度出現(xiàn)的概率為, 則該級灰度所含的信息量為:
整幅圖像的信息量為:
信息論已經(jīng)證明, 具有均勻分布直方圖的圖像, 其信息量H最大, 即當時, (1.2)式有最大值.
代碼
彩色圖片直方圖均衡化
import cv2
import numpy as np
img = cv2.imread("image0.jpg", 1)
cv2.imshow("src", img)
# 彩色圖像均衡化,需要分解通道 對每一個通道均衡化
(b, g, r) = cv2.split(img)
bH = cv2.equalizeHist(b)
gH = cv2.equalizeHist(g)
rH = cv2.equalizeHist(r)
# 合并每一個通道
result = cv2.merge((bH, gH, rH))
cv2.imshow("dst", result)
cv2.waitKey(0)
YUV直方圖均衡化
import cv2
import numpy as np
img = cv2.imread("image0.jpg", 1)
imgYUV = cv2.cvtColor(img, cv2.COLOR_BGR2YCrCb)
cv2.imshow("src", img)
channelsYUV = cv2.split(imgYUV)
channelsYUV[0] = cv2.equalizeHist(channelsYUV[0])
channels = cv2.merge(channelsYUV)
result = cv2.cvtColor(channels, cv2.COLOR_YCrCb2BGR)
cv2.imshow("dst", result)
cv2.waitKey(0)