Python學習之直方圖均衡化原理詳解
1.點算子
點算子是兩個像素灰度值間的映射關系,屬于像素的逐點運算,相鄰像素不參與運算。點算子是最簡單的圖像處理手段,如:亮度調整、對比度調整、顏色變換、直方圖均衡化等等。
2.線性灰度變換
線性灰度變換表達為:

其中rk、sk分別為輸入、輸出點像素灰度值。

▲圖2.1 線性灰度變換
當a>1時,輸出圖像像素灰度范圍擴大,圖像對比度增強,當a<1時反之。這是因為人眼不易區(qū)分相近的灰度值,因此若圖像灰度值范圍較小,觀感上細節(jié)不夠清晰。當a=1、b≠0時,點算子使圖像灰度整體上移或下移,即整體變亮或變暗。

▲圖2.2 圖像對比度(左為弱對比度,右為強對比度)
3.直方圖均衡化
下圖再次給出了關于圖像對比度的例子。

▲圖3.1 圖像對比度示例
直方圖均衡化是以累計分布函數(shù)為核心,將原始圖像灰度直方圖從比較集中的某個灰度區(qū)間,非線性地映射為在全部灰度范圍內的較均勻分布,從而增強對比度。
下面闡述直方圖均衡化的數(shù)學原理。首先作原始圖像灰度的概率直方圖如圖。

▲圖3.2 直方圖均衡化原理
設輸入像素灰度值為rk,累計分布函數(shù)為

其中ni為圖像中灰度值為ri的像素頻數(shù),n為圖像像素總數(shù)。設輸出像素灰度值為sk,像素范圍為smin-smax。期望輸出灰度直方圖是均勻分布,即

令C(sk)=C(rk),即得
所以最終直方圖均衡化的點算子為


所以最終直方圖均衡化的點算子為

4.代碼實戰(zhàn)
按照前文的原理編寫累積分布函數(shù)計算公式,以及均衡化算子
#?計算累計分布函數(shù) def?C(rk): ??#?讀取圖片灰度直方圖 ??#?bins為直方圖直方柱的取值向量 ??#?hist為bins各取值區(qū)間上的頻數(shù)取值 ??hist,?bins?=?np.histogram(rk,?256,?[0,?256]) ??#?計算累計分布函數(shù) ??return?hist.cumsum()
#?計算灰度均衡化映射
def?T(rk):
??cdf?=?C(rk)
??#?均衡化
??cdf?=?(cdf?-?cdf.min())?*?(255?-?0)?/?(cdf.max()?-?cdf.min())?+?0
??return?cdf.astype('uint8')
均衡化時直接調用函數(shù)即可,下面給出完整代碼
import?numpy?as?np
import?cv2?as?cv
from?matplotlib?import?pyplot?as?plt
#?計算累計分布函數(shù)
def?C(rk):
??#?讀取圖片灰度直方圖
??#?bins為直方圖直方柱的取值向量
??#?hist為bins各取值區(qū)間上的頻數(shù)取值
??hist,?bins?=?np.histogram(rk,?256,?[0,?256])
??#?計算累計分布函數(shù)
??return?hist.cumsum()
#?計算灰度均衡化映射
def?T(rk):
??cdf?=?C(rk)
??#?均衡化
??cdf?=?(cdf?-?cdf.min())?*?(255?-?0)?/?(cdf.max()?-?cdf.min())?+?0
??return?cdf.astype('uint8')
#?讀取圖片
img?=?cv.imread('1.png',?0)
#?將二維數(shù)字圖像矩陣轉變?yōu)橐痪S向量
rk?=?img.flatten()
#?原始圖像灰度直方圖
plt.hist(rk,?256,?[0,?255],?color?=?'r')
cv.imshow("原圖像",img)
#?直方圖均衡化
imgDst?=?T(rk)[img]
cv.imshow("直方圖均衡化后的圖像",imgDst)
plt.hist(imgDst.flatten(),?256,?[0,?255],?color?=?'b')
plt.show()
看看效果:

▲圖4.1 直方圖均衡化效果(灰度直方圖)

▲圖4.2 均衡化前

▲圖4.3 均衡化后
以上就是Python學習之直方圖均衡化原理詳解的詳細內容,更多關于Python直方圖均衡化的資料請關注腳本之家其它相關文章!
相關文章
Python?pywin32實現(xiàn)word與Excel的處理
這篇文章主要介紹了Python?pywin32實現(xiàn)word與Excel的處理,pywin32處理Word大多數(shù)用于格式轉換,因為一般讀寫操作都可以借助python-docx實現(xiàn),除非真的有特殊要求,但大部分企業(yè)對Wrod操作不會有太多復雜需求2022-08-08
深度Q網(wǎng)絡DQN(Deep Q-Network)強化學習的原理與實戰(zhàn)
深度Q學習將深度神經(jīng)網(wǎng)絡與強化學習相結合,解決了傳統(tǒng)Q學習在高維狀態(tài)空間下的局限性,通過經(jīng)驗回放和目標網(wǎng)絡等技術,DQN能夠在復雜環(huán)境中學習有效的策略,本文通過CartPole環(huán)境的完整實現(xiàn),展示了DQN的核心思想和實現(xiàn)細節(jié)2025-04-04

