廣東工業(yè)大學 謝佳銘
為了實現(xiàn)單比特脈沖圖像傳感器的數(shù)據(jù)采集、實時演示、成像原理展示,設計基于MFC界面語言的成像演示系統(tǒng)。該系統(tǒng)使用ULM928測試盒采集圖像傳感器raw數(shù)據(jù)并傳輸?shù)缴衔粰C。上位機可以設置圖像傳感器的觸發(fā)閾值,測試盒的數(shù)據(jù)傳輸速度。同時,上位機還可以根據(jù)需要,實時重構(gòu)當前場景、HDR圖像合成、展示原始數(shù)據(jù)、高速場景捕捉等,也可保存原始數(shù)據(jù)以供后期需要進行高質(zhì)量重構(gòu)。演示結(jié)果表明,通過該成像演示系統(tǒng),能夠很好地展示脈沖序列圖像傳感器的成像原理,為后期進一步重構(gòu)提供幫助。
近年來,圖像傳感器朝著高分辨率發(fā)展的同時,也對幀率提出了更高的要求,特別是在某些高速運動場景下如爆炸、風洞試驗需要對物體運動細節(jié)信息做出詳細的記錄。以每像素8bit,每幀1280x720分辨率,每秒5000幀的圖像傳感器為例,其產(chǎn)生的傳輸需求達到36.86Gbit/s。這不僅對傳輸速率提出了極大的要求,也增加了傳感器功耗。為了捕獲高速場景運動信息,同時減少捕獲過程中圖像數(shù)據(jù)的冗余性,脈沖式觸發(fā)輸出的圖像傳感器被開發(fā)出來。但是由于高速脈沖圖像傳感器的像素數(shù)據(jù)輸出是離散二進制格式,其后期的恢復重構(gòu)方法還在探索中。目前,缺乏有效的重構(gòu)算法,無法定制高效的硬件重構(gòu)芯片,重構(gòu)圖像需要將原始數(shù)據(jù)采集到上位機進行重構(gòu)驗證,增加了許多不便。
為了方便采集原始數(shù)據(jù),驗證重構(gòu)算法的正確性,幫助后期定制ISP,本文基于MFC界面設計語言,開發(fā)了脈沖序列圖像傳感器的數(shù)據(jù)采集重構(gòu)系統(tǒng)。該系統(tǒng)需要滿足的功能有:調(diào)節(jié)脈沖序列圖像傳感器參數(shù)、原始數(shù)據(jù)格式演示、實時重構(gòu)當前場景、高時間分辨率細節(jié)展示。
該演示系統(tǒng)使用VS2015作為開發(fā)環(huán)境,使用Opencv3.3.0提供基礎(chǔ)的圖像處理函數(shù)功能。進一步地,該演示系統(tǒng)可以分為圖像芯片參數(shù)配置模塊、數(shù)據(jù)采集模塊、數(shù)據(jù)展示模塊、離線重構(gòu)保存模塊。
配置模塊:傳感器的最高傳輸幀率可以達到4萬幀,最高數(shù)據(jù)量傳輸率可以達到40000x250x400/8=4Gbps/s,雖然USB3的最大傳輸輸率可以達到5Gbps/s,但是注意到這個傳輸輸率為理論值,因此為了避免數(shù)據(jù)丟包問題,我們將采集器的工作頻率設置為20000幀,最大傳輸速率被壓制到2Gbps/s。除此之外,演示系統(tǒng)還提供對傳感器的工作電壓設置,包括觸發(fā)閾值,比較電壓等。觸發(fā)閾值可調(diào)范圍為1.0-3.0V,通過調(diào)節(jié)觸發(fā)閾值,能夠調(diào)整比特的觸發(fā)頻率,譬如更好地適應暗光環(huán)境,但這樣會增大暗電流等噪聲的影響。打開演示界面,系統(tǒng)自動查找電腦上已接入的圖像傳感器,這一步是模仿傳統(tǒng)的工業(yè)相機開發(fā)過程。系統(tǒng)查找到完整的相機列表之后,提供相機列表選擇,并對列表里的第一個相機進行初始化。初始化包括預設傳輸幀率、工作電壓、觸發(fā)閾值等。采集過程中可以根據(jù)需要再次調(diào)整參數(shù)。參數(shù)設置模塊如圖1所示。
圖1 參數(shù)設置區(qū)域
采集模塊:初始化后,相機開始工作,傳輸數(shù)據(jù)。為了避免每一幀都進行傳輸,實際中的硬件采集部分會緩存一定的幀數(shù)再進行傳輸。本例所采用的緩存幀數(shù)為400幀,傳輸過程穩(wěn)定時,程序每秒將傳輸50個數(shù)據(jù)包,每個數(shù)據(jù)包400x250x400bit=4.76Mbyte,每秒的傳輸速率將達到238Mbyte/s。因為數(shù)據(jù)量過大,因此傳輸?shù)玫降臄?shù)據(jù)包將根據(jù)需要實時重構(gòu),或離線保存以供后期恢復時間分辨率更高的場景信息,否則將予以丟棄。
實時演示模塊:為了拍攝感興趣的場景,譬如抓拍某一個高速過程,需要對當前的數(shù)據(jù)情況有一個大概了解,因此需要以一個實時展示模塊界面以提供實時場景展示。實時場景展示只需要提供對當前場景光強的近似擬合即可,對成像質(zhì)量以及高速運動細節(jié)要求不高,因此采用簡單的時間窗口計數(shù)即可。因為光強越強,像素觸發(fā)1bit的頻率越高,因此對一個數(shù)據(jù)包400幀里1的個數(shù)進行計數(shù),將得到該像素的光強信息。另外,我們采用的展示圖像格式為256級的灰度格式,我們還需要做溢出判斷,以免計數(shù)個數(shù)溢出影響光強的恢復。
為了展示脈沖序列圖像傳感器的成像機理,我們需要展示傳感器傳輸過來的raw數(shù)據(jù),但是由于每一秒都有50個數(shù)據(jù)包傳輸過來,如果全部進行實時重構(gòu)展示,系統(tǒng)每一秒將展示20000幀的原始幀,人眼無法觀察到實際的細節(jié)變化,同時超出了顯示器的幀率和系統(tǒng)負載的限制。因此,我們設置一個放慢倍數(shù)的倍數(shù),選取1s內(nèi)某一個小區(qū)間的數(shù)據(jù),在5s的時間內(nèi)進行展示,演示實際物體的運動細節(jié)。最終的整體演示效果如圖2所示。
圖2 整體演示界面
離線保存:當出現(xiàn)感興趣的場景時,可以設置保存時間大小,將設定時間內(nèi)的原始的數(shù)據(jù)包保留下來。相機的工作頻率已經(jīng)做了降頻處理,每秒的傳輸輸率達到了238Mbyte/s,這是因為計算機的固態(tài)硬盤能夠提供峰值500Mb/s的讀寫,但由于計算機負載波動問題,時常無法達到這個寫入要求。第二,每秒讀寫50個數(shù)據(jù)包,系統(tǒng)將在1s內(nèi)進行50次系統(tǒng)調(diào)用,進一步降低了讀寫性能。上述原因?qū)е铝嗽趯嶋H的讀取過程中出現(xiàn)了數(shù)據(jù)包丟失問題。數(shù)據(jù)包丟失問題對于靜態(tài)場景和實時重構(gòu)恢復需求場景的恢復效果影響輕微,但對需要恢復高速運動場景細節(jié)信息時,某一個時間段內(nèi)一個數(shù)據(jù)包的丟失會造成數(shù)據(jù)包恢復切換時重構(gòu)出來的幀有極大的錯誤。因此本例中,如果有保存原始數(shù)據(jù)的需要,我們將其緩存在內(nèi)存里,等到設置時間間隔內(nèi)的所有數(shù)據(jù)包都接收到后,才將數(shù)據(jù)包寫在硬盤上。
離線重構(gòu)模塊:離線重構(gòu)模塊提供了兩個基本的算法以針對不同恢復要求進行快速重構(gòu),并且提供逐幀保存功能。算法1是實時演示時使用的固定窗口計數(shù)功能,能夠提供靜態(tài)或相對低速的場景信息恢復。算法2針對高速運動細節(jié)恢復要求,使用1比特脈沖之間的間隔大小的倒數(shù)作為該間隔內(nèi)的所有幀對應該像素的亮度值,該算法能夠提供比固定窗口計數(shù)更好的時間分辨率。
多線程處理:由于成像演示系統(tǒng)每一秒都有50個數(shù)據(jù)包要處理,如果等到每一個數(shù)據(jù)包都處理完成,再處理下一個,那勢必會造成數(shù)據(jù)包丟失及演示卡頓問題,特別是在有離線數(shù)據(jù)保存需要時,系統(tǒng)進行系統(tǒng)調(diào)用進一步增加了延遲時間。因此系統(tǒng)使用了多個線程對各個任務進行分解。最主要的幾個線程可以分為數(shù)據(jù)采集線程,數(shù)據(jù)緩存線程,實時展示線程,成像原理展示線程,離線保存線程,離線重構(gòu)線程。在這個過程中需要涉及到對數(shù)據(jù)的同步互斥讀寫?;镜木€程關(guān)系如圖3所示。最終實際拍攝以及上位機演示的實拍圖如圖4所示。
圖3 線程關(guān)系邏輯圖
圖4 實際場景及上位機工作示意圖
傳統(tǒng)的圖像傳感器在遇到亮度變化幅度大的場景時往往會曝光過度或曝光不足,原因在于傳感器芯片若非經(jīng)過特殊閾值設計,其對光強的響應都是線性的,因此這樣就造成了在有限的量化范圍內(nèi)無法記錄亮度變化大的場景信息。脈沖式序列傳感器對光強的響應也是近乎線性化,并未做特殊處理,所以在遇到亮度變化大的場景時,同樣會出現(xiàn)圖像對比度不佳的情況。增強圖像對比度的方法有很多,比如直方圖均衡,函數(shù)算子映射等,除此之外,HDR(高動態(tài)范圍成像)也是一個提高圖像動態(tài)范圍,改善圖像對比度的方法。傳統(tǒng)的HDR成像可以分為軟件和硬件兩種方式,軟件方法是將不同曝光時間的圖像經(jīng)過一組權(quán)重函數(shù)融合在一起,獲得一張細節(jié)更加豐富的圖像。在本例中,由于HDR合成融合的計算量比較大,無法實現(xiàn)實時性的展示,因此在實時展示環(huán)節(jié),我們將圖像原始幀的計數(shù)歸一化,然后使用一些經(jīng)典的Tone算子來提高圖像的實時演示質(zhì)量。經(jīng)過Tone算子映射之后的圖像效果對比如圖5和圖6所示。
圖5 數(shù)據(jù)包簡單恢復后的原始圖
圖6 經(jīng)過簡單tone算子提升后的對比圖
針對不同的恢復要求,對數(shù)據(jù)的恢復方法不一樣,從而對數(shù)據(jù)的保存連續(xù)性要求也不一樣。當僅需實時展示場景信息,恢復低速運動細節(jié)時,倘若丟失一兩個數(shù)據(jù)包,對成像的質(zhì)量恢復影響并不大,其表現(xiàn)為丟失了0.02s的一個拍攝區(qū)間數(shù)據(jù),未對實際的視頻連貫性產(chǎn)生影響。但是當需要恢復高速運動細節(jié)信息時,由于脈沖間隔的信息將被用來恢復該區(qū)間內(nèi)像素的光強,因此數(shù)據(jù)包丟失將造成在數(shù)據(jù)包切換時對應像素點的激發(fā)對應不上。這會造成圖像恢復后出現(xiàn)大范圍的白色斑點。因此,非常有必要保證系統(tǒng)對數(shù)據(jù)保存的容錯性,在數(shù)據(jù)的采集中,要等到幀率穩(wěn)定之后才能開始保存。除此之外,當保存數(shù)據(jù)時先將其緩存在內(nèi)存里,而不是每接受到一個數(shù)據(jù)包都立刻進行系統(tǒng)調(diào)用保存在硬盤上。
本文簡單介紹了脈沖圖像傳感器的成像模型,并基于原型機設計了一個成像演示系統(tǒng),該演示系統(tǒng)能夠很好地展示該傳感器的成像原理,并完成原始的數(shù)據(jù)采集、保存、演示功能,提供了針對不同恢復要求的算法實現(xiàn)。采集得到的原始數(shù)據(jù)能夠供給后期更精細的恢復要求使用,從而幫助定制與該種傳感器匹配的圖像信號處理器。