《Contrast Limited Adaptive Histogram Equalization》

看英文文章喜欢一边看,一边翻译,这样不容易走神,翻译的不好,不喜勿喷。

简介

图像增强处理的方式大多数都是通过一个查询表,一个像素一个像素的转换如(Jain 1989)描述的。当一个图像对比较低时,使用合适的mapping函数通常会提高图像的对比度。

mapping函数通常是非线性的,广泛应用的如gamma纠正,另一个非线性的技术是直方图均衡,它的思想是基于一个图像的好坏是基于直方图分布来判断的,随着图像像素的增多,每个像素相对应的灰度级的数量也增加。累积直方图被使用做为灰度变换如图1所示。

直方图均衡化后图像的结果是直方图范围变宽了,图像的灰度值分布变好了。然而,图1显示直方图均衡化后的结果比原图差。直方图上的较大的峰值是非感兴趣区域(背景噪声);在这种情况中,直方图均衡化增加了图像的噪声。这项技术没有适应局部对比度的要求,对比度较小的像素可能就会看不见了。


图1 使用直方图均衡化进行图像增强的例子。(a)原图—人膝盖磁共振图像;(b)灰度直方图的结果

AHE

由于我们的眼睛通过看图像局部的内容从而知道图像的具体内容,这样促使了增强局部图像对比度(Pize et al,1987)方法的出现。这种方法是图像被划分为矩形网格,每个网格中最优化的对比度可以被计算出来。区域的数量是通过对输入图像进行试验测得的,一幅图像被分为8*8个区域结果较优,这表示有64个相关区域在512*512的图像中。

对每一个相关的区域计算其中的像素的直方图。计算相应的累积直方图得到一个灰度分布表,根据此表得到了AHE处理图像,处理后的图像在每一个相关的区域中对比度都是最优的,因为它都是基于当前区域的图像进行的直方图均衡。

为了避免区域边缘效应,线性差值原则被使用(如图2)。

在图1a中应用自适应直方图均衡,得到的结果图像可看图2b。虽然膝盖的相关的结构对比度得到了增强,但背景的噪声也增加了。AHE最大化增强了感兴趣的信息,同时噪声也增多了,这也是AHE的一大缺点。


图2.细节和差值应用到自适应直方图均衡中,得到的AHE。(a)白点表示的像素值由周围的相关区域的灰度值获得。点A,B,C,D是相关的区域的中心,具体的区域灰度mapping(gA(s),gB(s),gC(s),gD(s))是基于像素的直方图获得。假设相同位置点的原始像素值是s,新的灰度值通过mapping每一个环绕的区域进行双线性差值得到其中x和y是相对于点A的距离。在边和角中,一个很小的不同插值技术被使用。

(b)图1a在图像中应用8*8的相关区域进行AHE得到的结果。虽然膝盖的结构能够更好的辨别,但整个图像都处在一个噪声的环境中。

CLAHE

CLAHE的噪声问题通过限制对比度增强能够降低,特别是对区域类似的环境。由于大多数像素都落入到相同的灰度范围,这些区域的直方图的峰值很高。CLAHE相关的灰度值得坡度被限制了,修剪直方图之后,像素值被均等的分布在整个直方图中,保证整个直方图的数量相同(如图3所示)。


图3.对比度限制被使用在CLAHE中。(a)相关区域中的直方图包含很多背景像素。(b)计算积累直方图,当使用灰度值mapping,许多bins被在背景噪声中。

(c)获取裁剪直方图使用一个裁剪限制3.超出的像素值通过直方图被重新分配。(d)累积裁剪直方图;它的最大斜度(与获得的对比度增强相等)与裁剪限制相等。

裁剪限制(或对比度参数)被定义做为多个直方图内容的平均值。参数越低,局部直方图的最大斜度越低,因此也得到了限制对比度增强的效果。通过使用裁剪限制能够避免直方图有一个较高的值,这与AHE技术一样。

图4显示了使用CLAHE得到的两个对比度增强的结果;右面的图像使用了较高的裁剪限制参数,图像噪声仍然可以接受。


图4.CLAHE应用于图像1a的结果(a)CLAHE裁剪参数为3;(b)CLAHE裁剪参数为10.两个图像都采用8*8相关区域。

CLAHE变换的主要优势是它只使用一个参数—裁剪限制,它的图像处理结果更优。

CLAHE也有缺点,由于这种方法目标是使对比度最优,原始图像与CLAHE处理结果不是1对1的关系,然而,CLAHE图像不是规范化的计算,它主要是依靠图像的像素值进行计算。


  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
""" 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()
04-20

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值