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