趙 陽,孫宏海,楊 航,孫海超,趙 瑜
(1.中國科學院長春光學精密機械與物理研究所, 長春 130033;2.中國科學院大學, 北京 100049; 3.中科院航空光學成像與測量重點實驗室, 長春 130033)
高幀頻成像系統又稱高速相機,具有幀頻快、數據傳輸速率大的特點,對許多領域的研究工作具有重要的輔助作用。比如,在國防軍事領域可利用高速相機捕捉高速飛行的動態目標運動軌跡[1-2]。在科學研究中,高速相機可以記錄高速變化的實驗過程,提供更高時間分辨率的實驗數據[3-4]。高幀頻成像系統的核心是高速圖像傳感器。隨著固態圖像傳感器技術的發展,CMOS圖像傳感器因具有集成度高、工藝成熟等特點,內部集成了多路AD轉換,可以實現并行傳輸,被廣泛應用于高速成像系統設計中[5-6]。
目前,國內外已經開展了一些CMOS傳感器在高分辨率高幀率下的應用研究工作。文獻[7]實現的相機成像幀頻為500 fps,分辨率為1 024×1 088,但最終存入的SD卡的儲存容量限制了拍攝時長。文獻[8]將獲取到的分辨率為2 048×2 048、幀頻為150 fps的圖像存入由SATA控制器組成的磁盤陣列中,能實現長時間拍攝與存儲,但是幀頻較低,不能即時處理。文獻[9-11]采用CameraLink、以太網等高速數據接口對CMOS傳感器捕獲到的圖像進行實時傳輸,能解決拍攝時長受限于相機自身存儲容量的問題。但是,為了獲得好的成像效果,獲取數據后仍需對圖像進行預處理,整個過程較為繁瑣,計算機在處理高速相機輸出的大量數據時也存在一定困難。一些圖像預處理與自動調光的算法,如文獻[12]提出的多曝光融合算法、文獻[13-14]提出的區域加權調光算法和文獻[15]提到的指數平滑法能夠提升圖像視覺效果和相機工作環境適應能力,但其硬件實現僅限于較低幀頻、低分辨率的相機。
采用LUXIMA公司生產的高速CMOS傳感器LUX13HS,在Xilinx Ultrascale系列FPGA上設計了CMOS傳感器成像控制單元、高幀頻圖像數據采集單元、緩存單元與傳輸單元,實現了一個具有自動調光和圖像預處理功能的高幀頻成像系統。在分辨率為1 280×720時,成像幀頻達到1 666 fps,實時傳輸幀頻達到555 fps。
將高幀頻成像系統分為高速成像模塊、主控模塊和高速接口模塊3個部分,系統結構和相機整機實物如圖1所示。

圖1 高幀頻成像系統結構框圖與系統實物圖
高速成像模塊由相機鏡頭、CMOS圖像傳感器LUX13HS及其相關電源構成。CMOS圖像傳感器將經過鏡頭成像的光信號轉化為電信號,輸出給主控模塊。主控模塊采用Xilinx公司的Kintex Ultrascale系列現場可編程門陣列XCU060,相機整體各芯片的驅動時鐘及控制信號均由該模塊提供。同時,在主控模塊讀取圖像灰度信息與直方圖信息,自適應控制曝光時長,將圖像在DDR4中進行緩存與幀采樣,進一步預處理。處理后的圖像進行并串轉換,經由高速CameraLink接口實時傳輸。
FPGA頂層設計結構如圖2所示。

圖2 FPGA頂層設計結構框圖
LUX13HS是LUXIMA公司開發的高幀頻CMOS圖像傳感器芯片。該芯片擁有100萬像素,有效像素為1280×864,對應432個行輸出地址,支持最大核心時鐘為166 MHz,滿幅下幀率可達到3 500 fps。在傳感器進行開窗時,可減小讀出的圖像數據量,提高成像幀頻。表1列出了該傳感器的參數。

