鄭 靜,張起貴
(1.山西綜合職業技術學院 計算機工程系,山西 太原 030006;2.太原理工大學 信息學院,山西 太原 030024)
一體化攝像機因其體積小巧、價格低廉,安裝簡便等特點廣泛應用于監控、教育、醫學等領域。一體化攝像機根據使用對象的情況和要求來進行設計[1]。基于FPGA器件的可并行處理能力及其可重復編程的靈活性[2],提出了一種以DSP+FPGA+ASIC為架構的系統解決方案,改善了以往一體化攝像機功能擴展困難的問題,提高了圖像的質量,擴大了其應用范圍。

圖1 系統硬件框圖Fig.1 Diagram of system hardware
系統硬件框圖如圖1所示。視頻采集模塊采用SONY公司攝像機套件,主要包括470 K像素PAL制CCD ICX229AK,AFE (模 擬 前 端 )CXA2096N和 專 用 DSP CXD4103。該模塊先將CCD采集到的圖像數據經DSP處理后, 輸出分辨率為 748×584的 PAL制 YUV (422)ITUREC656格式的數字視頻信號,同時輸出行、場參考信號和像素時鐘信號。這些信號先經過FPGA圖像處理模塊,實現自動聚焦、4幅圖像存儲、鼠標驅動及劃線功能、實時圖像與存儲圖像上下左右對比、OSD疊加、圖像凍結、負片顯示、鏡像、彩色黑白選擇輸出等功能。處理后的信號最終送到視頻顯示模塊,經過專用集成電路(PW1226)處理后產生RGB圖像信號及標準SVGA格式的行、場同步信號,使圖像傳感器采集的圖像可在VGA顯示器上實時顯示。
圖2為視頻采集模塊硬件框圖。系統上電后,DSP從EEPROM中讀取初始化信息。初始化完成后,DSP產生CCD行、場時序信號,同時產生AFE(模擬前端)的采樣時序信號。CCD在行、場時序作用下,送出采集的原始圖像數據,在AFE經過CDS(相關雙采樣)、AGC(自動增益控制)后,將量化后的信號送入DSP。DSP內置10 bit的ADC將量化信號轉為數字信號,對其進行噪聲濾波、電平箝位、自動白平衡、邊緣增強等處理后,輸出PAL制YUV(4∶2∶2)格式的數字視頻信號。同時DSP直接輸出復合視頻及S-VIDEO。

圖2 視頻采集模塊硬件框圖Fig.2 Hardware diagram of video module
CCD周邊電路設計如圖3所示。ICX229AK為1/4英寸PAL補色圖像傳感器,其有效分辨率為PAL制752(H)×582(V),工作電壓為12 V,采用14引腳DIP封裝;采用超 HAD技術,具有很高的靈敏度并能獲得高飽和度的視頻信號;具有畫質細膩、色彩鮮艷、信噪比高等優點。
該CCD采用12 V和-5 V電源供電,DSP時序發生器同時發出行、場時序驅動信號,場驅動信號通過CXD1267進行放大整合后生成供給CCD的場時序驅動信號V1、V2、V3、V4,與DSP發出的行信號H1和H2同時送到CCD,使其開始正常工作,采集到的電信號經過場效應管2SK1875放大,得到模擬輸出信號CCDOUT,該信號送至采樣電路CXA2096。
C27,R27,VD6,C23構成自舉升壓電路, 把 CXD1267 發出的VSUB信號轉換為CCD可接受的電壓幅值,即SUB信號,它是電子快門控制信號,通過控制傳感器像素表面的電荷積累時間操縱快門。當電子快門關閉時,對于PAL攝像機,CCD電荷累積時間為1/50 s,電子快門則以311步的基本單位覆蓋,其范圍1/50~1/10 000 s。當電子快門速度增加時,在每個視頻場允許的時間內,聚焦在CCD上的光減少,結果將降低攝像機的靈敏度。
AFE周邊電路設計如圖4所示。

圖3 CCD電路原理圖Fig.3 Principle diagram of CCD circuit

