继续讨论Photoshop(PS)“图像(Image)>调整(Adjust)”菜单的功能。阅读本文之前需要先了解一下《直方图》。
色调均化(Equalize)
Photoshop菜单:图像>调整>色调均化
公式:
(公式中Sk表示均衡化后的灰度值,∑表示总和,nj是原图中某个灰度色阶j的像素数量,j的范围是0~k,N是图像像素总数。)
“色调均化”命令重新分布图像中像素的亮度值,以便它们更均匀地呈现所有范围的亮度级。使用此命令时,Photoshop尝试对图像进行直方图均衡化(Histogram Equalization),即在整个灰度范围中均匀分布每个色阶的灰度值。
当扫描的图像显得比原稿暗,而您想平衡这些值以产生较亮的图像时,可以使用“色调均化”命令。配合使用“色调均化”命令和“直方图”命令,可以看到亮度的前后比较。
使用“色调均化”命令:
1. 选择菜单图像>调整>色调均化。
2. 如果已选择一个图像区域,在弹出的对话框中选择要均化的内容,然后点按“好”。
原理
直方图均衡化是一种灰度变换算法,所以我们重点研究灰度图像的直方图均衡化。
绝对的均匀
图A是一个黑白灰均匀渐变,0~255的每一个色阶的灰度数量都是相同的。图B的是图A的像素打乱了顺序随机分布的,每种灰度的数量都与图A的相同,因而它的直方图也与图A的相同。
图A和图B的直方图。每种灰度数量是相同的,直方图呈一个黑色矩形。
近似的均匀
对于一般的图像,由于每种灰度的像素数量并不相同,我们没办法把每种灰度的分量调得像图A、B那么均匀,但是可以做到近似的均匀。也就是说,把直方图横向平均分成几份之后,使每一份的像素数量大致相等。
下面是一幅图片的直方图,共有19200个像素,从左到右平均分成三份。均衡化之后,每份的像素数量都在6400左右。
手工调整方法
我们拍摄或扫描的照片往往会由于光线太强或太弱,使图像对比度减弱,细节分辨不清。这样的图像直方图灰度往往都集中在某一色阶范围之内,我们需要将这些灰度拉伸到整个灰度级上,并使它们在直方图中均匀的分布,以达到增强图像的目的。
现在我们要通过Photoshop的曲线调整(图像>调整>曲线)来把一幅图片的灰度分布调整均匀。
上图的直方图图形可以近似地看成三个高峰两个低谷。先把曲线的起点和终点(黑白场)拉到与图形等宽,再通过曲线把两个低谷拉高一些,这时灰度分布就显得比较均匀了。
调整之后的图像和直方图。
直方图均衡化就是要通过某种算法来实现上面手工调整的效果。
算法
经典算法
下面以一幅3*2像素的简单图片(图C)为例,来说明灰度直方图均衡化的算法。
(图C)
图C的直方图:
注意看百分位(Percentile)这一项。一般软件的百分位是 当前色阶的像素数量÷总像素数量,而Photoshop不同,Photoshop显示的是 当前色阶与前面色阶的所有像素数量÷总像素数量。因此图C色阶为100时的百分位就是(3+2)/6=5/6=83.33%,这个百分位其实就是我们要求的灰度值(范围0~1),把它转换成0~255的范围,要再乘255。
求出每个色阶的百分位之后,再乘255,就可以求出与其对应的灰度值来。
色阶 数量 出现频率 百分位 255*百分位
根据每个色阶的 色阶->255*百分位 的对应关系组成一个灰度映射表,然后根据映射表来修改原来图片每个像素的灰度值。对于图C,用128替换50,用212替换100,用255替换200。这样,灰度直方图的均衡化就完成了。
Photoshop的算法
经过经典算法均衡化的图片,最亮的像素值总是255,因为最后一级色阶(255)的百分位一定是100%。而最暗的是由色阶0的数量决定的,像素值不一定是0。
Photoshop通过对比度拉伸的方法使最暗的像素值变为0,其它像素也相应变暗,最亮的像素保持255不变。对比度拉伸后的效果可能会比经典算法稍显偏暗。
对比度拉伸的算法,类似于使用色阶调整命令把黑场设成Min时的效果,Min是指像素数量不为0的第一个色阶。
对比度拉伸的公式:C = (Level - Min) * Scale = (Level - Min) * 255 / (255-Min)
图C均衡化之后的灰度值分别是128、212、255,为了精确,我们使用保留2位小数的形式(127.50、212.42、255.00)来进行对比度拉伸的计算。
Min = 127.50 '均衡化之后的最小值
Scale = 255/(255-Min) = 2
(127.50-Min)*Scale = 0*2 = 0
(212.42-Min)*Scale = 84.92*2 = 170
(255.00-Min)*Scale = 127.5*2 = 255
'新的映射表:
50 -> 0
100 -> 170
200 -> 255
经典算法和Photoshop算法的直方图比较。
彩色算法
彩色的直方图均衡化其实就是对图像某个或多个颜色通道进行灰度直方图均衡化运算,常见的有以下几种方法:
Photoshop用的是第一种方法。
总结
直方图均衡化是灰度变换的一个重要应用,它高效且易于实现,广泛应用于图像增强处理中。图像的像素灰度变化是随机的,直方图的图形高低不齐,直方图均衡化就是用一定的算法使直方图大致平和。
均衡化处理后的图象只能是近似均匀分布。均衡化图象的动态范围扩大了,但其本质是扩大了量化间隔,而量化级别反而减少了,因此,原来灰度不同的象素经处理后可能变的相同,形成了一片的相同灰度的区域,各区域之间有明显的边界,从而出现了伪轮廓。
如果原始图像对比度本来就很高,如果再均衡化则灰度调和,对比度降低。在泛白缓和的图像中,均衡化会合并一些象素灰度,从而增大对比度。均衡化后的图片如果再对其均衡化,则图像不会有任何变化。
灰度直方图均衡化的算法,简单地说,就是把直方图的每个灰度级进行归一化处理,求每种灰度的累积分布,得到一个映射的灰度映射表,然后根据相应的灰度值来修正原图中的每个像素。
经典的直方图均衡化算法可能存在以下一些不足:
为此人们提出了许多改进的直方图均衡算法,详细内容请参阅本文末尾提供的参考资料。
公式
要写论文的同学可能需要用数学的方式来描述,下面我把前面讲的内容概括成公式,以供参考。
概率密度函数(PDF)
为了计算方便,我们需要将直方图归一化,即把灰度范围由0~255变为0~1。归一化后的直方图其实就是一个概率密度函数(PDF,probability density function),均衡化就是令概率密度为1。
我们用Pr(r)来表示原图像的PDF,用Ps(s)表示均衡化之后的PDF,r、s分别代表均衡化前后的灰度值,r,s∈[0,1]。根据概率论的知识,可得出:
公式中T-1(s)代表T(r)的逆变换函数。
因为我们要求的概率密度为1,即:
因此:
由此得出:
等式两边对r积分,即可得出PDF的均衡化公式:
公式中T(r)代表r的灰度变换函数,∫表示积分,w为假设变量。
累积分布函数(CDF)
对于图像而言,我们需要使用离散形式的公式(Discrete Formulation)。
某个灰度级像素出现的概率为:
Pr(rk)是原图像第k个灰度级像素出现的概率,rk是第k个灰度级,即当前色阶k,k∈[0,1]。nk是rk像素数量。N是图像像素总数(图像大小),N=∑knk。
图像的灰度直方图均衡化公式:
公式中,T(rk)来表示原图像的第k个灰度级的转换函数。∑表示总和。∑nj/N表示0~j个灰度级的像素数量总和与像素总数的比值,也就是前面讲过的百分位(当前色阶与前面色阶的所有像素数量÷总像素数量)。∑Pr(rk)表示第0~k的灰度级出现概率累积相加。因为s是归一化的数值(s∈[0,1]),要转换为0~255的颜色值,需要再乘上255,即S=∑Pr(rk)*255。
这个转换公式也被称为图像的累积分布函数(CDF,cumulative distribution function)。
相关资料
使用“色调均化”命令 (Photoshop) :http://www.8esky.com/handbook/photoshop7/Help/1_8_17_3.html
Visual C++实现数字图像增强处理:
http://www.yesky.com/20021224/1645640_1.shtml
VB图像处理之图像的色彩纠正:
http://www.pcbookcn.com/article/2358.htm
结合局部对比度增强的直方图均衡化图像增强算法:
http://www.ahcit.com/lanmuyd.asp?id=1536
一种用于夜间图像增强的算法:
http://www.wanfangdata.com.cn/qikan/periodical.Articles/qhdxxb/qhdx99
/qhdx9909/990922.htm
图像处理技术:
http://www.fjtu.com.cn/fjnu/courseware/0334/course/_source/web/lesson/char6/j2.htm
VC++6.0在灰度数字图像增强处理中的应用:
http://dev.yesky.com/43/2591543.shtml
Histogram Equalization:
http://fourier.eng.hmc.edu/e161/lectures/contrast_transform/node3.html
Histogram Equalization:
http://www.clarkson.edu/class/image_process/qa1/Histogram%20Equalization.htm
Image Processing Fundamentals - Histogram-based Operations:
http://www.ph.tn.tudelft.nl/Courses/FIP/noframes/fip-istogram.html
Point Operations - Histogram Equalization:
http://homepages.inf.ed.ac.uk/rbf/HIPR2/histeq.htm