表1 LUX13HS圖像傳感器參數
LUX13HS將每個像素的低2位與高8位分開從不同輸出通道輸出,因此可以靈活選擇相機輸出圖像深度。
LUX13HS單個像元由7個晶體管構成,具有全局快門的功能,保證了所有像元能同時啟動光積分,避免卷簾快門拍攝高速運動物體可能產生的果凍效應。圖3(a)展示了LUX13HS的像元結構,PD是光電探測器,SG是像素內存,AB門上控制信號‘PD_n’為低時擦除PD上的光電荷,為高時允許進行光積分。TX門上的‘TX_n’傳輸脈沖處于低電平使光電荷從PD上轉移到像素內存SG上,‘TX2_n’作為第2傳輸脈沖,低電平從SG中移除電荷。RST上‘PRST_n’低電平會重置SG,但傳感器會在像素讀出時自動重載,所以一般置為低電平。
LUX13HS內部框圖如圖3(b)所示,傳感器擁有80個差分輸出端口,感光區域可以分成4個象限。結構上分為頂部讀出模塊和底部讀出模塊兩個部分,每個讀出模塊包括采樣電路、放大器和帶有可讀逐次逼近寄存器的ADCs(模數轉換器)寄存器,具有相互獨立的控制信號和時鐘,使得頂部讀出模塊和底部讀出模塊可以同步輸出不同地址數據。傳感器外部I/O、內部結構、電源資源左右對稱,保證傳感器的高幀頻特性。

圖3 LUX13HS結構圖
LUX13HS傳感器提供reduced工作方式。在這種工作狀態下,傳感器內部核心時鐘變為正常模式的1/2,輸出端口減少為40個,當可使用的I/O接口具有數量限制時可使用該模式。由于傳感器核心時鐘降低,不再受最高時鐘限制,因此該模式幀頻高于正常模式幀頻的1/2,可以達到 2 500 fps。
CMOS圖像傳感器通過光電效應的原理,將感受到的光信號轉化為光電荷,光電荷通過內部的A/D變化為數字信號輸出。由FPGA對LUX13HS圖像傳感器提供驅動時序,并進行數據接收采集。
3.1.1CMOS圖像傳感器控制
LUX13HS圖像傳感器擁有Start Row控制信號(“st_row_n”)和Start Read控制信號(“st_read_n”)。Start Row信號讀取一個地址對應的光電荷并進行模數轉換,Start Read信號控制數據輸出。為了實現最大的數據吞吐,LUX13HS頂部和底部各有1個Start Row和Start Read控制信號,可以實現頂部與底部同時對不同地址進行AD轉換和讀出。
LUX13HS控制行時序如圖4(a)所示,傳感器使用二進制編碼進行尋址,每個地址對應兩行連續的像素數據,在1 280×720分辨率下共使用360個地址。給定了一個行地址n后,需要6個時鐘等待地址穩定,之后發送Start Row信號通過傳感器底部讀出模塊進行模數轉換。底部AD轉換進行到一半時,更改地址為n+1,地址穩定后提供頂部Start Row信號,可以利用頂部讀出模塊對地址n+1對應的行進行AD采集。AD采樣結束后發送Start Read脈沖使傳感器輸出數據,實現了頂部讀出模塊和底部讀出模塊同時工作,DA采集和數據輸出同步進行,保證CMOS傳感器高幀頻特性。FPGA實現行時序流程如圖4(b)所示。

圖4 LUX13HS圖像傳感器行時序圖及其實現流程框圖
圖5展示了CMOS傳感器幀時序,輸出每幀圖像數據之前將PD_n拉高,維持時間長短決定了CMOS傳感器曝光時長。曝光結束之前TX_n信號的低電平脈沖可以傳送出采集到的光電荷,之后再通過行時序控制每行地址對應像素數據輸出。

圖5 LUX13HS行時序圖
LUX13HS工作在Reduced模式下,主時鐘100 MHz,每個時鐘輸出4個像素數據,頂部輸出模塊和底部輸出模塊同步輸出兩個地址對應的4行數據。輸出完整一行圖像需要1 280÷4=320個周期,完整輸出一幀720行需要320×720÷4=57 600個時鐘周期。為了給光電荷從像元轉出以及清除上一次光積分的剩余電荷提供充足的時間,設置每幀60 000個時鐘周期進行輸出。由此,可以計算出LUX13HS傳感器成像幀頻為100M÷60 000≈1 666 fps。
3.1.2CMOS傳感器偏置電壓供應
為了使LUX13HS傳感器正常工作,需要提供17種偏置電壓,如表2所示。

