1. 引言
随着智能手机的普及,越来越多人拍照并上传美食照片分享到网络,因而对食物拍照的效果很大程度上影响了手机用户的体验。由于摄像头和液晶显示器等硬件性能上的一些局限性,使其在某些条件或环境下采集的图像光线昏暗,颜色不够鲜艳或亮丽。此时如果能通过相应的食物色彩增强算法进行后处理,可以很大程度上提高照片的质量,获得更好的画面感受。因此,针对于食物色彩增强的算法,有一定的研究意义。
近年来,色彩增强算法处于不断进步和发展中。S. K. Naik和C. A. Murthy提出了一种色度保持的彩色图像增强算法,对图像的R、G、B进行线性尺度变换 [1] 。S. M. Murtaza等人在减小算法复杂度、提高算法效率上提出了另一种快速的颜色保持的彩色图像对比度增强算法 [2] 。李冠章等提到彩色图像增强方法中,将算法处理在分离色度亮度的色彩空间中,避免了严重的色彩失真 [3] 。赵全有等提到了基于Retinex理论的颜色保持的彩色图像增强算法 [4] 。Akira Inoue等提出了选择性的颜色修正算法,HSV方法和RGB减法方法 [5] ,而后,Alvy Ray Smith也提出一种在HSV空间取代RGB空间的增强方法 [6] ,以及张亚飞等提出基于HSI和局部同态滤波的彩色图像增强算法 [7] 都使用到了HSI或HSV颜色空间。金辉使用了Gamma曲线在YUV颜色空间对色彩和亮度矫正的实时色彩增强方法 [8] 。
现有的色彩增强算法都能取得不错的效果,但是没有区分增强内容,对于食物色彩没有针对性。同时,单纯在HSI或HSV空间的色彩增强效果往往达不到用户对拍摄的食物照片鲜艳亮丽的需求。Gamma曲线的特定的凸函数形状,无法贴切描述色彩或亮度在各取值点所应该的增强量。以及有些方法复杂度较高,不利于移动智能设备的后处理。为此,本文提出了采用HSI和HSV两种色彩空间联合处理,利用设计的饱和度矫正曲线和符合食物色彩特征的色调参数曲线做加权矫正,以及设计的亮度矫正曲线处理的食物色彩增强算法。该算法针对于食物图像的色彩增强,一定程度上解决了现有方法存在的问题。
2. 本文算法
2.1. HSI和HSV颜色空间的简介
1) HSI颜色空间根据人的视觉系统设计,采用色调(Hue)、饱和度(Saturation)以及亮度(Intensity)来表示颜色 [9] 。HSI颜色空间使用一个圆锥模型表示。它的优点是能够将色调、饱和度和亮度很好地区分开来。由于它能更方便地对色彩处理和识别,因此在图像处理的众多算法中,经常采用HSI模型,它们可以独立的分别处理而不相互影响。
从RGB颜色空间到HSI颜色空间的转换公式为
, (1)
,
,
,
, (2)
(3)
从HSI颜色空间到RGB颜色空间的转换公式为
, (4)

