袁奮杰,周 曉,丁 軍,吉國威,湯勇明,夏 軍
(東南大學電子科學與工程學院, 南京210096)
近年來,隨著社會的進步,人們對圖像及視頻的質量要求越來越高。因此,圖像視頻的處理也越來越受到人們重視[1]。通常,從攝像儀和掃描儀所獲得的顏色,以及計算機顯示所用的顏色都是RGB色空間。但是RGB色空間中,顏色的屬性沒有獨立,在進行圖像處理時,會造成各個屬性間的串擾,給圖像處理帶來了很大的麻煩。
HSV色空間在圖像處理方面具有較突出的優勢,它將顏色的亮度,色調和飽和度屬性分離,所以在許多圖像編輯工具中應用比較廣泛, 如Photoshop。 RGB色空間和HSV色空間之間的轉換是非線性的,很多地方只是用C等高級語言實現,而硬件實現則需要考慮時鐘同步,算法優化,實時性等問題,所以該轉換算法的硬件實現有一定的難度。然而硬件實現無論從速度,應用范圍,可產品化程度方面都大大超過軟件,因此顯得十分重要。本文給出了基于FPGA平臺的RGB色空間和HSV色空間的轉換算法設計及其實現。同時在HSV色空間進行了色調變換實驗,以驗證轉換的實用性。
RGB色空間是一種簡單實用的色空間,被普遍使用在計算機系統和因特網中,它能使顏色從一個平臺映射到另外一個平臺而不會嚴重丟失顏色信息。 RGB是一種相加成像系統,由紅、綠、藍三種基色疊加,以產生各種需要的顏色。
RGB色空間被廣泛用于計算機圖像設備中的原因是,計算機顯示器需要利用紅、綠、藍三種顏色形成各種顏色,使用RGB色空間可以簡化系統的設計和結構。另外,由于RGB色空間已被廣泛使用多年,有大量的相關資源可以利用。
然而在圖像處理時, RGB色空間卻存在一些問題。 RGB色空間是與設備相關的顏色空間,而且注重顏色的合成而將顏色的屬性相混合。例如在進行圖像處理時,如果不均勻改變RGB,會改變亮度和飽和度,由此帶來的RGB比例改變甚至會改變色調。這使得在圖像處理時,需考慮多種因素而使算法復雜化。因此一種能獨立表示顏色屬性的空間就非常重要。 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]。
色空間從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)

現有的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]。
根據上面的設計,采用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 藍色變成品紅
由于各種色空間的存在,造成電腦、因特網和各種視頻設備使用了各種不同的顏色表示方法。設計者必須在各種色空間之間進行各種轉換。 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.