表2 CMOS傳感器偏置電壓 V
其中VADL和VTXL可以接地實現,配置CMOS傳感器寄存器內部產生VLN、VLNA和VLNC電壓。剩余偏置電壓通過Analog公司生產的多通道12位DAC芯片AD5674R提供,該芯片通過SPI協議進行配置,具有高相對精度、低增益誤差和低溫漂特點,滿足CMOS傳感器對偏置電壓的要求。為了增強DAC輸出的帶載能力,降低輸出電阻并實現隔離,在DAC輸出和偏置電壓輸入之間加入跟隨器。
3.1.3CMOS圖像傳感器數據采集
圖6是FPGA數據采集與圖像信號恢復結構,CH使用傳感器數據輸出通道,FRE代表時鐘頻率,虛線將圖示結構分為CMOS傳感器時鐘域與FPGA內部時鐘域。由FPGA為傳感器提供MCLKB和MCLKT時鐘信號與驅動信號,CMOS傳感器輸出串行數據與伴隨數據的時鐘PCLK和DCLK,通過FPGA內部iSerdes3進行并串轉換。

圖6 FPGA數據采集與圖像信號恢復結構框圖
LUX13HS同時輸出4行數據,每行數據單獨存入1個雙口Ram,利用乒乓緩存實現Ram的存取相互獨立并同時進行。最后,多路選擇器選擇4行按先后次序輸出,恢復出圖像信號。
整個系統采用XCU060作為主控芯片,可依據不同的需求進行編程,實現不同的硬件功能,最小化電路板的空間與整個系統的體積。在主控模塊實現的功能有:各芯片工作寄存器參數配置、邏輯時序控制、高速圖像數據采集與解碼、直方圖與灰度信息提取、圖像預處理與傳輸。由于圖像按行進行讀取和傳輸,還需通過外部儲存器作為成像暫存器。系統引入DDR4芯片,總位寬64 bit,總容量為2 GB,數據傳輸速率最高為3 200 MT/s,可滿足系統實時傳輸性能要求。
3.2.1圖像數據跨時鐘域處理
在進行圖像數據采集、DDR4存取與打包發送時,會遇到前后模塊位寬、時鐘不一致的情況。例如,在圖像從DDR4讀取打包發送的過程中,采用Vivado上MIG DDR4 IP核實現對DDR4的控制。IP核數據時鐘為300 MHz,位寬為512 bit,但CameraLink Full模式數據時鐘為80 MHz,位寬為64 bit,必須對數據進行跨時鐘域處理。一般采用先存再取的方式時,存取等待時間會加長行場之間的開銷時間,降低相機幀頻。所以采用乒乓緩存,同時對雙口Ram進行讀寫操作,示意圖如圖7,n為一個偶數,表示Ram的地址總數。

圖7 Ram讀寫實現乒乓緩存過程示意圖
在初始化時,寫時鐘將一行圖像數據存入Ram地址0~(n/2-1)中,同時讀取(n/2)~(n-1)地址中的數據,實現讀寫同步進行。在讀寫均完成之后,交換讀寫地址,從地址0~(n/2-1)中讀取剛寫入的一行數據,并將新的一行數據寫入地址(n/2)~(n-1)中。
3.2.2基于FPGA的圖像直方圖獲取
在獲取圖像直方圖信息與平均灰度信息時,如何做到通過FPGA實時提取一幀圖像數據信息并進行處理傳輸是設計的重點。由于FPGA內部儲存空間有限,因此通過DDR4對已經提取過的數據進行緩存,獲取到整個幀的像素統計數據后,再從DDR4中提取對應圖像進一步處理傳輸。
FPGA通過譯碼器和計數器組成的結構獲取圖像直方圖數據。譯碼器讀取一個像素值,并在對應灰度級輸出口輸出1個高電平脈沖,計數器在檢測到高電平脈沖后加1。本設計中,FPGA將恢復出的圖像數據按行傳輸,多個像素同時輸出時,有可能會出現多個具有相同灰度值的像素。這種情況下,利用1個譯碼器只能輸出1個計數脈沖,會造成計數器計數錯誤,根據DDR4輸入數據位寬設置譯碼器和計數器數量會耗費大量FPGA邏輯資源,若減少同時輸出的像素個數,則為了保證實時傳輸需要提升像素頻率。綜合考慮性能要求,設定每時鐘向譯碼器傳輸8個像素,像素時鐘為200 MHz,圖6將8個像素輸入1個直方圖統計模塊,統計完一幀數據后再利用加法器獲取完整直方圖信息進行儲存。對于256灰度級、1 280×720的圖像,共 921 600個像素。FPGA需要產生8×256=2 048個20位計數器,以進行直方圖信息統計。
為了保證在一幀圖像進行直方圖均衡化同時獲取下一幀圖片的信息,采用雙口Ram實現乒乓緩存,以灰度值作為Ram地址進行存取。
3.2.3直方圖均衡化處理
直方圖均衡化是通過累計直方圖將圖像原直方圖變化成均勻分布的形式,可增加像素灰度動態范圍與圖像對比度。直方圖均衡化的變換函數T(r)如式(1)所示。其中,r代表歸一化后的圖像原灰度值,s代表進行直方圖均衡化以后的圖像灰度值,pr(r)代表隨機灰度值r的概率密度,T(r)即原圖像直方圖的累積分布函數。
在數字圖像處理中,像素值是離散化的,因此用各個灰度值出現頻率代替概率,變換函數T(rk)的離散形式可以表示為式(2)。其中k表示歸一化前的灰度值,rk代表歸一化后的灰度級,sk表示變換后的灰度值,N表示一幅圖像的總像素個數,ni代表灰度級為i對應的像素個數。

