对比度增强技术
该示例展示几种不同的对比度增强方法。有以下三种方法用于对比度增强:imadjust, histeq, 和 adapthisteq。该示例比较这三种方法在增强灰度图片和真彩图片时的性能表现。
使用以下三种方法的默认设置来比较它们的增强效果:
(1)imadjust方法将输入图像的灰度值映射到整个灰度范围(0~255),但上下各留1%的饱和区(译者注:此处翻译存疑);
(2)histeq方法通过使图像的直方图均衡化来增强图像。默认情况下,该函数将输入图像的直方图转换为均匀分布。当然也可以自定义要转换的直方图模板。
(3)adapthisteq则采用了限制对比度的自适应直方图均衡法。和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")
读取另一张灰度图像到工作空间,使用这三种对比度增强技术来增强该图片。
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")
需要注意的是,imadjust方法对tire图片的作用不大,但却对pout图片的作用显著。下面两张图分别画出了pout.tif和tire.tif的灰度直方图,我们可以发现,pout.tif的灰度直方图集中于0-255的中间区域,而tire.tif灰度直方图已然伸展到0-255整个区域,这使得imadjust方法对tire.tif的增强效果不大。
figure
subplot(1,2,1)
imhist(pout)
title('Histogram of pout.tif')
subplot(1,2,2)
imhist(tire)
title('Histogram of tire.tif');
另一方面,histeq方法则对两幅图片都有比较明显的处理效果。原图上一些隐藏的特征被展示出来,尤其是轮胎上的一些碎屑。不幸的是,与此同时,这种增强方法使得两张图片中的某些区域的灰度过饱和。注意看,轮胎的中心、孩子的脸及夹克都出现了退色现象。
注意看轮胎这张图片,对于这张图片来说,为了增强这张图片的效果,我们倾向于保持其中心的灰度不变,同时增加图片其它区域的对比度。为了实现以上目标,我们需要一个不同的直方图转换方法来处理这张图片。“对比度受限自适应直方图均衡技术”,即函数adapthisteq,可以帮助我们达到目的。该方法分析图片不同的区域并且计算合适的直方图转换模式。该方法可以施加对比度增强限值,从而避免像histeq方法那样造成的灰度过饱和发生。adapthisteq方法是这三种方法中最为强大的方法。
彩色图片的增强,通常采用将彩色图片转换到具有彩色明度的彩色空间中的方法,例如,转换到Lab彩色空间。对比度增强只作用于彩色明度L这一层,之后整个图片会被转换回RGB彩色空间。处理明度会使像素强度发生变化,同时保持原有的色彩不变(译者注:我的理解是,改变明度代表改变颜色强度,原本的红黄蓝还是原本的红黄蓝,彩色图片“明度”类似于灰度图片的“灰度”)。
读取一张彩色图片到工作空间。图片shadow.tif是一张索引图片,所以需要先将其转换为真彩(RGB)图片。然后再将RGB图片转换为 Lab*图片。
[X,map] = imread('shadow.tif');
shadow = ind2rgb(X,map);
shadow_lab = rgb2lab(shadow);
明度值的变化范围是0~100,需要将其转化到区间[0 1]内,那是因为具有double类型数据格式的图片的数据范围是0~1。
max_luminosity = 100;
L = shadow_lab(:,:,1)/max_luminosity;%最后一个channel是明度channel
在明度通道上使用以上三种对比度增强技术,保持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")