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)載,煩請注明出處,謝謝!
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
