目錄
1. 引言
2. 算法流程
3. 代碼
4. 去霧效果
1. 引言
????????局部直方圖算法是一種基于塊的圖像去霧方法,它將圖像分割為若干個塊,并在每個塊內計算塊的局部直方圖。通過對各個塊的直方圖進行分析和處理,該算法能夠更好地適應圖像中不同區域的光度差異和霧霾密度變化,從而提高去霧效果。然而,局部直方圖算法在處理邊緣區域和細節豐富的區域時存在一定的挑戰,容易導致邊緣銳化和細節損失。
????????局部直方圖算法是在全局直方圖算法的基礎上進行改進而成的。該算法通過將圖像劃分為多個局部區域,并對每個局部區域進行直方圖分析,從而實現對圖像的局部去霧處理。與全局直方圖算法相比,局部直方圖算法更能夠保留圖像的細節信息,并在復雜場景下取得更好的去霧效果。但該算法的計算復雜度相對較高,對計算資源的要求也較大。
2. 算法流程
????????1.首先,將原始圖像劃分為多個重春的滑動窗口,窗口的尺寸可以根據需要進行選擇。
????????2.對于每個窗口,分別對其RGB通道進行直方圖均衡化,通過增加像素值的分布范圍來增強圖像的對比度。
????????3.將經過局部直方圖均衡化處理后的每個窗口重新整合到新的圖像中,得到一張經過局部直方圖均衡化去霧處理后的圖像。
3. 代碼
import cv2
import numpy as npdef clahe_dehaze(img, clip_limit=2.0, tile_grid_size=(8, 8)):# 轉換為YCrCb色彩空間ycrcb = cv2.cvtColor(img, cv2.COLOR_BGR2YCrCb)# 分離通道channels = list(cv2.split(ycrcb))# 創建CLAHE對象clahe = cv2.createCLAHE(clipLimit=clip_limit, tileGridSize=tile_grid_size)# 對Y通道進行CLAHEchannels[0] = clahe.apply(channels[0])# 合并通道ycrcb = cv2.merge(channels)# 轉換回BGR色彩空間result = cv2.cvtColor(ycrcb, cv2.COLOR_YCrCb2BGR)return result# 讀取圖像
im = cv2.imread('xue_foggy.png')
if im is None:raise FileNotFoundError("The image file was not found. Please check the path.")# 使用CLAHE進行圖像去霧
eq = clahe_dehaze(im)# 顯示原始圖像和處理后的圖像
cv2.imshow('Original Image', im)
cv2.imshow('CLAHE Dehazed Image', eq)
cv2.waitKey(0)
cv2.destroyAllWindows()# 保存處理后的圖像
cv2.imwrite('img_clahe_dehazed.png', eq)
4. 去霧效果
????????從效果對比圖看出局部直方圖均衡化算法可以顯著改善霧天圖像的對比度,提升視覺效果。通過對圖像的局部區域應用直方圖均衡化,能夠有效處理不同區域的對比度變化。