(1)

(2)
FPGA實現乘除法以及浮點數運算較為困難,因此直接將歸一化的像素值轉化為256灰度級圖像。原灰度值k與直方圖均衡化以后的灰度值t對應關系見式(3)。一些設計通過乘法器和除法器IP核實現式(3)的計算[16],但這樣會增加幀開銷時間與FPGA的邏輯資源占用。本設計采用移位運算,乘以255可以將累計直方圖按位左移log2255≈8位實現,除以圖片總像素個數921 600可以通過將累計直方圖右移log2921 600≈20位實現。
(3)
利用Matlab將此種運算方法與浮點運算做比較,得到累計直方圖與均衡化后灰度值對應關系如圖8(a)所示??梢钥闯?,在灰度級較高的位置誤差會明顯增大,這是因為隨著數據位數增加,較高位取值對數據值大小的影響增加。但是誤差與累計直方圖成正比,經過擬合得到誤差函數為:
(4)
乘0.000 03通過將累計直方圖右移|log20.000 03|≈15位進行計算。最終,均衡化后的灰度值由累計直方圖右移12位加右移15位得到。進行誤差補償后,移位運算得到的映射曲線與浮點運算映射曲線相重合,誤差接近于0,如圖8(b)所示。此種運算方式非常符合FPGA的運算特性,也保證了計算的精度。

圖8 累計直方圖與均衡化后灰度值映射關系曲線
3.2.4自動調光算法
CMOS傳感器獲取的圖像亮度取決于像元內部光電荷積累的數量,而光電荷積累多少和當前曝光量之間有如下關系:
Q=ηqΔneoATc
(5)
其中:η代表CMOS器件量子效率;q為電子電荷量; Δneo是入射光的光子流速率;A是器件的感光面積;Tc為積分時間。可以得出,在已經選取好CMOS器件、并且光照條件固定的情況下,光電荷積累數量與積分時長Tc成正比。因此,更改積分時間長短是一種較為靈活的調光方法。
若已知前一幀圖像平均灰度值Rp與曝光時間Tp,為了達到目標灰度值Ri,可以通過式(6)計算后一幀需設置曝光時間Ti。
(6)
在設定目標平均灰度值時,應注意不能設置為固定值,因為系統無法保證獲取到圖像灰度值剛好為某一確定值,否則可能會導致超調震蕩。只能將目標灰度值選在一個范圍區間內,當幀平均灰度值落在取值區間內時,即調整完成。經測試區間取[Ri-15,Ri+15]時可以獲得較好的成像效果。
LUX13HS提供電子全局快門,通過信號AB_n高電平持續時鐘周期數控制曝光時長。在上一幀圖片輸出時控制AB_n在一定范圍內成高電平,可以開始曝光,曝光時間為N×TH,TH為1個周期時間,N為持續周期數。因此N越大,CMOS曝光時間越長,且由于N可以選擇為小于幀持續周期數的任意1個正整數,可以實現無極調光。當前獲取圖像平均灰度值落在區間右側時,逐漸減小N的取值,縮短曝光時長。若當前圖像平均灰度值落在區間左側,則增大N的取值,提高曝光時長。
3.2.5幀采樣
LUX13HS工作在100 MHz的時鐘下,成像幀頻達到1 666 fps。由于傳輸接口傳輸速率限制,為了保證實時傳輸的穩定性,必須進行幀采樣。在FPGA從CMOS傳感器輸出數據并恢復出行場信號后,將數據緩存入DDR4,最多可存入2 GB/(1 280×720×8 bit)≈2 330幀。每存入3幀,讀寫仲裁模塊允許讀取寫入的第1幀,進行3∶1采樣,存滿2 330幀后回到初始地址,繼續下個循環,保證圖像連續性。同時,在獲取圖像直方圖時,也只獲取連續寫入DDR4的3幀中第1幀圖像直方圖,用于從DDR4讀取時進行直方圖均衡化。
高速傳輸接口傳輸帶寬保證了高速相機采集圖像數據的實時傳輸速率。目前常用的工業相機接口及其性能見表3。系統在進行對比之后,選擇CameraLink接口Full模式進行高速圖像傳輸。