圖4 CXA2096N電路原理圖Fig.4 Principle diagram of CXA2096N circuit
CXA2096N采用3.3 V供電,其主要作用是對模擬電信號進行采樣、保持、放大,封裝是24引腳SSOP(Plastic)。CCD送出的模擬信號CCDOUT,經2SK1875放大后傳輸給CXA2096N,經CXA2096N采樣、保持、放大后得到 DRVOUT信號傳輸給DSP。CXA2096N是信號進行模數轉換前的最后一個環節,其重要性不言而喻,同樣地,CXA2096N也是在DSP時鐘發生器的時序驅動信號下完成其一系列工作的。其中最重要的3個信號分別是CCDLEVEL、OFFSET和AGCCONT。
CCDLEVEL是CXA2096N的輸出信號,這個信號直接反映了CCD采集到信號的電平大小、變化程度和范圍。CCD正常情況下采集到的黑電平信號約2.7 V。
OFFSET是CXA2096N的輸出信號,變化范圍1.5~3 V,這個信號反映的是一個偏移量,DSP可以通過它改變CXA2096N的采樣偏置電壓,這一改變直接反應在視頻顯示處理板中,體現到最終的圖像顯示效果上。OFFSET越大,圖像整體向明亮的區域變化,反之,則往黑暗的區域變化。因為OFFSET信號使得圖像整體偏移變化,用一個形象的比喻,它是一個“加”的關系,即圖像數據整體增加了一個偏置電平。AGCCONT也是CXA2096N的輸出信號,變化范圍1.5~3 V,這個信號反映的是一個增益量,所有一體化攝像機都有一個來自CCD的信號放大到可以使用水準的視頻放大器,其放大量即增益,等效于較高的靈敏度,可使其在微光下靈敏,然而在亮光照的環境中放大器將過載,使視頻信號畸變。為此,需利用一體化攝像機的自動增益控制(AGC)電路去探測視頻信號的電平,適時地開關AGC,從而使攝像機能夠在較大的光照范圍內工作,即動態范圍,在低照度時自動增加攝像機的靈敏度,從而提高圖像信號的強度來獲得清晰的圖像。外部單片機或DSP可以通過改變CXA2096N的放大增益系數,直接反應在視頻顯示處理板中,體現到最終的圖像顯示效果上。AGCCONT越大,圖像整體向明亮的區域變化,反之,則往黑暗的區域變化。因為AGCCONT信號使得圖像整體偏移變化,即圖像數據整體“乘”增益系數。
CXA2096N的采樣需要一個基準電壓,否則采樣的數據會有偏差,這對將來的視頻數據處理影響非常大的。采樣校準電壓VRT和VRB一定要保證準確,VRT為2.35 V,是采樣上限;VRB為1.35 V,是采樣下限。同時VRT和VRB輸出給A/D轉換器,作為其量化的參考電平。
該模塊的邏輯結構如圖5所示。該模塊基于FPGA設計,實現自動聚焦、自動光圈控制、幀率提升、OSD以及SPI通信功能。FPGA采用XILINX公司的XC3S250E。內部功能采用自頂向下的層次式設計方法[3],并用VHDL硬件描述語言實現,最終由ISE 6.0綜合生成位流,固化在外部的存儲器中。

