欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解OpenCV自適應直方圖均衡化的應用

 更新時間:2022年02月08日 10:58:21   作者:盼小輝丶  
在本文中,將介紹如何應用對比度受限的自適應直方圖均衡化 ( Contrast Limited Adaptive Histogram Equalization, CLAHE ) 來均衡圖像,需要的可以參考一下

介紹

《直方圖均衡化詳解》中,我們已經(jīng)了解的直方圖均衡化的基本概念,并且可以使用 cv2.equalizeHist() 函數(shù)執(zhí)行直方圖均衡。

在本節(jié)中,將介紹如何應用對比度受限的自適應直方圖均衡化 ( Contrast Limited Adaptive Histogram Equalization, CLAHE ) 來均衡圖像,CLAHE 是自適應直方圖均衡化( Adaptive Histogram Equalization, AHE )的一種變體,區(qū)別在于其對比度的增大是受限的。圖像相對均勻區(qū)域中的噪聲被 AHE 過度放大,而 CLAHE 通過限制對比度增大來解決這個問題。該算法通過創(chuàng)建原始圖像的多個直方圖,并使用這些直方圖來重新分配圖像的亮度,用于提高圖像的對比度。

主要代碼

接下來,將 CLAHE 應用于灰度和彩色圖像。應用 CLAHE 時,有兩個重要參數(shù),第一個是 clipLimit,它設置對比度限制的閾值,默認值為 40;第二個是 tileGridSize ,它設置行和列中的 tiles 數(shù)量。應用 CLAHE 時,圖像被分成稱為 tiles (默認為 8 x 8 )的小塊以執(zhí)行其計算。 將 CLAHE 應用于灰度圖像,需要使用以下代碼:

# 加載圖像
image = cv2.imread('example.png')
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 灰度圖像應用 CLAHE
clahe = cv2.createCLAHE(clipLimit=2.0)
gray_image_clahe = clahe.apply(gray_image)
# 使用不同 clipLimit 值
clahe.setClipLimit(5.0)
gray_image_clahe_2 = clahe.apply(gray_image)
clahe.setClipLimit(10.0)
gray_image_clahe_3 = clahe.apply(gray_image)
clahe.setClipLimit(20.0)
gray_image_clahe_4 = clahe.apply(gray_image)

然后,我們將 CLAHE 應用于彩色圖像,類似于彩色圖像對比度均衡的方法,創(chuàng)建四個函數(shù)以僅在不同顏色空間的亮度通道上使用 CLAHE 來均衡化彩色圖像:

def equalize_clahe_color_hsv(img):
    cla = cv2.createCLAHE(clipLimit=4.0)
    H, S, V = cv2.split(cv2.cvtColor(img, cv2.COLOR_BGR2HSV))
    eq_V = cla.apply(V)
    eq_image = cv2.cvtColor(cv2.merge([H, S, eq_V]), cv2.COLOR_HSV2BGR)
    return eq_image

def equalize_clahe_color_lab(img):
    cla = cv2.createCLAHE(clipLimit=4.0)
    L, a, b = cv2.split(cv2.cvtColor(img, cv2.COLOR_BGR2Lab))
    eq_L = cla.apply(L)
    eq_image = cv2.cvtColor(cv2.merge([eq_L, a, b]), cv2.COLOR_Lab2BGR)
    return eq_image

def equalize_clahe_color_yuv(img):
    cla = cv2.createCLAHE(clipLimit=4.0)
    Y, U, V = cv2.split(cv2.cvtColor(img, cv2.COLOR_BGR2YUV))
    eq_Y = cla.apply(Y)
    eq_image = cv2.cvtColor(cv2.merge([eq_Y, U, V]), cv2.COLOR_YUV2BGR)
    return eq_image

def equalize_clahe_color(img):
    cla = cv2.createCLAHE(clipLimit=4.0)
    channels = cv2.split(img)
    eq_channels = []
    for ch in channels:
        eq_channels.append(cla.apply(ch))
    eq_image = cv2.merge(eq_channels)
    return eq_image
# 彩色圖像應用 CLAHE
image_clahe_color = equalize_clahe_color(image)
image_clahe_color_lab = equalize_clahe_color_lab(image)
image_clahe_color_hsv = equalize_clahe_color_hsv(image)
image_clahe_color_yuv = equalize_clahe_color_yuv(image)

# 可視化
show_img_with_matplotlib(cv2.cvtColor(gray_image, cv2.COLOR_GRAY2BGR), "gray", 1)
show_img_with_matplotlib(cv2.cvtColor(gray_image_clahe, cv2.COLOR_GRAY2BGR), "gray CLAHE clipLimit=2.0", 2)
show_img_with_matplotlib(cv2.cvtColor(gray_image_clahe_2, cv2.COLOR_GRAY2BGR), "gray CLAHE clipLimit=5.0", 3)
# 其他圖像的可視化方法類似,不再贅述
# ...

將所有這些函數(shù)應用于測試圖像后比較結果,如下圖所示:

在上圖中,我們可以看到改變 clipLimit 參數(shù)在測試圖像上應用 CLAHE 后的不同效果,同時也可以看到在不同顏色空間( LAB、HSV 和 YUV )的亮度通道上應用 CLAHE 后的不同結果。其中,可以看到在 BGR 圖像的三個通道上應用 CLAHE 與僅在不同顏色空間的亮度通道上使用 CLAHE 的不同效果。

比較 CLAHE 和直方圖均衡化

為了更好地展示 CLAHE 的效果,接下來對比 CLAHE 和直方圖均衡化 (cv2.equalizeHist()) 在同一圖像上的效果,同時可視化生成的圖像和生成的直方圖。

image = cv2.imread('example.png')
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

hist = cv2.calcHist([gray_image], [0], None, [256], [0, 256])
# 直方圖均衡化
gray_image_eq = cv2.equalizeHist(gray_image)
# 計算直方圖
hist_eq = cv2.calcHist([gray_image_eq], [0], None, [256], [0, 256])
# 創(chuàng)建 clahe:
clahe = cv2.createCLAHE(clipLimit=4.0)
# 在灰度圖像上應用 clahe
gray_image_clahe = clahe.apply(gray_image)
# 計算直方圖
hist_clahe = cv2.calcHist([gray_image_clahe], [0], None, [256], [0, 256])

可視化的結果如下圖所示:

通過以上對比,可以肯定地說,在許多情況下,CLAHE 比應用直方圖均衡化有更好的結果和性能。

到此這篇關于詳解OpenCV自適應直方圖均衡化的應用的文章就介紹到這了,更多相關OpenCV自適應直方圖均衡化內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論