CLAHE算法在图像处理中的应用与直方图对比度

版权申诉
5星 · 超过95%的资源 2 下载量 100 浏览量 更新于2024-12-02 收藏 2KB ZIP 举报
它主要用于增强局部区域的对比度,同时避免产生过增强的噪声。该算法首先将输入图像划分为若干个不重叠的区域,并对每个区域分别进行直方图均衡化处理。接着,为了避免区域之间的对比度不连贯,CLAHE算法采用了一种限制对比度的方法,并在每个区域的边界处进行插值,以消除可能出现的边缘效应。 对比传统的全局直方图均衡化方法,CLAHE有以下几个显著特点: 1. 局部对比度增强:CLAHE对图像的局部区域进行操作,增强了这些区域内的细节,使得图像的局部特征更为明显。 2. 对比度限制:为了减少噪声的过增强,CLAHE算法引入了一个对比度限制参数。当局部直方图的对比度过高时,通过限制对比度的上限来避免噪声的放大。 3. 插值处理:为了处理不同区域之间的平滑过渡,CLAHE在处理完各个区域后,会使用插值方法来消除区域边界处可能出现的不连续性,改善视觉效果。 CLAHE算法在多种图像处理领域有着广泛的应用,例如医学图像处理、卫星遥感图像分析、一般摄影图像的细节增强等。通过使用CLAHE算法,可以有效地改善图像的局部对比度,使得图像的细节更加清晰,同时避免了过增强带来的噪声问题。 在实际应用中,CLAHE算法的实现通常需要借助计算机编程技术。文件列表中的'CLAHE.m'很可能是一个使用MATLAB语言编写的CLAHE算法的实现脚本。MATLAB是一种广泛应用于工程计算及图像处理领域的编程语言和环境,'CLAHE.m'文件可能包含了CLAHE算法的核心函数和示例代码,供研究人员或工程师调用和修改。 另一个文件'license.txt'通常包含了软件或脚本的许可信息。它会说明用户在使用'CLAHE.m'文件时需要遵守的版权和使用许可的条款。在进行软件开发或进行研究工作时,了解并遵守相应的许可条款是非常重要的,以确保合法合规地使用相关资源。"

""" Contrast Limited Adaptive Histogram Equalization,CLAHE 对比度受限自适应直方图均衡 """ import cv2 # import numpy as np import matplotlib.pyplot as plt def show_img_with_matplotlib(color_img, title, pos): img_rgb = color_img[:, :, ::-1] plt.subplot(2, 5, pos) plt.imshow(img_rgb) plt.title(title, fontsize=8) plt.axis('off') 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 # 加载图像 image = cv2.imread('D:/Documents/python/OpenCV/image/008.jpg') 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 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) # 标题 plt.figure(figsize=(10, 4)) plt.suptitle("Color histogram equalization with cv2.equalizedHist() - not a good approach", fontsize=9, fontweight='bold') # 可视化 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) show_img_with_matplotlib(cv2.cvtColor(gray_image_clahe_3, cv2.COLOR_GRAY2BGR), "gray CLAHE clipLimit=10.0", 4) show_img_with_matplotlib(cv2.cvtColor(gray_image_clahe_4, cv2.COLOR_GRAY2BGR), "gray CLAHE clipLimit=20.0", 5) show_img_with_matplotlib(image, "color", 6) show_img_with_matplotlib(image_clahe_color, "clahe on each channel(BGR)", 7) show_img_with_matplotlib(image_clahe_color_lab, "clahe on each channel(LAB)", 8) show_img_with_matplotlib(image_clahe_color_hsv, "clahe on each channel(HSV)", 9) show_img_with_matplotlib(image_clahe_color_yuv, "clahe on each channel(YUV)", 10) plt.show()

225 浏览量