王云峰,何 鑫,范正吉,景金榮,洪應(yīng)平
(中北大學儀器科學與動態(tài)測試教育部重點實驗室,山西 太原 030051)
在醫(yī)療領(lǐng)域,內(nèi)窺鏡是用來觀察人的內(nèi)部體腔的,通過它能直接觀察內(nèi)臟器官的組織形態(tài),提高了診斷的準確性,成為醫(yī)療診斷的可靠工具。結(jié)合醫(yī)用內(nèi)窺鏡施行的內(nèi)外科診療技術(shù)的諸多優(yōu)點,已成為醫(yī)學界的共識?,F(xiàn)代科技的進步推動著醫(yī)用內(nèi)窺鏡的技術(shù)產(chǎn)品迅速發(fā)展[1]。隨著科技的不斷進步,CMOS 攝像頭的尺寸也在不斷縮小,內(nèi)窺鏡在醫(yī)療領(lǐng)域的用途也越來越廣泛。同時對成像質(zhì)量的要求也越來越高。受限于半導工藝,內(nèi)窺鏡CMOS 輸出的圖像信號往往會帶有噪聲、色差等,故需要設(shè)計相應(yīng)的處理算法。由于醫(yī)用內(nèi)窺鏡的特殊用途,算法處理必須保證實時性。
目前的內(nèi)窺鏡視頻流采集處理方案有很多種,包括ARM、FPGA、DSP、專用SOC 等,其中,ARM 體積小,功耗低。但是設(shè)計相對不夠靈活,且代碼運行方式為串行工作,在運行復雜算法時占用資源高,效率不足;FPGA 方案的優(yōu)點是靈活性強,且FPGA 的并行處理機制決定著其在算法很復雜的情況下依然能實現(xiàn)很低的延時。但是FPGA 設(shè)計難度大,用“數(shù)字電路”的思想去描述算法周期長,且不利于維護和修改;DSP 是一種獨特的微處理器,有自己完整的指令系統(tǒng)。DSP 方案的優(yōu)點是設(shè)計靈活,易于拓展,計算能力強,是數(shù)字信號處理的優(yōu)先選擇。缺點是成本高,設(shè)計難度大,占用面積和功耗也有待改進。專用SOC 方案如海思、大華等廠商設(shè)計的專門用于圖像處理的芯片,優(yōu)點是體積小、集成度高、功耗低,內(nèi)部集成各種圖像處理算法的IP 可以直接調(diào)用。缺點是不夠靈活,復雜的圖像處理算法只能調(diào)用廠商提供的固定的算法;比較好的解決方案就是用上述方案的組合,取長補短。考慮性能、體積、功耗等因素,Zynq 是個很好的選擇。
Zynq 是Xilinx 公司推出的一款全可編程片上系統(tǒng)處理器,集成了PS(ARM 處理器) 和PL(FPGA),是一種單片ARM +FPGA 的架構(gòu)。其中PS 處理器部分包含了完整的ARM 處理子系統(tǒng),而PL 邏輯部分中的資源會隨著芯片級別的不同而不同。這兩個部分相互聯(lián)系又可以獨立使用[2]。
針對上述情況,本文設(shè)計了一種基于Zynq 的醫(yī)用內(nèi)窺鏡視頻流采集與處理系統(tǒng),內(nèi)窺鏡攝像頭的型號為OV6946。Zynq 包含了FPGA(PL)與ARM(PS)的優(yōu)勢,使設(shè)計的系統(tǒng)更加靈活,減少了開發(fā)的時間。本系統(tǒng)的目的是采集經(jīng)OV426 對OV6946進行模數(shù)轉(zhuǎn)換后的數(shù)字信號,然后通過Zynq 的PS和PL 端進行協(xié)同處理。最后用過HDMI 進行實時圖像輸出。并在視頻流的幀間隔時間內(nèi),完成雙邊濾波、白平衡、暗部增強、CCM 等算法處理,以實現(xiàn)實時性要求。結(jié)果表明,在HDMI 顯示器上實現(xiàn)了經(jīng)算法實時處理的OV6946 的圖像,保證低功耗和小體積的同時也完成了高性能、實時的視頻流處理,并可在PS 端快速修改PL 端的許多算法參數(shù),避免了PL 端設(shè)計和編譯時長,具有高效性和靈活性。
為了實現(xiàn)視頻流實時性的算法處理,本設(shè)計的算法大部分通過Vivado HLS 編寫生成IP,運行在FPGA端,以實現(xiàn)并行處理,涉及到浮點運算的部分在ARM端處理,以節(jié)省FPGA 端資源并發(fā)揮ARM 在浮點運算上的優(yōu)勢。同時采集端也用ARM 結(jié)合FPGA 的方式,由ARM 端通過SCCB 總線對內(nèi)窺鏡的運行參數(shù)進行配置,由FPGA 端進行DVP 數(shù)字圖像信號的采集。輸出端采用FPGA 模擬HDMI 的方式進行輸出,省去了HDMI 芯片,以減小系統(tǒng)的復雜性。
整體系統(tǒng)設(shè)計框圖如圖1 所示。分為圖像解碼模塊、圖像處理模塊與圖像顯示模塊三個模塊。
圖1 整體設(shè)計框
圖像解碼模塊負責對OV426 輸出的數(shù)字信號圖像進行解碼與像素格式轉(zhuǎn)換。首先由PS 端通過SCCB 總線配置OV426 的工作模式,由PL 端接收OV426 的圖像數(shù)字信號,進行RAW10 轉(zhuǎn)RGB888 處理并緩存進DDR 中,由于OV6946 每個像素處的圖像傳感器在每個像素位置上僅感測一種顏色,并且缺少另外兩種顏色。對于完整的彩色RGB 圖像,我們在每個像素位置需要三種顏色[3]。故需做RAW10 轉(zhuǎn)RGB888 處理,此處采用雙線性插值法。
圖像處理模塊由PS 與PL 協(xié)同處理,具體做法為PL 端在接收數(shù)據(jù)緩存到DDR3 的同時,對像素進行行累加、列累加、像素統(tǒng)計等數(shù)據(jù)預備工作,并通過AXI4 總線傳給PS 端,為后續(xù)算法使用做準備。白平衡使用灰度世界算法?;叶仁澜缢惴ㄊ且曰叶仁澜缂僭O(shè)為基礎(chǔ)的,該假設(shè)認為對于一幅有著大量色彩變化的圖像,R、G、B 三個分量的平均值趨于同一個灰度值[4]。上述在PL 準備的數(shù)據(jù)即可用于灰度世界算法,對于灰度世界算法,本系統(tǒng)在PL端進行所需的加減運算,在PS 端做所需的乘除運算來計算增益。補充了FPGA 對于浮點運算能力的不足,也省去了在PL 端用乘法器和除法器延時需進行時序?qū)R的麻煩,提高率開發(fā)效率。同時,伽馬調(diào)節(jié)算法也是在PS 端實現(xiàn),伽馬校正是為了克服人眼視覺系統(tǒng)對于亮度變化的感覺是非線性的而引入的一種傳輸函數(shù),在視頻流、計算機圖形學以及其他成像系統(tǒng)中應(yīng)用廣泛[5]。伽馬校正是對輸入圖像灰度值進行的非線性操作,使輸出圖像灰度值與輸入圖像灰度值呈指數(shù)關(guān)系。此部分在PS 端用數(shù)組存儲校正值,在PS 端從DDR 中搬運數(shù)據(jù)的同時,以查找表的方式直接進行伽馬校正。經(jīng)上述算法處理后再次緩存并由VDMA 讀出并轉(zhuǎn)換為AXI4-STREAM。去噪與暗部增強使用Vivado HLS 進行加速設(shè)計,硬件加速設(shè)計將軟件代碼轉(zhuǎn)換為RTL 電路,輸入輸出接口均為AXI4-STREAM。其中不可綜合的函數(shù)或者語句需用Vivado HLS 支持的函數(shù)替換[6]。
圖像顯示模塊為HDMI 顯示,HDMI 接口是目前應(yīng)用最廣泛的高清音視頻接口之一,存在多種可供選擇的傳輸方式[7]。HDMI 接口協(xié)議物理層使用TMDS 標準傳輸音視頻數(shù)據(jù)。最小化傳輸差分信號(Transition Minimized Differential Signaling,TMDS)是美國Silicon Image 公司開發(fā)的一項高速數(shù)據(jù)傳輸技術(shù),在DVI 和HDMI 視頻接口中使用差分信號傳輸高速串行數(shù)據(jù)。本設(shè)計中直接在PL 端模擬HDMI協(xié)議,輸出穩(wěn)定且節(jié)省硬件資源與成本。
本設(shè)計選用Xilinx XC7Z020CLG400-2 入門級Zynq 作為主控芯片,設(shè)計了一套集圖像解碼、實時視頻流算法處理和輸出顯示的硬件。利用OV426橋接芯片對OV6946 進行模數(shù)轉(zhuǎn)換,然后由Zynq 進行采集、解碼與處理,最后由HDMI 輸出。
2.1.1 OV6946 攝像頭
CMOS 是內(nèi)窺鏡攝像頭的核心器件,微型COMS已經(jīng)在醫(yī)療圖像領(lǐng)域得到了廣泛的應(yīng)用,如胃鏡、腸鏡、腎盂鏡等等。OV6946 彩色圖像傳感器是一種低電壓、高性能、1/18 英寸的CMOS 圖像傳感器,分辨率為400×400 pixel,它通過串行外圍設(shè)備接口(SPI)的控制提供RAW 格式的全幀模擬圖像。OV6946 的圖像陣列能夠以30 幀/s(FPS)的速度運行,并簡化了曝光控制??赏ㄟ^SPI 接口進行編程。其硬件原理表示如圖2 所示。
圖2 OV6946 原理示意圖
2.1.2 攝像頭模數(shù)轉(zhuǎn)換單元設(shè)計
為了實現(xiàn)對OV6946 的CMOS 輸出模擬信號進行轉(zhuǎn)換,本設(shè)計使用了OV426 橋接芯片。OV426 是一款專為OV6946、OV6948、OCHTA10 等攝像頭設(shè)計的一款橋接芯片??蓪⑦@些攝像頭輸出的模擬信號通過內(nèi)部集成的ADC 和協(xié)處理單元轉(zhuǎn)換為DVP協(xié)議的數(shù)字信號。OV426 通過SCCB 總線進行寄存器配置,可以配置輸出數(shù)據(jù)的格式、ISP 功能等。支持BLC、AEC/AGC 和MWB 等功能。其硬件原理表示如圖3 所示。
圖3 OV426 電路設(shè)計
主控選用Xilinx XC7Z020CLG400-2 入門級Zynq 芯片ZYNQ-7020。PL 邏輯單元為85K,BRAM存儲資源為4.9 Mbit。芯片的速度等級為“-2”。本設(shè)計中DDR3 采用美光MT41J128M16HA-187E,容量為2 Gbit。QSPI FLASH 選用W25Q256FVEI,主要用于程序的固化。電源部分統(tǒng)一采用TLV62130RGT,可通過反饋電阻設(shè)置其輸出電壓,輸入電壓范圍為3 V~17 V,輸出電壓范圍為0.9 V~5.5 V,輸出電流最大為3 A,完全滿足電源設(shè)計需求。主控單元頂層原理圖及電源部分原理圖表示如圖4和圖5 所示。
圖4 主控單元頂層原理圖
圖5 電源部分電路設(shè)計
高清晰度多媒體接口(High Definition Multimedia Interface,HDMI)是一種數(shù)字化音頻/視頻接口技術(shù),通過FPGA 可以很快地實現(xiàn)驅(qū)動[8]。HDMI 1.0 版本于2002 年發(fā)布,最高數(shù)據(jù)傳輸速度為5 Gbype/s。而2017 年發(fā)布的HDMI 2.1 標準的理論帶寬可達48 Gbype/s。HDMI 接口協(xié)議在物理層使用TMDS 標準傳輸音視頻數(shù)據(jù)。TMDS 差分傳輸技術(shù)使用兩個引腳來傳輸一路信號,利用這兩個引腳間的電壓差的正負極性和大小來決定傳輸數(shù)據(jù)的值(0 或1)。Xilinx 在Spartan-3A 系列之后的器件中,加入了對TMDS 接口標準的支持,用于在FPGA 內(nèi)部實現(xiàn)DVI 和HDMI 接口。具體的模塊電路設(shè)計如圖6 所示。
圖6 HDMI 接口硬件電路設(shè)計
OV6946 在經(jīng)OV426 轉(zhuǎn)換后輸出的為DVP 協(xié)議數(shù)字圖像。DVP(Digital Video Port)攝像頭數(shù)據(jù)并口傳輸協(xié)議,提供8 bit 或10 bit 并行傳輸數(shù)據(jù)線、HSYNC(Horizontal sync)行同步線、VSYNC(Vertical sync)幀同步線和PCLK(Pixel Clock)時鐘同步線。OV426 提供10 bit的并口傳輸,PCLK 為8 MHz,其中HSYNC 高電平期間包含400 個PCLK,每個PCLK 取一次值,對應(yīng)一行的400 個像素點。每兩個VSYNC 的高電平間有400 個HSYNC,對應(yīng)一幀圖像的400 列。按上述方法編寫Verilog 代碼,并通過AXI4 總線直接存于DDR 中。AXI4 包含3種類型的接口:AXI4 接口、AXI4-Lite 接口以及AXI4-Stream 接口。AXI4 接口主要面向高性能地址映射通信的需要,功能完整,在單地址傳輸?shù)那闆r下最大允許256 輪的數(shù)據(jù)突發(fā)長度[9]。
本設(shè)計中在PL 端設(shè)置好每一幀緩存的幀起始地址,經(jīng)過FIFO 緩存打包后讀出,通過AXI4 總線完成一幀的寫入?;诖送瓿?00 pixel×400 pixel 分辨率的數(shù)字圖像解碼。AXI4 總線仿真時序如圖7 所示。
圖7 AXI4 總線仿真時序
本設(shè)計的主要算法是通過Vivado HLS 開發(fā)完成。Vivado HLS 是最具創(chuàng)新性的可編程邏輯設(shè)計工具之一。使用Vivado HLS 生成IP 核可以大大縮短FPGA 的開發(fā)周期。只需要使用高級語言,如C、C++或System C 來描述邏輯,然后將邏輯轉(zhuǎn)換為RTL 級別的實現(xiàn)。利用Vivado HLS 可以縮短1/3的RTL 仿真時間,使算法驗證速度提高10 倍以上[10]。Vivado HLS 編寫完的代碼在綜合通過后會生成一個IP 核,可通過代碼配置其輸入輸出接口。
在本設(shè)計中,對于視頻流的處理,輸入輸出接口均為AXI4-STREAM 接口。AXI4-STREAM 總線是單向的,從主節(jié)點到從節(jié)點,并根據(jù)握手信號傳輸數(shù)據(jù)。優(yōu)點是它不需要地址,支持數(shù)據(jù)突發(fā)傳輸,數(shù)據(jù)量不受限制[11]。因此,AXI4-STREAM 適用于圖像像素數(shù)據(jù)、音頻采樣數(shù)據(jù)、離散數(shù)字信號處理等數(shù)字信息的間接傳輸系統(tǒng)[12]。它的握手機制為只有當VALID 和READY 同時為高時,才能進行傳輸。當TREADY 信號一直處于高電平時,表示從設(shè)備已經(jīng)做好了接收數(shù)據(jù)準備。TVALID 變?yōu)楦唠娖降耐瑫r,TDATA 進行發(fā)送。數(shù)據(jù)發(fā)送完成后,TVALID 變?yōu)榈碗娖?。其仿真時序如圖8、圖9 所示。其中圖8為一包數(shù)據(jù)傳輸開始。圖9 為一包數(shù)據(jù)傳輸結(jié)束。
圖8 傳輸開始
圖9 傳輸結(jié)束
算法的總體設(shè)計流程如圖10 所示。其中,白平衡為PS 端與PL 端協(xié)同完成,算法的累加步驟由PL 完成。在一幀圖像采集完之后的一個時鐘周期內(nèi)即可完成數(shù)據(jù)的準備。乘除運算在PS 端完成。因為PS 端具有較強的浮點運算能力。伽馬校正由PS 采用查找表的方式完成,其余算法均由PL 端完成,并由AXI4-Lite 總線在PS 端配置參數(shù)。
圖10 系統(tǒng)算法流程圖
圖10 中最后一個步驟的作用為適配HDMI 與顯示器的分辨率。由于攝像頭的分辨率為400×400 pixel,標準顯示器不支持該分辨率。故在其周圍進行像素填充,使其輸出640×480 pixel 分辨率的視頻流,攝像頭圖像顯示居中。經(jīng)整合的上述所有算法在100 MHz 的時鐘頻率下延時約為3 ms。其Vivado HLS 綜合結(jié)果如圖15 所示。
HDMI 的實現(xiàn)方法主要有兩種,一種是使用硬件HDMI 芯片,另一種是使用IO 模擬。因為HDMI協(xié)議本身就是數(shù)字協(xié)議,所以本設(shè)計采用第二種方法,既節(jié)約硬件成本,又節(jié)省板面空間資源。
一個HDMI 連接包括三個TMDS 數(shù)據(jù)通道,一個TMDS 時鐘通道。TMDS 時鐘通道因分辨率不同而以特定速率運行。在每個TMDS 時鐘通道周期中,三個TMDS 數(shù)據(jù)通道每個都發(fā)送10 bit 數(shù)據(jù)。這個10 位的字被編碼,采用某種不同的編碼技術(shù)。輸入到信源端的輸入流,包含視頻像素,數(shù)據(jù)包,和控制數(shù)據(jù)。數(shù)據(jù)包包括音頻數(shù)據(jù)和輔助以及相關(guān)的糾錯碼。
整個系統(tǒng)需要兩個輸入時鐘,一個是視頻的像素時鐘,另外一個所需時鐘的頻率是像素時鐘的五倍。并串轉(zhuǎn)換過程的實現(xiàn)的是10 ∶1 的轉(zhuǎn)換率,理論上轉(zhuǎn)換器需要一個10 倍像素時鐘頻率的串行時鐘。這里用了一個5 倍的時鐘頻率,因為OSERDESE2模塊可以實現(xiàn)DDR 的功能,即它在五倍時鐘頻率的基礎(chǔ)上又實現(xiàn)了雙倍數(shù)據(jù)速率。其模塊框圖如圖11 所示。
圖11 RGB TO DVI 模塊框圖
其在本設(shè)計中的Block Design 如圖12 所示,其中的pclk x5 由axi_dynclk_1 實現(xiàn)五倍頻。
圖12 HDMI 部分Block Design 圖
系統(tǒng)試驗時,為了減少阻抗不連續(xù)對攝像頭模擬信號輸出的影響,OV6946 通過阻抗為50 Ω 的屏蔽線焊接到OV426 引出的4PIN 通孔上。經(jīng)板卡處理后由HDMI 輸出。每根屏蔽線的屏蔽絲均做接地處理。其系統(tǒng)連接關(guān)系如圖13 所示。硬件實物如圖14 所示。
圖13 系統(tǒng)連接關(guān)系圖
圖14 測試系統(tǒng)-測試裝置實物圖
系統(tǒng)上電后,直接通過HDMI 接口即可查看實時的攝像頭采集回的圖像。
為了驗證系統(tǒng)功能的實現(xiàn),將板卡供電,通過HDMI 連接顯示器。分別寫入算法處理前后的代碼來驗證算法實現(xiàn)效果。固化到FPGA 端的算法總體綜合出的結(jié)果如圖15 所示。
圖15 Vivado HLS 算法綜合結(jié)果
由圖15 可知,目標時鐘周期為10 ns,綜合后的設(shè)計所估計的時鐘周期為6.381 ns,滿足時序要求。最高延時為309 124 個時鐘周期,即執(zhí)行本設(shè)計的算法處理一幀圖像的時間為3.091 24 ms。由于30 fps的內(nèi)窺鏡,圖像幀間隔為33.3 ms,故完全滿足實時處理OV6946 內(nèi)窺鏡的400×400 pixel 分辨率,30 幀/s圖像的視頻流。
從顯示器上可以看到OV6946 傳回來的實時圖像。重復多次試驗可得,該系統(tǒng)可以高效無誤地對OV6946 采集回的400×400 pixel@30FPS 的視頻流進行實時處理,無肉眼可見延時。其性能達到了預定的指標。算法處理前后的效果圖如圖16~圖19 所示。
圖16 白平衡/CCM 前(左)后(右)對比圖
圖17 暗部增強前(左)后(右)對比圖
圖18 伽馬值1.3(左)伽馬值0.6(右)對比圖
圖19 雙邊濾波前(上)雙邊濾波后(下)對比圖
本文從醫(yī)用內(nèi)窺鏡視頻流采集處理需求出發(fā),設(shè)計了基于Zynq 的醫(yī)用內(nèi)窺鏡視頻流采集與處理框架,對不同功能進行了模塊化設(shè)計,同時利用了Zynq 芯片的協(xié)同處理優(yōu)勢。在完成技術(shù)指標的同時采用盡量少的元器件,減少了系統(tǒng)的復雜性,提高了系統(tǒng)的可靠性。本文所介紹的醫(yī)用內(nèi)窺鏡采集處理框架工作穩(wěn)定,在滿足需求的前提下,對各個指標均進行了優(yōu)化設(shè)計。同時,該系統(tǒng)已投入到實際使用中,具有較好的實用價值。