(5)
,
. (6)
2) HSV颜色空间同样也使用一个圆锥模型来描述,采用色调、饱和度以及明度来表示颜色 [9] 。它的色调、饱和度和明度同样也很好地区分开来,也经常被采用于图像处理的众多算法中。HSV颜色空间中,色调沿着圆柱体的外圆周变化,饱和度沿着从横截面的圆心的距离变化,明度沿着横截面到底面和顶面的距离而变化。从RGB颜色空间到HSV颜色空间的转换公式为
,
,
, (7)
从HSV颜色空间到RGB颜色空间的转换公式为
,
, (8)
. (9)
2.2. 两种颜色空间的联合处理
由HSI和HSV颜色空间能将色彩和亮度很好的区分出来的特性,故采用将RGB转换到HSI或HSV空间上对色彩和亮度处理,效果直观且避免严重的色彩失真。
尽管HSI和HSV颜色空间,都将色调、饱和度和亮度分离为三个独立的分量,S分量一样表示饱和度,但HSI和HSV模型的设计上是有一定区别的。因此,在HSI颜色空间,对饱和度的增强,会使图像色彩变得更加亮丽,但是色彩的浓度不会有明显的增加。而在HSV颜色空间,对饱和度的增强,能使色彩的浓度明显增加,但是图像会相对暗淡,画面效果不好。鉴于HSI和HSV模型中饱和度的特性,本文算法的第一点是采用联合两种颜色空间增强的方法,以达到既能使色彩浓度增加,又使色彩亮丽的效果。
2.3. 饱和度矫正曲线
本文算法的第二点是饱和度矫正曲线的设计。Gamma曲线的特定凸函数形状无法贴切描述饱和度各取值点的增强量,因此本文根据饱和度取值的特性,设计相应的矫正曲线。因为联合HSI和HSV两个颜色空间共同处理,所以两个颜色空间都有各自的饱和度矫正曲线。
如前所述,S分量表示的是饱和度。在HSI、HSV空间中对色彩进行增强可以很方便地直接增大饱和度。S的取值归一化为0至1区间,取值越小,饱和度越小,取值越大,则饱和度越大。在大多数图像中,当饱和度取值小于一定值时,它的色调并不确定,对其进行饱和度增强容易造成色彩失真。因此,对于饱和度低于一定值的像素,不对其增强或增强很小。对于高于一定值的部分,根据颜色空间和食物色彩的特性设定。HSI空间,S分量增大使色彩亮丽度提高,HSV空间,S分量增大使色彩浓度加深,食物色彩增强量在这两者的组合间调整。根据上述原则,多次试验得到,设置HSI颜色空间下的饱和度矫正曲线定点
为
,
,
和HSV颜色空间的饱和度矫正曲线定点
为
,
,
将这些定点进行线性插值,分别得到的HSI颜色空间的饱和度矫正曲线和HSV颜色空间的饱和度矫正曲线,能够取得较为理想的结果。插值后得到的曲线如图1所示。
上述设置的这两个矫正曲线并不是最终的,还需要根据像素点的色调H分量所获得的色调系数
,乘以这个色调系数获得加权,才是对于某一像素点的最终饱和度校正曲线。饱和度矫正的公式为
, (10)
其中,
为饱和度,
为色调系数,
为空间类型,
即为由色调系数和颜色空间共同决定的饱和度矫正曲线。
2.4. 色调系数曲线
HSI和HSV空间中的另一个重要的分量为色调H分量。本文算法的第三点是设计符合食物色彩特征的色调系数曲线,它为上一步饱和度矫正曲线提供参数。因为联合HSI和HSV两个颜色空间共同处理,所以两个颜色空间也都有各自的色调系数曲线。
色调系数的作用是在对图像的像素点进行饱和度增强时,可以根据像素点的色调值,选择性地对相应色调的像素点进行不同程度的增强。色调系数曲线以色调H分量为输入,输出一个色调系数
,用于对饱和度矫正曲线的加权。
根据颜色空间和食物色彩的特性,设定色调系数曲线的输入输出映射关系。食物色彩增中,强调主要食物特征色彩,如红绿黄等色彩,而较少地提升其它非主要食物特征色彩,如蓝紫等色彩。值得注意的是,过度地强调黄色,容易使图像发生泛黄的明显色偏,因此黄色的色调系数不能太大。H取值从0至1是色调由红黄蓝紫再到红的变化。根据上述特性设定H和
映射关系。色调系数
设计为一个随H变化连续的值,避免在断点处产生突兀感。
取值范围一般在0至3之间,表示原饱和度矫正曲线乘以这个倍数。根据上述原则,多次试验得到,设置HSI颜色空间的色调系数曲线定点
为


和HSV色调系数曲线定点
为

将这些定点进行线性插值,分别得到的HSI颜色空间的色调系数曲线和HSV颜色空间的色调系数曲线,能够较有效地区分食物色彩色调。插值后得到的曲线如图2所示。色调系数
获得的公式如下:
, (11)
其中,
为色调,
为空间类型,
为色调系数,
为由颜色空间决定的色调系数曲线。在获得色调系数
后,将其乘上之前设定的矫正的曲线,这个就是该像素点的最终饱和度矫正曲线,从而达到根据像素点的色调选择性地对相应色调的像素点进行不同程度的增强的目的。

Figure 1. Correction curve of color saturation
图1. 饱和度矫正曲线
2.5. 亮度矫正
本文算法的第四点是亮度矫正,亮度在食物色彩增强中也起至关重要作用。
从HSI和HSV颜色空间分量出来的独立的I或V分量控制着亮度值,理论上改变亮度值并不会改变色彩,这一特性使我们可以很好地对彩色图像进行亮度的调整。
本文中的亮度调整分为两种,第一种是对亮度过暗的图像进行增亮的处理,对亮度正常的图像不做此处理。第二种是是对所有的图像都进行的亮度调整,它的目的是在一定程度上提高对比度。
第一种过暗亮度调整,首先要对亮度判断,判断的标准包括亮度的平均值,以及亮度直方图最高值区域所占的百分比,仅当两者都小于设定的阈值时,才进行下一步处理,同时,会得到两个拉伸参数A,B。在下一步的拉伸中,对亮度直方图根据A,B值进行拉伸。最终提升了平均亮度。其中,直方图拉伸的公式为:
. (12)
第二种亮度矫正,是根据已预先设定好的亮度矫正曲线,对亮度进行矫正。这个矫正曲线的变化很小,不会引起整体亮度平均值的大变化,但可以一定程度上地提高对比度,达到较好的显示效果。本文中也不采用Gamma曲线,而是采用分段曲线矫正。根据上述原则,多次试验得到,设置亮度矫正曲线定点
为
,
,
将这些定点进行线性插值,得到的亮度矫正曲线,能够取得较为理想的对比度提高效果。插值后得到的曲线如图3所示。亮度矫正的公式为:
, (13)
其中,
为输入亮度值,
为输出亮度值,
为亮度校正曲线。
2.6. 算法描述
本文算法具体的流程如图4所示。输入的食物图像分为在HSI空间和HSV空间两部分的处理。在HSI空间中,转换得到的色调H分量经过色调系数曲线处理,获得色调参数
输出。饱和度S分量和色调参数
共同经过饱和度校正曲线,得到矫正后的饱和度S分量。亮度I分量经过两种亮度矫正处理,得到矫正后的亮度I分量。三个H、S、I分量重新转换为RGB空间,然后接着做HSV空间上的处理。HSV空间上处理的差别在于没有再对亮度进行处理,因为亮度的矫正只需要进行一次即可。经过两次的空间处理,最终得到输出结果。

