Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

对比度增强方法

此示例说明如何使用多种方法增强灰度和真彩色图像。

增强灰度图像

以下三个函数特别适用于对比度增强:imadjusthisteqadapthisteq。使用默认设置,比较三种方法的有效性:

  • imadjust 将输入强度图像的值映射到新值,以对输入数据中强度最低和最高的 1%(默认值)数据进行饱和处理,从而提高图像的对比度。

  • histeq 执行直方图均衡化。它变换强度图像中的值,以使输出图像的直方图近似匹配指定的直方图(默认情况下为均匀分布),从而增强图像的对比度。

  • adapthisteq 执行对比度受限的自适应直方图均衡化。与 histeq 不同,它对小数据区域(图块)而不是整个图像执行运算。它会增强每个图块的对比度,使得每个输出区域的直方图近似匹配指定的直方图(默认情况下为均匀分布)。可以限制对比度增强,以避免放大图像中可能存在的噪声。

将一个对比度差的灰度图像读入工作区中。使用三种对比度调整方法增强图像。

pout = imread("pout.tif");
pout_imadjust = imadjust(pout);
pout_histeq = histeq(pout);
pout_adapthisteq = adapthisteq(pout);

以蒙太奇方式显示原始图像和三个对比度调整后的图像。

montage({pout,pout_imadjust,pout_histeq,pout_adapthisteq},"Size",[1 4])
title("Original Image and Enhanced Images using imadjust, histeq, and adapthisteq")

Figure contains an axes object. The axes object with title Original Image and Enhanced Images using imadjust, histeq, and adapthisteq contains an object of type image.

将另一个灰度图像读入工作区,并使用三种对比度调整方法增强该图像。

tire = imread("tire.tif");
tire_imadjust = imadjust(tire);
tire_histeq = histeq(tire);
tire_adapthisteq = adapthisteq(tire);

以蒙太奇方式显示原始图像和三个对比度调整后的图像。

montage({tire,tire_imadjust,tire_histeq,tire_adapthisteq},"Size",[1 4])
title("Original Image and Enhanced Images using " + ...
    "imadjust, histeq, and adapthisteq")

Figure contains an axes object. The axes object with title Original Image and Enhanced Images using imadjust, histeq, and adapthisteq contains an object of type image.

请注意,imadjust 对轮胎的图像影响不大,但在 pout 图中产生了明显变化。绘制 pout.tiftire.tif 的直方图表明,第一个图像中的大部分像素集中在直方图的中心,而对于 tire.tif,这些值已分布在最小值 0 和最大值 255 之间,从而阻止 imadjust 有效地调整图像的对比度。

figure
subplot(1,2,1)
imhist(pout)
title("Histogram of pout.tif")
subplot(1,2,2)
imhist(tire)
title("Histogram of tire.tif");

Figure contains 4 axes objects. Axes object 1 with title Histogram of pout.tif contains an object of type stem. Axes object 2 contains 2 objects of type image, line. Axes object 3 with title Histogram of tire.tif contains an object of type stem. Axes object 4 contains 2 objects of type image, line.

而直方图均衡化明显改变了两个图像。许多先前隐藏的特征暴露出来,尤其是轮胎上的碎屑颗粒。遗憾的是,这种增强同时使两个图像的几个区域都出现过饱和。注意轮胎的中心、孩子脸部的一部分和外套都泛白。

对于轮胎图像的处理,车轮的中心最好保持大约相同的亮度,同时增强图像其他区域的对比度。为了实现此点,必须对图像的不同部分应用不同变换。在 adapthisteq 中实现的对比度受限自适应直方图均衡化方法可以实现这一点。该算法分析图像的各部分并计算适当的变换。它还可以设置对比度增强水平的限制,从而防止由 histeq 的基本直方图均衡化方法引起的过饱和。这是此示例中最复杂的方法。

增强彩色图像

彩色图像的对比度增强通常是通过将图像转换为以图像亮度作为其分量之一的颜色空间(例如 L*a*b* 颜色空间)来完成的。对比度调整仅对亮度层 L* 执行,然后将图像转换回 RGB 颜色空间。操作亮度只影响像素的强度,会保留原始颜色。

将一个对比度差的图像读入工作区中。然后,将图像从 RGB 颜色空间转换为 L*a*b* 颜色空间。

shadow = imread("lowlight_1.jpg");
shadow_lab = rgb2lab(shadow);

亮度值的范围是从 0 到 100。将值缩放到范围 [0 1],这是数据类型为 double 的图像的预期范围。

max_luminosity = 100;
L = shadow_lab(:,:,1)/max_luminosity;

对亮度通道执行三种类型的对比度调整,并保持 a* 和 b* 通道不变。将图像转换回 RGB 颜色空间。

shadow_imadjust = shadow_lab;
shadow_imadjust(:,:,1) = imadjust(L)*max_luminosity;
shadow_imadjust = lab2rgb(shadow_imadjust);

shadow_histeq = shadow_lab;
shadow_histeq(:,:,1) = histeq(L)*max_luminosity;
shadow_histeq = lab2rgb(shadow_histeq);

shadow_adapthisteq = shadow_lab;
shadow_adapthisteq(:,:,1) = adapthisteq(L)*max_luminosity;
shadow_adapthisteq = lab2rgb(shadow_adapthisteq);

以蒙太奇方式显示原始图像和三个对比度调整后的图像。

figure
montage({shadow,shadow_imadjust,shadow_histeq,shadow_adapthisteq},"Size",[1 4])
title("Original Image and Enhanced Images using " + ...
    "imadjust, histeq, and adapthisteq")

Figure contains an axes object. The axes object with title Original Image and Enhanced Images using imadjust, histeq, and adapthisteq contains an object of type image.

另请参阅

| |

相关主题