基于FPGA的RGB和HSV色空间转换算法实现*
2010-12-21袁奋杰吉国威汤勇明
袁奋杰,周 晓,丁 军,吉国威,汤勇明,夏 军
(东南大学电子科学与工程学院, 南京210096)
近年来,随着社会的进步,人们对图像及视频的质量要求越来越高。因此,图像视频的处理也越来越受到人们重视[1]。通常,从摄像仪和扫描仪所获得的颜色,以及计算机显示所用的颜色都是RGB色空间。但是RGB色空间中,颜色的属性没有独立,在进行图像处理时,会造成各个属性间的串扰,给图像处理带来了很大的麻烦。
HSV色空间在图像处理方面具有较突出的优势,它将颜色的亮度,色调和饱和度属性分离,所以在许多图像编辑工具中应用比较广泛, 如Photoshop。 RGB色空间和HSV色空间之间的转换是非线性的,很多地方只是用C等高级语言实现,而硬件实现则需要考虑时钟同步,算法优化,实时性等问题,所以该转换算法的硬件实现有一定的难度。然而硬件实现无论从速度,应用范围,可产品化程度方面都大大超过软件,因此显得十分重要。本文给出了基于FPGA平台的RGB色空间和HSV色空间的转换算法设计及其实现。同时在HSV色空间进行了色调变换实验,以验证转换的实用性。
1 RGB色空间和HSV色空间
1.1 RGB色空间
RGB色空间是一种简单实用的色空间,被普遍使用在计算机系统和因特网中,它能使颜色从一个平台映射到另外一个平台而不会严重丢失颜色信息。 RGB是一种相加成像系统,由红、绿、蓝三种基色叠加,以产生各种需要的颜色。
RGB色空间被广泛用于计算机图像设备中的原因是,计算机显示器需要利用红、绿、蓝三种颜色形成各种颜色,使用RGB色空间可以简化系统的设计和结构。另外,由于RGB色空间已被广泛使用多年,有大量的相关资源可以利用。
然而在图像处理时, RGB色空间却存在一些问题。 RGB色空间是与设备相关的颜色空间,而且注重颜色的合成而将颜色的属性相混合。例如在进行图像处理时,如果不均匀改变RGB,会改变亮度和饱和度,由此带来的RGB比例改变甚至会改变色调。这使得在图像处理时,需考虑多种因素而使算法复杂化。因此一种能独立表示颜色属性的空间就非常重要。 HSV色空间正是一种与设备无关的,将亮度,饱和度和色调分离的颜色空间。
1.2 HSV色空间
HSV是利用色调H、饱和度S和亮度V这三个色彩的基本属性来确定颜色的。它对应一个倒立的六棱锥,六棱锥的顶部V=1,它包含RGB颜色模型中R=1, G=1和B=1的三个面,颜色最亮。
色调H是色彩的基本属性,它处于平行于六棱锥顶面的色平面上,由绕V轴的旋转角给定,它的取值范围从0°到360°(360°构成一个完整的圆)。饱和度S是指颜色纯度,它的取值范围从0%(无色)到100%(纯色,由色调值指定),它沿水平方向变化,越接近六棱锥中心轴的色彩,其饱和度越低。亮度值V指定颜色亮度,它的取值范围从0%(黑色)到100%(白色)。它是六棱锥的中心轴,顶端V=1成白色,底端V=0成黑色,整个中心轴表示无彩色系的灰度颜色[2]。
HSV色空间将色调H,饱和度S和亮度V分离,使得在图像处理时,可以单独改变某个属性来调节图像而不影响其他属性。同时HSV在亮度和饱和度方向上均匀,这两个属性的改变程度可以用比例来控制。另外HSV色空间是与设备无关的颜色空间,这让该空间的图像处理具有普适性[3]。
1.3 RGB色空间和HSV色空间的相互转换
色空间从RGB到HSV的转换公式如下:设(r,g, b)是颜色的红、绿、蓝坐标,它们的取值范围都是[0, 1]。设max为r, g, b中最大值, min为最小值。要找到HSV空间上的(h, s, v)值,这里h∈[0, 360)是色调角, s, l∈[0, 1]是饱和度和亮度[4]。
色空间从HSV到RGB的转换公式如下
对于每个颜色向量(r, g, b)
2 RGB和HSV色空间转换算法
2.1 色空间转换的算法设计
现有的RGB和HSV色空间转换公式由于涉及到许多浮点数乘除法运算和分类情况, FPGA实现较困难。结合FPGA本身特点,将RGB和HSV色空间转换变为如下实现流程[5-7]。
图1 RGB到HSV转换流程图
根据上面得到的算法流程图,可以利用Verilog HDL进行文本输入描述各个功能模块,顶层利用原理图将模块和信号连接实现转换功能。在利用FPGA实现过程中,涉及到很多乘除法运算,这里可以调用QuartusⅡ的可参数化宏模块,实现乘除法运算[8]。在实现过程中涉及到一个关键问题:浮点数的乘除法。由于FPGA只能实现整数的乘除法,对于浮点数参与的运算以及结果为浮点数的运算,采用先放大后缩小的方法。即先将浮点数放大一定倍数,取其整数部分,最后再将结果缩小相应的倍数[9]。
图2 HSV到RGB转换流程图
浮点数放大的倍数,也需要在准确性和实时性方面折衷。放大倍数太小,引起的误差过大,使图像失真;放大倍数太大,占用资源多,同时会增加运算延时。习惯上采用一个字节,即8位作为放大的倍数。这样就将转换过程中所有的数都统一到[ 0,255]范围。后面的实验结果也验证了这种情况下的转换误差可以控制在3个单位之内。这种程度的误差对人眼来说,是不可分辨的[10]。
例如在max=g情况下计算H时, (B-R)/(max-min)是在[ 0, 1)之间的,如果不处理, FPGA就会自动截断,得到结果为0,使后面计算无法进行。程序中将(B-R)放大256倍,使结果也放大了256倍,供后续计算。最后再将最终结果缩小256倍,达到转换的目的。
在处理视频图像时,为了满足实时性,乘法和除法模块中不要引入时钟信号,以提高速度。视频是NTSC制式的隔行信号,具有60 Hz的刷新率。 VGA不变增益放大器输出的每个像素频率为25 MHz。但是RGB和HSV颜色空间转换的部分,由于运算量较大,采用50 MHz时钟,进一步提高运算速度[11]。
2.2 硬件实现的仿真和测试
根据上面的设计,采用ALTERA公司的QuartusⅡ软件进行编译和仿真。输入信号为8 bit RGB视频信号,将其转为HSV信号,再将得到的HSV信号转回8 bit RGB信号,得到了正确的结果。
从图中可以看出,对于输入的8 bit RGB信号(24, 132, 39),经转换后得到放大的HSV(128, 209,132), 与 理 论 值 相 同。 Add4, add2 和 negative2positive三个模块是中间结果,对应于R, G, B分别为最大值时的运算结果,也与理论值相同。
将上面仿真得到的HSV信号作为输入,仿真得到转换的RGB(24, 132, 38)。对比之前的输入RGB(24,132, 39),可以看到只有蓝色(B)产生了偏差为1的误差。对于[0, 255]的颜色表示范围,这样的误差在视觉方面是不可分辨的,可以认为转换前后颜色一致。
为了验证实时性,将输入RGB信号转为HSV信号,再转回RGB信号。这一过程的整体仿真结果如图5所示。由于VGA输出频率为25 MHz,因此采用40 ns的保持时间连续输入的三组RGB信号(125, 80,85), (200, 100, 100)和(150, 90, 200)。仿真 输出显示,前60 ns输出不稳定,但是之后能够准确的将输入信号输出,且每组信号保持40 ns,符合VGA输出频率要求。也就是说,经过空间转换后,输出相对于输入整体延时60 ns,可以满足实时性要求。
图3 RGB到HSV转换仿真图
在软件仿真正确的前提下, 进行了硬件测试。利用DVD, FPGA开发板和CRT显示器构建了测试系统[12]。其中FPGA验证平台采用Terasic公司提供的DE2实验板,它核心为672管脚封装的CycloneⅡ系列芯片 EP2C35F672C6。对DVD视频输出的信号在HSV色空间进行了特定色调改变,然后转化为RGB信号在显示器上显示。测试结果见图6、图7、图8所示。
图4 HSV到RGB转换仿真图
图5 RGB到RGB转换仿真图
图6 视频原图像
图7 黄色变为绿色
图8 蓝色变成品红
3 结论
由于各种色空间的存在,造成电脑、因特网和各种视频设备使用了各种不同的颜色表示方法。设计者必须在各种色空间之间进行各种转换。 HSV色空间因其颜色属性分离的特点,在图像处理方面有明显优势,这也使得它和RGB色空间的转换设计和实现很有实用价值。本文给出了RGB色空间和HSV色空间转换的算法设计,并在硬件平台上实现。实验证明该设计能满足色空间转换的精度和实时性,能较好的处理视频图像。
[ 1] 贾永红.数字图像处理[M].1版.武汉大学出版社, 2003.70, 75.
[ 2] 胡威捷.现代颜色技术原理及应用[ M] .1版.北京理工大学出版社, 2007.300, 310.
[ 3] 姚海根.印刷世界、色彩空间的选择与利用[J].2005(7):17, 20.
[ 4] 程杰铭.色彩学[M] .1版.科学出版社, 2001.20, 23.
[ 5] 冷星星,滕奇志.微计算机信息、基于FPGA视频处理系统的颜色空间转换[ J] .2008年(23):91, 92.
[ 6] 宋冠群,段哲民.电子测量技术、基于FPGA的色度空间转换设计[ J] .2007(1):178, 180.
[ 7] 朱东魏,陈晨, 吴成柯.电路与应用、色度空间转换的设计及FPGA实现[ J] .2005(10):24, 26.
[ 8] 易湖.数字视频处理的FPGA实现[ D] .华中科技大学.2006:50, 53.
[ 9] 金晓冬,常青.基于FPGA的RGB到YCbCr色空间转换[ J].现代电子技术, 2009(18):73, 75.
[ 10] 张懿,刘旭.数字RGB与YCbCr颜色空间转换的精度[ J] .江南大学学报:自然科学版, 2007, 6(2):200, 202.
[ 11] 郭彩霞,梅大成.基于FPGA的视频处理系统[ J] .信息技术,2009(3):108-111.
[ 12] 张志刚.FPGA与SOPC设计教程:DE2实践[ M] .1版.西安电子科技大学出版社, 2007.120, 128.