python opencv 直方图均衡化,自适应直方图均衡化算法
在本文中,我们将介绍如何应用对比度受限的自适应直方图均衡(CLAHE)来均衡图像,必要时可以参考。
00-1010介绍CLAHE和直方图均衡化的主要代码比较。
目录
《直方图均衡化详解》中我们已经知道了直方图均衡化的基本概念,可以使用cv2.equalizeHist()函数进行直方图均衡化。
在本节中,我们将介绍如何应用对比度受限的自适应直方图均衡化(CLAHE)来均衡图像。CLAHE是自适应直方图均衡化(AHE)的变体,但是它的对比度是有限的。图像中相对均匀区域的噪声被AHE过度放大,CLAHE通过限制对比度的增加解决了这个问题。该算法创建原始图像的多个直方图,并通过使用这些直方图来重新分配图像的亮度,以提高图像的对比度。
介绍
接下来,CLAHE应用于灰度和彩色图像。当应用CLAHE时,有两个重要的参数。第一个是clipLimit,设置对比度限制的阈值。默认值为40;第二个是tileGridSize,它设置行和列中的平铺数量。当应用CLAHE时,图像被分成称为图块的小块(默认为8 x 8)来执行计算。要将CLAHE应用于灰度图像,您需要使用以下代码:
#加载图像
image=cv2.imread(example.png )
gray_image=cv2.cvtColor(image,cv2。COLOR_BGR2GRAY)
# CLAHE应用于灰度图像。
clahe=cv2 . create clahe(clip limit=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应用于彩色图像,类似于彩色图像对比度均衡的方法,并创建四个函数来使用CLAHE仅在不同颜色空间中的亮度通道上均衡彩色图像:
def equalize _ clahe _ color _ HSV(img):
cla=cv2 . create clahe(clip limit=4.0)
h,S,V=cv2.split(cv2.cvtColor(img,cv2。COLOR_BGR2HSV))
eq_V=cla.apply(V)
eq _ image=cv2 . CVT color(cv2 . merge([H,S,eq_V]),cv2。COLOR_HSV2BGR)
返回eq_image
def equalize _ clahe _ color _ lab(img):
cla=cv2 . create clahe(clip limit=4.0)
l,a,b=cv2.split(cv2.cvtColor(img,cv2。COLOR_BGR2Lab))
eq_L=cla.apply(L)
eq _ image=cv2 . CVT color(cv2 . merge([eq _ L,a,b]),cv2。COLOR_Lab2BGR)
返回eq_image
定义均衡_cl
ahe_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)
# 其他图像的可视化方法类似,不再赘述
# ...
将所有这些函数应用于测试图像后比较结果,如下图所示:
在上图中,我们可以看到改变 clipLimit
参数在测试图像上应用 CLAHE 后的不同效果,同时也可以看到在不同颜色空间( LAB、HSV 和 YUV )的亮度通道上应用 CLAHE
后的不同结果。其中,可以看到在 BGR
图像的三个通道上应用 CLAHE
与仅在不同颜色空间的亮度通道上使用 CLAHE
的不同效果。
比较 CLAHE 和直方图均衡化
为了更好地展示 CLAHE
的效果,接下来对比 CLAHE
和直方图均衡化 (cv2.equalizeHist()
) 在同一图像上的效果,同时可视化生成的图像和生成的直方图。
image = cv2.imread(example.png)
可视化的结果如下图所示:
通过以上对比,可以肯定地说,在许多情况下,CLAHE
比应用直方图均衡化有更好的结果和性能。
到此这篇关于详解OpenCV自适应直方图均衡化的应用的文章就介绍到这了,更多相关OpenCV自适应直方图均衡化内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。