假设有一幅图,由于成象时光照不足,使得整幅图偏暗(例如,灰度范围从063);或者成象时光照过强,使得整幅图偏亮(例如,灰度范围从200255),我们称这些情况为低对比度,即灰度都挤在一起,没有拉开。灰度扩展的意思就是把你所感性趣的灰度范围拉开,使得该范围内的象素,亮的越亮,暗的越暗,从而达到了增强对比度的目的。我们可以用图5.5来说明对比度扩展(contrast stretching)的原理。

5.5     对比度扩展的原理

5.5中的横坐标gold表示原图的灰度值,纵坐标gnew表示gold经过对比度扩展后得到了新的灰度值。a,b,c为三段直线的斜率,因为是对比度扩展,所以斜率b>1g1oldg2old表示原图中要进行对比度扩展的范围,g1newg2new表示对应的新值。用公式表示为

  

显然要得到对比度扩展后的灰度,我们需要知道a,b,c,g1old,g2old五个参数。由于有新图的灰度级别也是255这个约束,所以满足ag1old+b(gold-g1old)+c(255-g2old)=255这个方程。这样,我们只需给出四个参数,而另一个可以代入方程求得。我们假设a=c,这样,我们只要给出bg1oldg2old,就可以求出

a=(255-b(g2old-g1old))/(255-(g2old-g1old))

要注意的是,给出的三个参数必须满:(1) b*(g2old-g1old)<=255(2) (g2old-g1old)<=255

下图为图5.1g1old=100g2old=150 b=3.0进行对比度扩展的结果。可以看出亮的区域(雕塑)变得更亮,暗的区域()变得更暗。

5.6     5.1对比度扩展后的结果

下面的这段程序实现了对比度扩展。首先出现对话框,输入b,g1old,g2old的三个参数(在程序中分别是StretchRatio,SecondPoint,FirstPoint),然后对调色板做响应的处理,而实际的位图数据不用改动。

CODE


削波

削波(cliping)可以看作是对比度扩展的一个特例,我们用图5.7说明削波的原理。

5.7     削波的原理

不难看出,只要令对比度扩展中的a=c=0就实现了削波。我们只要给出范围的两个端点,斜率b就可以用方程b(g2old-g1old)=255求出。

5.8为图5.1g1old=150g2old=200 进行削波的结果。把亮的区域(雕塑)提取了出来。

5.8     5.1削波处理后的结果

削波的程序和对比度扩展的程序很类似,就不再给出了。

5.6 阈值化

阈值化(thresholding)可以看作是削波的一个特例,我们用图5.9说明阈值化的原理。

5.9     阈值化的原理

不难看出,只要令削波中的g1old=g2old就实现了阈值化。阈值就象个门槛,比它大就是白,比它小就是黑。经过阈值化处理后的图象变成了黑白二值图,所以说阈值化是灰度图转二值图的一种常用方法(我们以前介绍过图案化和抖动的方法)。进行阈值化只需给出阈值点g1old即可。

5.10为图5.1阈值取128,阈值化处理后的结果,是一幅黑白图。

5.10   5.1阈值化处理后的结果

阈值化的程序和对比度扩展的程序很类似,就不再给出了。

5.7 灰度窗口变换

灰度窗口变换(slicing)是将某一区间的灰度级和其它部分(背景)分开。我们用图5.11和图5.12说明灰度窗口变换的原理。其中[g1old,g2old]称为灰度窗口。

5.11    清除背景的灰度窗口变换的原理

5.12   保留背景的灰度窗口变换的原理

灰度窗口变换有两种,一种是清除背景的,一种是保留背景的。前者把不在灰度窗口范围内的象素都赋值为0,在灰度窗口范围内的象素都赋值为255,这也能实现灰度图的二值化;后者是把不在灰度窗口范围内的象素保留原灰度值,在灰度窗口范围内的象素都赋值为255。灰度窗口变换可以检测出在某一灰度窗口范围内的所有象素,是图象灰度分析中的一个有力工具。

下面有三幅图,图5.13为原图;图5.14是经过清除背景的灰度窗口变换处理后的图(灰度窗口取[200-255]),将夜景中大厦里的灯光提取了出来;图5.15是经过保留背景的灰度窗口变换处理后的图(灰度窗口取[200-255]),将夜景中大厦里的灯光提取了出来,同时保留了大厦的背景,可以看出它们的差别还是很明显的。

5.13 原图

5.14 5.13经过

清除背景的灰度窗

口变换处理后的图

5.15   5.13经过

保留背景的灰度窗

口变换处理后的图

灰度窗口变换的程序和对比度扩展的程序很类似,就不再给出了。

不久前在一本科学杂志上看到一篇文章,非常有趣,是介绍电影“阿甘正传”的特技制作的。其中有一项就用到了类似灰度窗口变换的思想。相信看过这部电影的读者都会对那个断腿的丹尼上校有深刻的印象。他的断腿是怎么拍出来的呢?其实方法很简单,先拍一幅没有演员出现的背景画面,然后拍一幅有演员出现,其它不变的画面。要注意的是,此时演员的腿用蓝布包裹。把前后两幅图输入计算机进行处理。第二幅图中凡是遇到蓝色的象素,就用第一幅图中对应位置的背景象素代替。这样,一位断腿的上校就逼真的出现在屏幕上了。这就是电影特技中经常用到的“蓝幕”技术。

说点题外话。其实现代电影,特别是好莱坞电影,越来越离不开计算机及图象处理技术。最近引起轰动的大片“泰坦尼克号”中的很多特技镜头就是利用了庞大的SGI图形工作站机群没日没夜的计算产生的。图象处理技术和我们所喜爱的电影艺术紧密的结合了起来,更增加了我们学习它的兴趣。