文/吳海游 孫艷娜 左弟俊
現(xiàn)場(chǎng)可編程邏輯器件(Field Programmable Gate Array ,FPGA)具有顯著的靈活性和可再編寫性等獨(dú)特的技術(shù)優(yōu)勢(shì)。目前,基于計(jì)算機(jī)軟件的圖像處理理論與后處理技術(shù)已經(jīng)非常成熟,但其不利于系統(tǒng)的實(shí)時(shí)化。相比于圖像采集的后處理、FPGA 不但能夠?qū)D像進(jìn)行實(shí)時(shí)處理、還能減小數(shù)據(jù)上傳壓力,具有非常重大的意義。
圖1:成像系統(tǒng)疵點(diǎn)處理原理框圖
在成像與跟蹤識(shí)別系統(tǒng)中,過多疵點(diǎn)不僅嚴(yán)重影響成像系統(tǒng)的成像質(zhì)量,而且還會(huì)引起對(duì)有效目標(biāo)的錯(cuò)誤跟蹤與識(shí)別,因此非常有必要對(duì)圖像的疵點(diǎn)進(jìn)行處理。傳統(tǒng)方法是計(jì)算機(jī)軟件處理圖像疵點(diǎn),整個(gè)過程需要開發(fā)計(jì)算機(jī)軟件,增加額外的數(shù)字圖像采集設(shè)備,而且該方法不適用于模擬成像系統(tǒng)。因此本文提出一種利用FPGA 在線處理疵點(diǎn)的方法,主要包括子圖劃分、疵點(diǎn)坐標(biāo)分時(shí)計(jì)算、排序與存儲(chǔ)、疵點(diǎn)流水線補(bǔ)償?shù)冗^程。
在成像系統(tǒng)中,針對(duì)不同的需求,圖像疵點(diǎn)判斷標(biāo)準(zhǔn)有細(xì)微的差別。但其主要思想和依據(jù)為:強(qiáng)光照條件下,將灰度偏離圖像平均灰度X1 的像素判定為疵點(diǎn),在無光條件下,灰度高于平均灰度X2 的像素判定為疵點(diǎn)。一般來說,采用二維平面坐標(biāo)系來表示每個(gè)像素在圖像中的位置,即(x,y)來表示每個(gè)像素的位置。
圖2:疵點(diǎn)坐標(biāo)計(jì)算狀態(tài)轉(zhuǎn)換圖
圖3:疵點(diǎn)坐標(biāo)排序與存儲(chǔ)狀態(tài)轉(zhuǎn)換圖
圖4:圖像疵點(diǎn)補(bǔ)償時(shí)序圖
相對(duì)于計(jì)算機(jī),F(xiàn)PGA 存儲(chǔ)資源有效,無法完整存儲(chǔ)一幅及以上的高分辨率圖像數(shù)據(jù),因此將分辨率為H x V 的圖像劃分為V/K 個(gè)子圖。每次計(jì)算出K 行圖像的疵點(diǎn)坐標(biāo)值并存儲(chǔ)至FPGA 片上的RAM1 中,直至計(jì)算出整幅圖像的疵點(diǎn)坐標(biāo)。然后將疵點(diǎn)坐標(biāo)順序存儲(chǔ)至RAM2 中,最后將所有疵點(diǎn)坐標(biāo)再存儲(chǔ)至FLASH 中,此時(shí)完成圖像疵點(diǎn)坐標(biāo)的計(jì)算、排序與存儲(chǔ)。成像系統(tǒng)每次上電啟動(dòng)時(shí),將FLASH 中存儲(chǔ)的疵點(diǎn)坐標(biāo)順序讀取至FPGA片上的RAM3 中,然后對(duì)圖像進(jìn)行實(shí)時(shí)處理,其原理框圖如圖1所示。
在疵點(diǎn)計(jì)算時(shí),當(dāng)接收到疵點(diǎn)計(jì)算觸發(fā)開始指令后,將第一幀圖像的前K 行數(shù)據(jù)依次寫入RAM1 內(nèi)。當(dāng)?shù)? 幀圖像的前K 行到來時(shí),依次讀出RAM1 中的數(shù)據(jù)加上第2 幀圖像對(duì)應(yīng)位置的像素灰度,并存儲(chǔ)至RAM1中,依次類推直至接收完M 幀圖像。本設(shè)計(jì)采用三段式同步有限狀態(tài)機(jī)來完成,其狀態(tài)轉(zhuǎn)移圖如圖2所示,主要包括以下9 個(gè)狀態(tài):
(1)空閑狀態(tài)(IDLE):若疵點(diǎn)計(jì)算開始信號(hào)到來,則狀態(tài)轉(zhuǎn)移至INIT 狀態(tài)。
(2)初始化狀態(tài)(INIT):初始化完成后進(jìn)入LIGHT_A 狀態(tài)。
(3)計(jì)算亮場(chǎng)平均灰度(LIGHT_A):使成像系統(tǒng)置于強(qiáng)光條件下,計(jì)算圖像平均灰度,狀態(tài)轉(zhuǎn)移至LIGHT_R 狀態(tài)。
(4)讀出亮場(chǎng)平均灰度(LIGHT_R):生成RAM1 的讀使能、讀地址信號(hào),同時(shí)狀態(tài)轉(zhuǎn)移至LCOMP_W 狀態(tài)。
(5)亮場(chǎng)疵點(diǎn)坐標(biāo)寫入RAM(LCOMP_W):若vcnt ==V,則狀態(tài)轉(zhuǎn)移至WAIT 狀態(tài)。
(6)等待(WAIT):若暗場(chǎng)疵點(diǎn)計(jì)算開始信號(hào)到來,則狀態(tài)轉(zhuǎn)移至DARK_A 狀態(tài)。
(7)計(jì)算暗場(chǎng)場(chǎng)平均灰度(DARK_A):使成像系統(tǒng)置于無光條件下,計(jì)算圖像平均灰度,狀態(tài)轉(zhuǎn)移至DARK_R 狀態(tài)。
(8)讀出暗場(chǎng)平均灰度(DARK_R):生成RAM1 的讀使能、讀地址信號(hào),同時(shí)狀態(tài)轉(zhuǎn)移至DCOMP_W 狀態(tài)。
(9)暗場(chǎng)疵點(diǎn)坐標(biāo)寫入RAM(DCOMP_W):若vcnt ==V,則狀態(tài)轉(zhuǎn)移至IDLE 狀態(tài),此時(shí)疵點(diǎn)坐標(biāo)信息計(jì)算完成。
當(dāng)疵點(diǎn)計(jì)算完成后,需要對(duì)疵點(diǎn)坐標(biāo)信息按從小到大的順序進(jìn)行排序,本設(shè)計(jì)中采用基于FPGA 的冒泡排序法對(duì)疵點(diǎn)坐標(biāo)信息進(jìn)行排序,同樣采用三段式同步有限狀態(tài)機(jī)來完成。其狀態(tài)轉(zhuǎn)移圖如圖3所示,主要包括以下6 個(gè)狀態(tài):
(1)空閑狀態(tài)(IDLE):若疵點(diǎn)計(jì)算完成信號(hào)到來,則狀態(tài)轉(zhuǎn)移至START 狀態(tài)。
(2)起始狀態(tài)(START):初始化RAM2的讀地址。
(3)比較后交換寫入RAM(SWAP_RAM):比 較RAM2 地 址addr 與addr+1 空間內(nèi)的數(shù)據(jù)data0 與data1,同時(shí)狀態(tài)轉(zhuǎn)移至ADDR_RAM 狀態(tài)。
(4)RAM 讀地址(ADDR_RAM):讀地址addr 加1,若RAM2 讀地址等于L-delta-1,狀態(tài)轉(zhuǎn)移至START 狀態(tài);若delta 等于L,狀態(tài)轉(zhuǎn)移至FLASH_W 狀態(tài);否則轉(zhuǎn)移至SWAP_RAM 狀態(tài)。
(5)FLASH 寫 入(FLASH_W):將RAM2 中的數(shù)據(jù)分包寫入FLASH 中,同時(shí)狀態(tài)轉(zhuǎn)移至WAIT。
(6)等待(WAIT):若RAM2 中數(shù)據(jù)全部寫入FLASH,則進(jìn)入IDLE 狀態(tài)。
在實(shí)時(shí)成像系統(tǒng)中采用流水線操作對(duì)疵點(diǎn)像素進(jìn)行處理。本設(shè)計(jì)中采用左替換的方法補(bǔ)償疵點(diǎn)像素,即若坐標(biāo)位置為(i,j)處像素是疵點(diǎn)像素,則利用坐標(biāo)(i,j-1)處像素替換該疵點(diǎn)像素,若(i,j-1)也為疵點(diǎn)像素,則利用(i,j-2)處像素替換,依次類推。其操作過程如圖4所示。
本設(shè)計(jì)的硬件平臺(tái)主要由ALTERA公司的FPGA 芯片5CEBA4U15I7 和On Semiconductor 公司的圖像傳感器芯片NOIP1SN1300A 構(gòu)成。疵點(diǎn)圖像得到了有效地補(bǔ)償處理,從而驗(yàn)證了設(shè)計(jì)的正確性。
本設(shè)計(jì)提出關(guān)于圖像疵點(diǎn)坐標(biāo)計(jì)算、存儲(chǔ)與處理設(shè)計(jì)方法,能夠很好地解決圖像疵點(diǎn)對(duì)成像系統(tǒng)的不良影響,并且此設(shè)計(jì)在硬件平臺(tái)上得到充分驗(yàn)證,可靠性高。