圖5 FPGA圖像處理模塊的邏輯結構Fig.5 Logical structure of FPGA image
FPGA將接收的YUV(4∶2∶2)格式的信號進行格式識別和轉換,然后在SDRAM中把連續2場圖像緩沖為一幀圖像,下一幀圖像緩沖在另一片SDRAM中,形成了連續切換視頻雙緩沖結構。當其中一片SDRAM輸入圖像時,另一片在VGA顯示控制器的控制下通過輸出FIFO以SVGA@60 Hz的點速率輸出圖像,具體過程如下:
該模塊首先對輸入信號進行奇偶場識別,奇場掃描的第一行有374個像素,偶場掃描的第一行有748個像素,通過對一場的第一行數據計數判斷,可知當前場為奇場或偶場,然后從下一個奇場開始接收數據。這樣確保了相鄰兩場為一幀完整的圖像。此模塊為深度748、寬度16 bit的異步FIFO(先進先出),寫地址計數器為0到748的循環計數器,當其計數到300或700時,給主控制器發送讀信號,主控制器隨后產生FIFO的讀使能信號,使讀使能信號在連續的374個讀時鐘周期內一直有效,即可連續讀出374個數據。本設計讀時鐘頻率大于寫時鐘頻率,不會產生數據寫滿溢出的現象。
主控制器通過對輸入緩沖的讀請求信號和輸出緩沖的寫請求信號處理,實現對2個SDRAM的讀、寫操作切換。該模塊首先完成對SDRAM的初始化,SDRAM被設置成連續的全頁迸發模式。然后SDRAM進入正常工作狀態,準備接收讀、寫命令。當SDRAM在空閑狀態下,為保持其數據不丟失,必須對其定時刷新,一般要求64 ms內刷新4 096次,但是當SDRAM在進行讀、寫迸發時,自動刷新命令會打斷讀、寫,從而造成數據丟失。該設計在64 ms內對SDRAM至少進行4 096次讀、寫操作,所以可以不必對其刷新。當SDRAM讀、寫到374時,發出預充命令來停止迸發,同時關閉當前行,為下一次讀、寫作好準備。SDRAM被設置成迸發模式,迸發長度為374。
首先時序發生器利用40 MHz的主時鐘產生符合VESA標準的行、場同步信號,同時在行、場參考信號都有效,且 39<行計數器<788、19<場計數器<604時產生輸出緩沖的讀使能信號。輸出模塊為深度748、寬度16 bit的異步FIFO。寫時鐘和讀時鐘同為40 MHz的主時鐘 ,當讀使能有效時,啟動讀計數器從0到799循環計數。該設計每隔10個數據將前一個數據重復讀出,直到輸出800個數據。當讀計數器計到100或500時,該模塊向主控制器模塊發寫請求命令。在行、場消隱期間,讀使能信號無效,所以不會產生讀空現象。
經過PW1226視頻顯示模塊進一步濾波,消除行場間閃爍效應,提高畫質,并可平滑放大到1 024×768的分辨率,最終輸出SVGA或XGA的標準的VGA視頻接口信號。
同時FPGA還可以通過內部的SPI模塊實現對DSP和CXD4103的寄存器設置,使其正常工作。
首先,FPGA通過對圖像亮度信號Y的處理來實現自動聚焦功能。選擇常用的灰度差分法作為聚焦評價函數[4],選取中心像素過去的4個像素(左側、左上側、右側、右上側4個像素)計算差分值。
由于聚焦評價函數需要用中心像素所在行及上一行臨近的4個像素,所以需要在FPGA內部使用2個雙口RAM做相鄰兩行數據緩存區,每個雙口RAM容量為800×8 bit。讀寫選擇模塊將一幀圖像的第1行數據寫入RAM1,將第2行數據寫入RAM2。在寫入RAM2一個時鐘周期后,開始讀出RAM1和RAM2中的數據,送到聚焦評價函數算法實現模塊,以RAM2中的圖像像素為中心像素計算亮度差值絕對值和,當第3行圖像數據到來時再次寫入RAM1,同樣在寫入RAM1一個時鐘周期后,讀出RAM1和RAM2中的數據并送到聚焦評價函數算法實現模塊,同樣以RAM1中的像素為中心計算亮度差值絕對值和,如此循環,得到一場的亮度差值絕對值總和。
圖6為聚焦評價函數實現模塊。圖中,聚焦評價函數實現模塊讀取的2行數據,由寫入寄存器選擇模塊來選擇中心像素所在行,寫入第2列寄存器。在時鐘同步作用下,每時鐘將像素右移進入下一個寄存器,同時寄存器reg11,reg12,reg13,reg21中的數據同reg22中的數據作減法,取得差值sum1、sum2、sum3、sum4,相加得到和 sum。 當一幀圖像結束,sum中的數據成為該幀的亮度差值和。當前幀計算的結果與前一幀的計算結果相比較,若當前幀的函數值大于前一幀的函數值,說明當前圖像比前一幀圖像清楚,則輸出結果OUT為‘1’,反之則輸出‘0’。

圖6 聚焦評價函數實現模塊Fig.6 Module of auto-focusing function realization
采用爬山搜索算法確定光學聚焦位置。在自動聚焦使能信號有效后,驅動馬達從初始位置正轉8步,反轉8步,然后再反轉8步,正轉八步,回到初始位置。每轉1步檢測聚焦評價函數模塊的輸出out值,將4個8步內檢測到‘1’的個數分別保存為 sum1、sum2、sum3、sum4, 接下來進行統計分析,如果sum1≥6,則認為正轉方向為聚焦方向;若sum2≥6則認為反轉方向為聚焦方向;如果sum1、sum2都未大于等于 6,則計算 sum1+sum4和 sum2+sum3;如果sum1+sum4≥sum2+sum3,則認為正轉方向為聚焦方向,否則認為反轉方向為聚焦方向。確定出聚焦方向后驅動步進馬達帶動鏡頭向聚焦方向一步一步轉動,每轉一步檢測聚焦評價函數算法模塊的輸出OUT值,若連續轉的2步輸出out都為‘0’,則認為超過最清晰位置,則驅動步進馬達倒退2步,鏡頭達到最佳聚焦位置。
步進馬達[5]驅動包括變焦馬達驅動和聚焦馬達驅動,變焦馬達實現變倍,聚焦馬達用來聚焦。變焦馬達和聚焦馬達的勵磁方式不同,變焦馬達采用2相勵磁方式,見表1。聚焦馬達采用的是1.2相勵磁方式,見表2。其中A+、A-分別代表A相繞組正端和負端功率橋控制信號,B+、B-分別代表B相繞組正端和負端功率橋控制信號。按照表中所示的電平信號,外加在步進馬達的兩組線圈上,利用線圈間脈沖的相位差產生的扭矩來驅動馬達步進工作。按照表中所示的脈沖順序,從左向右變化可實現步進馬達的反轉;反之則實現正轉。以變焦馬達驅動為例,在FPGA內設計一個狀態機,實現4個狀態間的狀態轉移,每一次變倍使能有效時,根據當前狀態轉移,變倍方向轉移到下一個相鄰狀態,輸出該狀態時對應的4個控制電平信號,驅動馬達轉動,實現變倍功能。需要注意的是,由于FPGA輸出脈沖信號的驅動電平和電流與步進馬達的驅動要求不匹配,應在FPGA輸出引腳外接驅動橋電路。

