基于SDI接口的實(shí)時(shí)圖像增強(qiáng)顯示系統(tǒng)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
摘要:為了改善實(shí)時(shí)圖像輸出質(zhì)量,研究基于SDI接口的增強(qiáng)顯示系統(tǒng)軟硬件設(shè)計(jì)。利用模塊化思想提出一個(gè)基于SDI接口輸出的硬件架構(gòu),以FPGA作為處理核心,通過2片SRAM的雙緩存結(jié)構(gòu)實(shí)現(xiàn)圖像的乒乓控制,使輸出圖像滿足SDI接口協(xié)議。在此提出了灰度拉伸、偽彩色處理以及畫幅縮放3種實(shí)時(shí)圖像增強(qiáng)算法。通過實(shí)驗(yàn)測(cè)試,系統(tǒng)工作穩(wěn)定、實(shí)時(shí)性好,加入增強(qiáng)算法后圖像對(duì)比度增強(qiáng),極大增強(qiáng)了人眼的視覺效果。
關(guān)鍵詞:SDI;模塊化;圖像增強(qiáng)算法;偽彩;畫幅縮放
0 引言
SDI接口(Serial Digital Interface)是直接通過采用數(shù)字化的方法對(duì)視頻信號(hào)進(jìn)行控制、處理和傳輸,將數(shù)字視頻或者音頻信號(hào)按有效行場(chǎng)方式通過單芯同軸電纜傳輸,而后將數(shù)字信號(hào)直接接入后續(xù)的處理系統(tǒng),避免傳統(tǒng)的模擬信號(hào)因A/D和D/A轉(zhuǎn)換帶來的圖像細(xì)節(jié)和質(zhì)量損失,也使得設(shè)備間的交互變得更加簡單方便。SDI接口傳輸速率高、適應(yīng)性強(qiáng)、即插即用、對(duì)環(huán)境要求不高以及應(yīng)用范圍廣等特點(diǎn),目前SDI已經(jīng)作為國內(nèi)很多戰(zhàn)略靶場(chǎng)軍工圖像設(shè)備的一種協(xié)議標(biāo)準(zhǔn)。
目前在民用方面,SDI接口作為一種標(biāo)準(zhǔn)視頻傳輸接口已被世界上多數(shù)視頻設(shè)備廠商接受并采納,涉足數(shù)字?jǐn)z像領(lǐng)域、電視電影及專業(yè)的演播室等領(lǐng)域。世界知名的索尼、松下等公司生產(chǎn)的視頻設(shè)備均支持SDI接口協(xié)議。
1 系統(tǒng)硬件結(jié)構(gòu)
系統(tǒng)結(jié)構(gòu)如圖1所示,主要由Camera Link接口、千兆網(wǎng)接口、大容量SRAM存儲(chǔ)器、FPGA芯片、SDI接口芯片以及SDI接口監(jiān)視器等構(gòu)成。這里FPGA是整個(gè)系統(tǒng)的核心邏輯,采用XILINX公司的V2系列XC2V4000FFG1152芯片,該芯片有1152個(gè)IO引腳,4 MB的系統(tǒng)門單元,120個(gè)乘法器,12個(gè)數(shù)字時(shí)鐘管理器,824個(gè)用戶可定義IO,120x18 b的塊RAM。豐富的硬件資源給輸入圖像的顯示和增強(qiáng)處理提供了可靠保證。該系統(tǒng)的基本工作過程首先接收Camera Link接口或千兆網(wǎng)接口的圖像數(shù)據(jù),經(jīng)過專用接口轉(zhuǎn)換芯片將數(shù)據(jù)轉(zhuǎn)換成TTL或者CMOS格式,傳送給FPGA,在FPGA內(nèi)部經(jīng)過實(shí)時(shí)圖像處理、協(xié)議轉(zhuǎn)換,輸出符合SDI接口芯片的數(shù)據(jù),經(jīng)過接口芯片的并串轉(zhuǎn)換,實(shí)時(shí)輸出SDI標(biāo)清圖像數(shù)據(jù)。
這里FPGA的主要工作原理如圖2所示。在該模塊中,系統(tǒng)上電后首先完成對(duì)SDI接口芯片工作寄存器的配置,從而完成對(duì)其工作模式的選擇;然后需要完成輸入圖像數(shù)據(jù)接口到接口芯片的行場(chǎng)時(shí)鐘協(xié)議轉(zhuǎn)換以及數(shù)據(jù)到Y(jié)CbCr格式轉(zhuǎn)換,這里采用FPGA對(duì)雙緩存的控制完成格式轉(zhuǎn)換,本文應(yīng)用畫幅縮放、灰度拉伸和偽彩色處理實(shí)現(xiàn)圖像增強(qiáng)處理,這在下一節(jié)做具體描述。
2 圖像增強(qiáng)算法
2.1 灰度拉伸算法
現(xiàn)在很多相機(jī)都基于CameraLink接口和千兆網(wǎng)接口,它們的輸出數(shù)據(jù)位存在8 b,10 b和14 b等多種情況,本文在系統(tǒng)設(shè)計(jì)時(shí)做了智能處理,通過上位機(jī)RS232串口向該系統(tǒng)轉(zhuǎn)換模塊發(fā)送一個(gè)命令信號(hào),告知系統(tǒng)輸入端的灰度數(shù)據(jù)位數(shù)和系統(tǒng)輸出端的數(shù)據(jù)位數(shù),從而使算法實(shí)現(xiàn)不同的灰度拉伸。由于一般的監(jiān)視器只能顯示8 b灰度的圖像數(shù)據(jù),SDI信號(hào)有8 b和10 b兩個(gè)差別。對(duì)灰度圖像做一個(gè)線性拉伸,不論前端輸入圖像數(shù)據(jù)是多少位,可以利用該算法將圖像數(shù)據(jù)映射到8 b和10 b空間,即下面介紹的拉伸處理。這里以輸入圖像數(shù)據(jù)14 b為例,假設(shè)輸入為10 b圖像數(shù)據(jù),其宏觀概念是。將14 b數(shù)據(jù)空間線性映射到10 b空間。假設(shè)做灰度拉伸前的灰度值為Yi,則它的灰度取值范圍是[0,16 383];灰度拉伸之后的灰度值為Yi’,它的取值范圍為[0,1 023],則Yi和Yi’直接直接的映射關(guān)系為:
式中:Ymax為某幀圖像的灰度最大值;Ymin為某幀圖像的灰度最小值。
如果輸出為8 b圖像數(shù)據(jù),則根據(jù)需要將14 b灰度轉(zhuǎn)換到8 b灰度空間,線性映射關(guān)系為:
式中:Ymax為某幀圖像的灰度最大值;Ymin為某幀圖像的灰度最小值。
根據(jù)上面的公式可看出,在進(jìn)行拉伸變換時(shí),需要用到基本的乘除法運(yùn)算,這在Xilinx公司FPGA內(nèi)部實(shí)現(xiàn)起來較困難,最為常用的做法是調(diào)用FPGA內(nèi)部的乘除法IP核,這樣可以極大提高FPGA的工作效率。根據(jù)上面的公式,若想實(shí)現(xiàn)算法,還需要知道當(dāng)前幀圖像數(shù)據(jù)的灰度最小值和最大值。FPGA工作是以時(shí)鐘為基礎(chǔ)的,具有實(shí)時(shí)性,如果想獲得當(dāng)前幀的灰度最值,需要對(duì)圖像數(shù)據(jù)進(jìn)行緩存處理,然后二次提取最值。在程序?qū)崿F(xiàn)上,為了簡便起見,在此利用前一幀數(shù)據(jù)的灰度最大值和最小值來代替當(dāng)前幀的最大值最小值。這樣對(duì)當(dāng)前幀遍歷求取最值,然后應(yīng)用到下一幀圖像中去,這里認(rèn)為前后幀相關(guān)性比較大,不會(huì)對(duì)算法造成很大影響。
2.2 偽彩處理
經(jīng)黑白相機(jī)輸入的圖像數(shù)據(jù)經(jīng)過協(xié)議轉(zhuǎn)換處理后得到的是SDI接口視頻YCbCr格式中亮度Y分量,這時(shí)將CbCr在程序里填充80h,就構(gòu)成YebCr信號(hào),而后用于輸出顯示,為了增強(qiáng)顯示效果,顏色更加能豐富人眼的視覺效果,下面給出一個(gè)算法將灰度轉(zhuǎn)換為偽彩色。
實(shí)現(xiàn)偽彩處理,通常是把當(dāng)前像素灰度值作為存儲(chǔ)地址查找RGB偽彩碼表,將碼表中對(duì)應(yīng)的RGB三色值用RGB轉(zhuǎn)換到Y(jié)ebCr彩色區(qū)間,而后輸出偽彩圖像。在FPGA里實(shí)現(xiàn)的基本方法是最大限度地利用FPGA的IP核,將RGB碼表寫到FPGA的內(nèi)嵌RAM核里,在程序中依次遍歷查找表和計(jì)算下面的公式計(jì)算出相應(yīng)的CbCr值并且輸出。
R=1.164(Y-16)+1.596(Cr-128)
G=1.164(Y-16)-0.813(Cr-128)-0.391(Cb-128)
B=1.164(Y-16)+2.018(Cb-128)
2.3 畫幅縮放
圖像的畫幅縮放也被稱為圖像重采樣,它是視頻處理中的一項(xiàng)重要技術(shù)。在SDI顯示輸出模塊中,由于標(biāo)清SDI顯示畫幅分辨率是720× 576,前端輸入CameraLink或者其他接口的圖像分辨率隨機(jī),所以必然會(huì)用到圖像畫幅縮放,否則,如果圖像分辨率超出SDI的這個(gè)范圍,就會(huì)導(dǎo)致顯示不全,如果分辨率小于這個(gè)范圍,就會(huì)導(dǎo)致有黑框,直接影響后續(xù)的顯示效果。
目前畫幅縮放的算法種類繁多,但基本方法都是插值運(yùn)算方面的算法,例如最近鄰插值、雙線性插值以及立方卷積插值算法等,但最近鄰插值算法在亮度變化比較快的圖像邊緣比較粗糙;立方卷積插值算法非常復(fù)雜而且運(yùn)算量大,不滿足實(shí)時(shí)處理?xiàng)l件。同前面2種插值算法比較,雙線性插值算法運(yùn)算量少、實(shí)時(shí)性高,適合于在FPGA內(nèi)部實(shí)現(xiàn)。
如圖3所示,假設(shè)原始圖像中的某點(diǎn)(x,y),則相鄰的右側(cè)和下方像素點(diǎn)位置為(x+1,y),(x,y+1),(x+1,y+1),假設(shè)它們的灰度值分別是P1,P2,P3,P4,在水平方向和垂直方向上的位移都是單位1,并假設(shè)待插入點(diǎn)的位置坐標(biāo)為:(x+dx,y+dy)。
那么根據(jù)雙線性插值算法原理得到插入點(diǎn)的灰度值為:
P’(x+dx,y+dy)=(1-dx)(1-dy)P1+dx(1-dy)P2+dy(1-dx)P3+dxdyP4
化簡后得到:
P’(x+dx,y+dy)=P1+(P2-P1)dx+(P3-P1)dy+[(P4-P3)-(P2-P1)]dxdy
從上式看出,當(dāng)知道待插值點(diǎn)的偏移距離dx和dy后,那么該插值像素點(diǎn)的灰度值可根據(jù)周圍的4點(diǎn)得到。該系統(tǒng)中的畫幅縮放處理正是采用雙線性插值算法,其在FPGA內(nèi)部實(shí)現(xiàn)的具體功能如框圖4所示,主要由數(shù)據(jù)緩存單元、雙線性插值單元、插值系數(shù)控制單元組成。
在實(shí)現(xiàn)圖像縮放算法以前,首要算出圖像的縮放因子k。這里以一行圖像為例,以單位長度“1”表示相鄰2個(gè)像素的距離,圖像縮放前的分辨率為A×1,圖像縮放后的分辨率為B×1,則縮放前后的圖像的像素縮放因子k=B/A。例如,分辨率為640x512的圖像縮放為720x576的圖像,則在水平方向上縮放因子k=1.25;垂直方向上的縮放因子k=1.125;根據(jù)不同的情況,在水平、垂直方向上的縮放比例因子不同。
根據(jù)圖4和插值的運(yùn)算公式,每經(jīng)過一個(gè)像素時(shí)鐘,插值系數(shù)dx,dy需要實(shí)時(shí)提供給插值運(yùn)算模塊,這就要求FPGA時(shí)序同步,并且FPGA各個(gè)功能模塊能夠有效配合。
3 實(shí)驗(yàn)結(jié)果及分析
將硬件系統(tǒng)和相機(jī)連接,該相機(jī)基本參數(shù)是320x256分辨率,14 b像素深度,幀頻25/50可調(diào)。通過PC機(jī)的RS 232串口連接轉(zhuǎn)一個(gè)轉(zhuǎn)換設(shè)備,使之滿足RS 422差分協(xié)議,以便發(fā)送命令給硬件系統(tǒng)和返回硬件系統(tǒng)狀態(tài)。
FPGA程序采用模塊化方式,分為圖像采集輸出模塊、雙緩存控制模塊、通信控制模塊、偽彩處理模塊、灰度拉伸模塊、畫幅縮放模塊和SDI時(shí)序生成模塊,其中偽彩處理模塊、灰度拉伸模塊和畫幅縮放模塊通過RS 422接口發(fā)送不同的指令給FPGA,就會(huì)觸發(fā)相應(yīng)的模塊工作,具體FPGA初始化過程中軟件工作流程如圖5所示。
SDI輸出顯示采用JVC公司專用的SDI監(jiān)視器,和電路板之間用75 Ω的同軸電纜連接,系統(tǒng)工作后測(cè)試了相應(yīng)功能,并將圖像顯示在監(jiān)視器上,圖6是顯示的未通過任何增強(qiáng)處理的7~14位圖像。
圖7是顯示的經(jīng)過灰度拉伸處理的圖像,將14位拉伸成8位。
圖8是經(jīng)過拉伸處理后再經(jīng)過偽彩色增強(qiáng)處理的圖像。圖9是經(jīng)過偽彩色增強(qiáng)處理的拉伸圖像再進(jìn)行畫幅拉伸使之全屏顯示。
4 結(jié)語
本文設(shè)計(jì)了一種基于SDI接口輸出的圖像顯示系統(tǒng),在FPGA里面封裝了灰度拉伸、偽彩色處理以及畫幅拉伸增強(qiáng)算法函數(shù),幾種算法可以單獨(dú)調(diào)用,也可以串行一塊工作。實(shí)驗(yàn)結(jié)果表明,該系統(tǒng)可以很穩(wěn)定地將Camera Link接口或者千兆網(wǎng)口輸入圖像經(jīng)協(xié)議轉(zhuǎn)換為標(biāo)清SDI輸出,并可以把灰度很低的圖像進(jìn)行對(duì)比度增強(qiáng),極大增強(qiáng)了人眼的視覺效果,由于SDI轉(zhuǎn)換協(xié)議以及各個(gè)增強(qiáng)算法都在FPGA內(nèi)部實(shí)現(xiàn),完全可以達(dá)到資源優(yōu)化利用和實(shí)時(shí)性要求。