Python學(xué)習(xí)之直方圖均衡化原理詳解
1.點(diǎn)算子
點(diǎn)算子是兩個(gè)像素灰度值間的映射關(guān)系,屬于像素的逐點(diǎn)運(yùn)算,相鄰像素不參與運(yùn)算。點(diǎn)算子是最簡(jiǎn)單的圖像處理手段,如:亮度調(diào)整、對(duì)比度調(diào)整、顏色變換、直方圖均衡化等等。
2.線性灰度變換
線性灰度變換表達(dá)為:
其中rk、sk分別為輸入、輸出點(diǎn)像素灰度值。
▲圖2.1 線性灰度變換
當(dāng)a>1時(shí),輸出圖像像素灰度范圍擴(kuò)大,圖像對(duì)比度增強(qiáng),當(dāng)a<1時(shí)反之。這是因?yàn)槿搜鄄灰讌^(qū)分相近的灰度值,因此若圖像灰度值范圍較小,觀感上細(xì)節(jié)不夠清晰。當(dāng)a=1、b≠0時(shí),點(diǎn)算子使圖像灰度整體上移或下移,即整體變亮或變暗。
▲圖2.2 圖像對(duì)比度(左為弱對(duì)比度,右為強(qiáng)對(duì)比度)
3.直方圖均衡化
下圖再次給出了關(guān)于圖像對(duì)比度的例子。
▲圖3.1 圖像對(duì)比度示例
直方圖均衡化是以累計(jì)分布函數(shù)為核心,將原始圖像灰度直方圖從比較集中的某個(gè)灰度區(qū)間,非線性地映射為在全部灰度范圍內(nèi)的較均勻分布,從而增強(qiáng)對(duì)比度。
下面闡述直方圖均衡化的數(shù)學(xué)原理。首先作原始圖像灰度的概率直方圖如圖。
▲圖3.2 直方圖均衡化原理
設(shè)輸入像素灰度值為rk,累計(jì)分布函數(shù)為
其中ni為圖像中灰度值為ri的像素頻數(shù),n為圖像像素總數(shù)。設(shè)輸出像素灰度值為sk,像素范圍為smin-smax。期望輸出灰度直方圖是均勻分布,即
令C(sk)=C(rk),即得
所以最終直方圖均衡化的點(diǎn)算子為
所以最終直方圖均衡化的點(diǎn)算子為
4.代碼實(shí)戰(zhàn)
按照前文的原理編寫累積分布函數(shù)計(jì)算公式,以及均衡化算子
#?計(jì)算累計(jì)分布函數(shù) def?C(rk): ??#?讀取圖片灰度直方圖 ??#?bins為直方圖直方柱的取值向量 ??#?hist為bins各取值區(qū)間上的頻數(shù)取值 ??hist,?bins?=?np.histogram(rk,?256,?[0,?256]) ??#?計(jì)算累計(jì)分布函數(shù) ??return?hist.cumsum()
#?計(jì)算灰度均衡化映射 def?T(rk): ??cdf?=?C(rk) ??#?均衡化 ??cdf?=?(cdf?-?cdf.min())?*?(255?-?0)?/?(cdf.max()?-?cdf.min())?+?0 ??return?cdf.astype('uint8')
均衡化時(shí)直接調(diào)用函數(shù)即可,下面給出完整代碼
import?numpy?as?np import?cv2?as?cv from?matplotlib?import?pyplot?as?plt #?計(jì)算累計(jì)分布函數(shù) def?C(rk): ??#?讀取圖片灰度直方圖 ??#?bins為直方圖直方柱的取值向量 ??#?hist為bins各取值區(qū)間上的頻數(shù)取值 ??hist,?bins?=?np.histogram(rk,?256,?[0,?256]) ??#?計(jì)算累計(jì)分布函數(shù) ??return?hist.cumsum() #?計(jì)算灰度均衡化映射 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ù)字圖像矩陣轉(zhuǎn)變?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學(xué)習(xí)之直方圖均衡化原理詳解的詳細(xì)內(nèi)容,更多關(guān)于Python直方圖均衡化的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
深入解析Python中的descriptor描述器的作用及用法
在Python中描述器也被稱為描述符,描述器能夠?qū)崿F(xiàn)對(duì)對(duì)象屬性的訪問(wèn)控制,下面我們就來(lái)深入解析Python中的descriptor描述器的作用及用法2016-06-06一篇文章教你用Python實(shí)現(xiàn)一鍵文件重命名
這篇文章主要介紹了如何用python一鍵文件重命名,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09Selenium 模擬瀏覽器動(dòng)態(tài)加載頁(yè)面的實(shí)現(xiàn)方法
這篇文章主要介紹了Selenium 模擬瀏覽器動(dòng)態(tài)加載頁(yè)面的實(shí)現(xiàn)方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-05-05Python使用ffmpy將amr格式的音頻轉(zhuǎn)化為mp3格式的例子
今天小編就為大家分享一篇Python使用ffmpy將amr格式的音頻轉(zhuǎn)化為mp3格式的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08python用opencv將標(biāo)注提取畫框到對(duì)應(yīng)的圖像中
這篇文章主要介紹了python用opencv將標(biāo)注提取畫框到對(duì)應(yīng)的圖像中,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-08-08Python matplotlib繪圖建立畫布及坐標(biāo)系
這篇文章主要介紹了Python matplotlib繪圖建立畫布及坐標(biāo)系,建立畫布 figsize,它用width和height來(lái)控制畫布的寬和高,下面來(lái)一起倆姐更多內(nèi)容吧2021-12-12Pandas之排序函數(shù)sort_values()的實(shí)現(xiàn)
這篇文章主要介紹了Pandas之排序函數(shù)sort_values()的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07Pytorch 實(shí)現(xiàn)自定義參數(shù)層的例子
今天小編就為大家發(fā)信息一篇Pytorch 實(shí)現(xiàn)自定義參數(shù)層的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08