Python中的直方圖規定化是一種基于圖像處理的技術,常常用于將一張圖像的像素值分布規定為具有相似分布的另一張圖像。
以下是一個簡單的Python代碼示例,在使用前請確保已經安裝了numpy和cv2庫:
import cv2 import numpy as np # 讀取原始圖像 img1 = cv2.imread('img1.png', 0) img2 = cv2.imread('img2.png', 0) # 計算直方圖 hist1, bins1 = np.histogram(img1.flatten(), 256, [0, 256]) hist2, bins2 = np.histogram(img2.flatten(), 256, [0, 256]) # 計算累計分布函數 cdf1 = hist1.cumsum() cdf2 = hist2.cumsum() # 歸一化直方圖 cdf1 = (cdf1 - cdf1.min()) * 255 / (cdf1.max() - cdf1.min()) cdf2 = (cdf2 - cdf2.min()) * 255 / (cdf2.max() - cdf2.min()) # 將灰度級分配到新圖像中 img3 = np.interp(img1.flatten(), bins1[:-1], cdf1).reshape(img1.shape) img4 = np.interp(img2.flatten(), bins2[:-1], cdf2).reshape(img2.shape) # 顯示結果 cv2.imshow("img1", img1) cv2.imshow("img2", img2) cv2.imshow("img3", img3.astype(np.uint8)) cv2.imshow("img4", img4.astype(np.uint8)) cv2.waitKey(0) cv2.destroyAllWindows()
代碼中首先讀取了兩張原始的灰度圖像img1和img2,并分別計算它們的直方圖hist1和hist2。然后通過對直方圖進行累計分布函數的計算,將灰度級分配到新的像素值中,并映射到新的圖像img3和img4中。最后通過cv2.imshow()函數將結果展示出來。