Python實現(xiàn)直方圖均衡基本原理解析
1. 基本原理
通過一個變換,將輸入圖像的灰度級轉(zhuǎn)換為`均勻分布`,變換后的灰度級的概率密度函數(shù)為
$$P_s(s) = \frac{1}{L-1}$$
直方圖均衡的變換為
$$s = T(r) = (L-1)\int_0^r {P_r(c)} \,{\rm d}c $$
$s$為變換后的灰度級,$r$為變換前的灰度級$P_r(r)$為變換前的概率密度函數(shù)2. 測試結(jié)果
圖源自skimage
3.代碼
import numpy as np def hist_equalization(input_image): ''' 直方圖均衡(適用于灰度圖) :param input_image: 原圖像 :return: 均衡后的圖像 ''' output_imgae = np.copy(input_image) # 輸出圖像,初始化為輸入 input_image_cp = np.copy(input_image) # 輸入圖像的副本 m, n = input_image_cp.shape # 輸入圖像的尺寸(行、列) pixels_total_num = m * n # 輸入圖像的像素點總數(shù) input_image_grayscale_P = [] # 輸入圖像中各灰度級出現(xiàn)的概率,亦即輸入圖像直方圖 # 求輸入圖像中各灰度級出現(xiàn)的概率,亦即輸入圖像直方圖 for i in range(256): input_image_grayscale_P.append(np.sum(input_image_cp == i) / pixels_total_num) # 求解輸出圖像 t = 0 # 輸入圖像的灰度級分布函數(shù)F for i in range(256): t = t + input_image_grayscale_P[i] output_imgae[np.where(input_image_cp == i)] = 255 * t return output_imgae
4. 數(shù)學證明目標變換
- $$S = T(r) = (L-1)\int_0^rp_r(w)dw$$
- $T(r)$為嚴格單調(diào)函數(shù),可保證反映射時,消除二義性$p_r(w)$為源圖像歸一化后的直方圖
4.1 假定
- 圖像灰度級為:$[0, L-1]$
- 源圖像中,$k$灰度級的像素個數(shù):$n_k$
- 源圖像像素總數(shù):$n$原圖像直方
- 圖$h(r_k) = n$4.2 歸一化后的直方圖
$$p(r_k) = n_k / n$$
$p(r_k)$即為灰度級$r_k$在源圖像中出現(xiàn)的概率估計
4.3 證明
概率密度函數(shù)的積分為分布函數(shù),即對分布函數(shù)的導數(shù)為概率密度函數(shù)。
因為$p_r(r)$與$T(r)$已知,則由
$$\frac{{\rm d}r}{{\rm d}S} = \frac{p_s(s)}{p_r(r)}$$
又因為
$$S = T(r)$$
即
$$\frac{{\rm d}S}{{\rm d}r} = \frac{T(r)}{r}$$
聯(lián)立上三式及目標變換
$$S = T(r) = (L-1)\int_0^rp_r(w)dw$$
可得
$$p_s(s) = \frac{1}{L-1}$$
故,這意味著變換之后的圖像的灰度級為均勻分布,證畢。
總結(jié)
以上所述是小編給大家介紹的Python實現(xiàn)直方圖均衡基本原理解析,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!
相關文章
Python3和pyqt5實現(xiàn)控件數(shù)據(jù)動態(tài)顯示方式
今天小編就為大家分享一篇Python3和pyqt5實現(xiàn)控件數(shù)據(jù)動態(tài)顯示方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12Python實現(xiàn)動態(tài)生成系統(tǒng)數(shù)據(jù)庫設計到Word文檔
這篇文章主要為大家詳細介紹了如何利用Python實現(xiàn)填寫相關數(shù)據(jù)庫信息后,生成系統(tǒng)數(shù)據(jù)庫設計到word文檔,文中示例代碼講解詳細,感興趣的小伙伴可以了解一下2023-06-06如何用Python 實現(xiàn)全連接神經(jīng)網(wǎng)絡(Multi-layer Perceptron)
這篇文章主要介紹了如何用Python 實現(xiàn)全連接神經(jīng)網(wǎng)絡(Multi-layer Perceptron),幫助大家更好的進行機器學習,感興趣的朋友可以了解下2020-10-10python查找特定名稱文件并按序號、文件名分行打印輸出的方法
這篇文章主要介紹了python查找特定名稱文件并按序號、文件名分行打印輸出的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-04-04