表1 2相勵磁方式Tab 1 2-phase excitation

表2 1-2相勵磁方式Tab.2 1-2-phase excitation
圖像的亮度與外界光照和光圈有關。自動光圈控制是在特定光照度下,通過計算圖像的亮度確定目標光圈孔徑,從而得到曝光合適的圖像。通過實驗,給出光照度(對應圖像亮度)與 HALL電壓值(δ1~δ5)之間關系曲線,如圖 7所示。 改變光圈孔徑并計算相應圖像亮度值,得到曲線上2點的坐標,便可確定對應當前光照度的曲線,曲線與基準光度值所對應直線的交點即是目標HALL電壓值(目標光圈孔徑)。

圖7 光度值與霍爾值對應關系Fig.7 Relationship between illuminance and HALL-voltage
由于曲線是非線性的,在FPGA中通過建立查找表存儲曲線。將橫軸分割為δ1~δ55個區域,每個區域內可近似用直線表示,查找表中只要存儲直線的斜率和起點坐標。光圈孔徑值(對應電路HALL電壓值)和對應光度值決定的2點即可確定當前的控制曲線。若光圈孔徑值處在 的邊界點,光圈馬達應向該區域的內部運動,以便2次取點都是在同一區域,保證2次取點落在一條直線上。
確定了光度值曲線,就可以沿著曲線調整光圈的開度?;鶞使舛人骄€與已確定的光度曲線交點必然對應一個特定的光圈開度值(特定的HALL電壓值)。在具體操作中,只需驅動光圈馬達來改變光圈孔徑,直至CPU得到指定的HALL電壓值,即為最佳曝光狀態。
OSD設計最重要的是視頻鼠標,以SVGA格式下的鼠標顯示為例。該模塊首先利用40 MHz的主時鐘產生符合VESA(視頻電子標準化協會)標準的分辨率為800×600、幀頻為60 Hz的標準SVGA格式的行、場同步信號,同時在行、場參考信號都有效時,產生一個使能信號給輸出緩沖模塊,作為輸出緩沖的讀使能。當行場計數器等于鼠標在屏幕中的坐標時,則顯示鼠標,否則顯示插值后輸出的圖像。
如將鼠標顯示成一個紅色的長方形,其長包含30個像素,寬包含10個像素,左上方為鼠標在水平和垂直方向的位移確定的坐標。該部分實現的VHDL描述為:


根據實際需要,還可將鼠標顯示成其他顏色和形狀,同時適合XGA等顯示格式。
基于FPGA設計了具有多輸出接口的一體化攝像機,采用FPGA實現了高分辨率圖像的實時顯示,增加了自動聚焦、自動光圈控制、圖像凍結、負片顯示、圖形文本選擇、彩色黑白選擇、OSD顯示等功能。并且FPGA還留有許多端口進行功能擴展。該系統設計把多種圖像處理算法以及系統控制功能集成到單片FPGA中,使得視頻輸出同時具有3種輸出接口形式,擴大了一體機的應用范圍。該系統在硬件結構和FPGA內部邏輯功能實現方面都具有良好的可升級特性。在PCB設計過程中,應注意高速數字信號的完整性問題以及模數混合設計的噪聲干擾問題[6],避免產生硬件設計帶來的不良影響。
在進一步研究中,還可實現圖像翻轉等功能,并可以通過改進圖像放大算法,以期得到更好的圖像質量。該設計可應用到實時監控、數字視頻展臺等方向,具有實時性高、圖像質量較好、功能可擴展等優點。
[1]范敦浩.圖像監控系統攝像機和鏡頭的選擇[J].通信電源技術,2003(4):23-27.FAN Dun-hao.The choosing of video camera and lens in surveillance system[J].Telecom Power Technologies, 2003(4):23-27.
[2]徐欣,于紅旗,易凡,等.基于FPGA的嵌入式系統設計[M].北京:機械工業出版社,2005.
[3]孟憲元,錢偉康.FPGA嵌入式系統設計[M].北京:電子工業出版社,2007.
[4]任四剛,李見為,謝利利.基于灰度差分法的自動調焦技術[J].光電工程,2003,30(2):53-55.REN Si-gang, LI Jian-wei, XIE Li-li.Automatic focusing technique based on gray scale difference method[J].Opto-Electronic Engineering,2003,30(2):53-55.
[5]劉寶廷,程樹康.步進電機及其驅動控制系統[M].哈爾濱:哈爾濱工業大學出版社,2003.
[6]Bogatin E.信號完整性分析[M].北京:電子工業出版社,2005.