表3 主流接口性能比較
CameraLink接口是一種抗干擾能力強、傳輸帶寬較高、應用非常廣泛的接口,一般相機設計中,采用專用DS90CR287/DS90CR288A將FPGA輸出的28位并行數據轉化為4路串行差分信號傳輸[17-18]。若采用此種設計,Full模式需要3個并串轉換芯片,極大增加了相機的體積,因此本系統采用FPGA的oSerdes3原語直接實現并串轉換。這種方式克服了并串轉換芯片帶寬對接口最大傳輸速率的限制,選擇合適的圖像采集裝置可以大幅提升數據傳輸速率[19]。CameraLink數據傳輸速率為80 MHz,每行和每幀的時間間隔為40個時鐘周期,每個時鐘傳輸8個像素。因此,對于1 280×720的圖像,能夠支持最大實時傳輸幀率達到555 fps。
系統使用CameraLink接口的2個控制信號CC1和CC2,用于設置相機是否啟用直方圖均衡化功能和自動調光功能。除此之外,CameraLink接口提供了兩個差分對信號,用于主機端與相機進行串行通訊。SerTFG是相機發送至圖像采集卡的串行信號,SerTC用于相機接收主機發送的串行數據。串行數據一幀為10位,包含1個起始位和1個停止位,利用上位機可以靈活配置相機系統自動調光目標灰度值,FPGA根據給定灰度值自動設置調光范圍。
采用CameraLink圖像采集卡采集相機輸出的圖像數據。通過上位機顯示并實現串行通訊與控制,在FPGA內部利用1個計數器計算LUX13HS傳感器的成像幀頻。
利用ILA調試核抓取計數器信號,觀察到CMOS傳感器每秒獲取了1 666幀圖像,上位機顯示實時傳輸幀頻約為555 fps。圖9展示了未啟用相機自動調光與直方圖均衡功能和啟用后的圖像??梢钥闯?,在過曝時啟用自動調光能夠有效降低圖像亮度。在圖像暗部細節不清晰時,啟用直方圖均衡化可以顯著增強圖像對比度。

圖9 相機測試圖像
經測試發現:本設計實現的高幀頻成像系統能夠滿足許多基本的工業成像應用需求;自適應調光和預處理功能在場景亮度均勻情況下,能使成像圖像呈現較好的顯示效果;實時傳輸功能在一定程度上解決了傳統高速相機拍攝時間短、后續處理工序復雜的問題。但是,相機實時傳輸幀頻還有提升空間,緩存入DDR4的所有圖像由于接口帶寬限制無法全部傳出;采用平均灰度值作為自動調光的反饋信號,在某些背景與目標亮度差異較大的情況下可能無法獲得很好的調光效果。
采用高速CMOS傳感器LUX13HS,提出了一種具有自動調光、實時預處理功能的高幀頻成像系統設計方案。通過FPGA實現sensor控制、數據讀寫、傳輸、乒乓緩存、幀采樣,保證了成像幀率高達1 666,實時傳輸幀率達到555 fps。在打開自動調光功能,設置合理參數,并啟用直方圖均衡化以后,獲得了良好的圖像效果,為后續研究提供了可行的高幀頻成像系統上的自動調光與圖像預處理設計方案。通過提升CMOS傳感器時鐘頻率、更改高速傳輸接口(如CoaXPress或CameraLink HS)等方式,獲取更優的實時傳輸性能。若采用較為復雜的加權灰度值作為自動調光反饋信號,能夠進一步提升相機對拍攝場景的適應能力。