一. 直方圖歸一化
? ? ? ? 有些灰度圖像的像素并沒(méi)有分布在 [0,255] 內(nèi)哟绊,而是分布在 [0,255] 的子區(qū)間內(nèi)。這樣的圖像肉眼看上去往往不是很清晰痰憎。我們可以通過(guò)直方圖歸一化的方式票髓,將它的像素分布從 [0,255] 的子區(qū)間變?yōu)?[0,255] 范圍內(nèi)。通過(guò)這樣的方式铣耘,往往可以增加圖像的清晰度洽沟。
? ? ? ? 這種歸一化直方圖的操作被稱(chēng)為灰度變換(Grayscale Transformation)。像素點(diǎn)的取值范圍從 [c,d] 轉(zhuǎn)換到 [a,b] 的算法如下:
二. 實(shí)驗(yàn):將一張灰度范圍為 [10,160] 的圖像進(jìn)行直方圖歸一化蜗细,使其灰度范圍為 [0,255]
import cv2
import numpy as np
import matplotlib.pyplot as plt
# histogram normalization
def hist_normalization(img, a=0, b=255):
????????# get max and min
????????c = img.min()
????????d = img.max()
????????out = img.copy()
????????# normalization
????????out = (b-a) / (d - c) * (out - c) + a
????????out[out < a] = a
????????out[out > b] = b
????????out = out.astype(np.uint8)
????????return out
# Read image
img = cv2.imread("../head_g_n.jpg",0).astype(np.float)
# histogram normalization
out = hist_normalization(img)
# Display histogram
plt.hist(out.ravel(), bins=255, rwidth=0.8, range=(0, 255))
plt.savefig("out_his.jpg")
plt.show()
# Save result
cv2.imshow("result", out)
cv2.imwrite("out.jpg", out)
cv2.waitKey(0)
cv2.destroyAllWindows()
三. 實(shí)驗(yàn)結(jié)果及分析
????????可以看到裆操,我們將灰度范圍為 [10,160] 的圖像進(jìn)行直方圖歸一化到 [0,255] 后怒详,圖像的清晰度顯著增強(qiáng)。
四. 參考內(nèi)容:
????????https://www.cnblogs.com/wojianxin/p/12509686.html
? ??????https://blog.csdn.net/Ibelievesunshine/article/details/104918524