第3章 Python 数字图像处理(DIP) - 灰度变换与空间滤波10 - 直方图处理 - 局部直方图处理
生活随笔
收集整理的這篇文章主要介紹了
第3章 Python 数字图像处理(DIP) - 灰度变换与空间滤波10 - 直方图处理 - 局部直方图处理
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
這里寫目錄標題
- 局部直方圖處理
局部直方圖處理
因為像素是由基于整個圖像的灰度的變換函數修改的。這種全局性方法適合于整體增強,但當目的是增強圖像中幾個小區域的細節時,通常就會失敗。這是因為在這些小區域中,像素的數量對計算全局變換的影響可以忽略。解決方法是設計基于像素鄰域的灰度分布的變換函數。
# opencv實現的局部直方圖處理 img_ori = cv2.imread('DIP_Figures/DIP3E_Original_Images_CH03/Fig0326(a)(embedded_square_noisy_512).tif', 0) img_transform, _= my_calhist(img_ori) # img_transform = cv2.equalizeHist(img_ori)plt.figure(figsize=(15, 6)) plt.subplot(1, 3, 1), plt.imshow(img_ori, cmap='gray', vmin=0, vmax=255), plt.title('Original') plt.subplot(1, 3, 2), plt.imshow(img_transform, cmap='gray', vmin=0, vmax=255), plt.title(f'Global Equalize Hist')clahe = cv2.createCLAHE(clipLimit=255, tileGridSize=(3, 3)) img_transform = clahe.apply(img_ori)plt.subplot(1, 3, 3), plt.imshow(img_transform, cmap='gray', vmin=0, vmax=255), plt.title(f'Local Equalize Hist') plt.tight_layout() plt.show() def my_calhist_local(img):"""histogram equalizationparam: input img: uint8[0, 255] grayscale imagereturn uint8[0, 255] grayscale image after histogram equalization""" # hist, bins = my_hist(img, bins=256, normalized=True) #局部直方圖的時候這個比較慢,改為了下面的Numpy,效果快好多hist, bins = np.histogram(img, bins=256, range=[0, 256], density=True)#--------------------------------Numpy-------------------hist_cumsum = np.round(np.cumsum(hist) * 255).astype(int)img_dst = hist_cumsum[img]return img_dstdef local_calhist(img_ori, grid_size=(3, 3)):"""Local histogram equalizationparam: input img_ori: input uint8[0, 255] grayscale imageparam: input grid_size: grid size of the local hist, size need to be uneven number like 1, 3, 5return local histogram equalization of image uint8[0, 255]"""height, width = img_ori.shapeimg_dst = img_ori.copy()m = grid_size[0]n = grid_size[1]padding_h = int((m - 1) / 2)padding_w = int((n - 1) / 2)img_pad = np.pad(img_ori.copy(), (padding_h, padding_w), mode='constant', constant_values=0)for h in range(padding_h, height + padding_h):for w in range(padding_w, width + padding_w):temp = my_calhist_local(img_pad[h-padding_h:h+padding_h+1, w-padding_w:w+padding_w+1])img_dst[h:h+1, w:w+1] = temp[padding_h, padding_w]return img_dst # Numpy實現的局部直方圖處理,效果比opencv好 img_ori = cv2.imread('DIP_Figures/DIP3E_Original_Images_CH03/Fig0326(a)(embedded_square_noisy_512).tif', 0)# global histogram equalization img_global = my_calhist_local(img_ori)# local histogram equalization img_local = local_calhist(img_ori, grid_size=(3, 3))plt.figure(figsize=(15, 6)) plt.subplot(1, 3, 1), plt.imshow(img_ori, cmap='gray', vmin=0, vmax=255), plt.title('Original') plt.subplot(1, 3, 2), plt.imshow(img_global, cmap='gray', vmin=0, vmax=255), plt.title(f'Global Equalize Hist') plt.subplot(1, 3, 3), plt.imshow(img_local, cmap='gray', vmin=0, vmax=255), plt.title(f'Local Equalize Hist') plt.tight_layout() plt.show()總結
以上是生活随笔為你收集整理的第3章 Python 数字图像处理(DIP) - 灰度变换与空间滤波10 - 直方图处理 - 局部直方图处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Json对象的字符串转换
- 下一篇: 第3章 Python 数字图像处理(DI