Figure 3. Correction curve of brightness
图3. 亮度矫正曲线
3. 实验结果及分析
3.1. 主观评价
图5是一幅菜品的增强效果分析图。其中,(a)为原图,(b)为饱和度增加百分比灰度图,(c)为亮度增加百分比灰度图。
饱和度增加百分比灰度图是指增强后图像比原图的饱和度增加的百分值归一化为[0,255]再取对数后,直观表示的灰度图像。其公式为
,其中
为增强后图像的饱和度,
为原图的饱和度。灰度图中,亮度越高,则说明增加越多,反之,则说明增加越少。从图5(b)中可以看到,集中在食物区域呈现白色,亮度高,而周围区域则呈现黑色,亮度低。说明食物区域饱和度增强程度高,而其他区域增强程度小。这就是饱和度矫正曲线和色调系数对像素点进行区别增强的效果,这是食物色彩增强算法对食物特征区分的核心。
亮度增加百分比灰度图是指增强后图像比原图的亮度增加的百分值归一化为[0,255]再取对数后,直观表示的灰度图像。其公式为
,其中
为增强后图像的亮度,
为原图的亮度。灰度图中,亮度越高,则说明增加越多,反之,则还可能减小。从图5(c)中可以看到,食物图像的亮度呈现部分增强、部分减弱的效果,这在一定程度上提高了图像的对比度。这是在HSI空间处理带来的亮丽度提升,和第二种亮度增强方法所带来的对比度提高的结果。
图6是一幅草莓的增强对比图。其中,(a)为原图,(b)为仅在HSI空间增强的效果,(c)为仅在HSV空间增强的效果,(d)为在两种颜色空间共同增强的结果。可以看到,(b)相对于(a),草莓的红色更加的亮丽。(c)相对于(a),草莓的色彩更加浓厚,但相对暗淡。而(d)则兼具了(b)和(c)两种增强效果的特点,能够获得亮丽和浓度都提升的结果。同时可以看到,图像的对比度有一定的提高,这就是第二种亮度增强方法所带来的对比度提高。增强后整幅图像的视觉效果比原图好很多。
图7是一幅过暗亮度提升对比图。其中,(a)为原图,(b)为增强后的效果。可以看到,过暗亮度的图片触发了第一种亮度增强方法,使整体的亮度调整到了一个合适的水平,视觉效果得到改善。
3.2. 客观评价
下面本文选取图8所示的5幅食物图片,对其进行客观参数测评。
1) 饱和度提升。饱和度参数为计算在HSV颜色空间下,平均S分量的值。表1为测试的到的图像饱和度参数。
可以看到,本文算法处理后,此参数平均增加7.58%。图像的色彩浓度得到提升。
2) 对比度提升。对比度通俗地讲就是图像亮暗的对比程度,也就是从黑到白的渐变层次。对比度越高,从黑到白的渐变层次就越多,从而图像的细节和色彩表现也就越丰富。对比度的计算公式如下所示:
,其中
,即相邻像素间灰度差,
为相邻像素间的灰度差为
的像素分布概率,邻域取像素点的四邻域。表2为测试的到的图像对比度。
可以看到,本文算法处理后,对比度平均也增加了2.43%,图像的对比度有一定的提高。
4. 结论
本文提出的食物图像的色彩增强的算法,采用HSI和HSV两种色彩空间联合处理,利用设计的饱和度矫正曲线和符合食物色彩特征的色调参数曲线做加权矫正,以及设计的亮度矫正曲线处理。实验效果表明,增强后图像色彩浓厚且亮丽,不易发生色偏,亮度对比度良好,食物特征明显增强,算法复杂度较低,一定程度解决的现有方法的不足,弥补了食物色彩增强算法方面的空缺。

Figure 7. Dark image enhancement chart
图7. 过暗亮度提升对比图

Figure 8. Images in objective evaluation
图8. 客观参数测评图像
表1. 图像饱和度
表2. 图像对比度
基金项目
国家自然科学基金(No. 61372068)。