圖像自適應分段線(xiàn)性拉伸算法的FPGA設計
2.2 硬件設計
通過(guò)以上設計思路的分析,設計主要包括灰度直方圖統計、除法和拉伸運算3部分。下面進(jìn)行詳細介紹。
2.2.1 雙端口RAM
XC4VLXl5芯片具有豐富的BlockRAM資源,用它構成雙端口RAM,進(jìn)行灰度直方圖統計。像素的灰度值作為雙端口RAM的地址,對應空間存儲此灰度值在1幀圖像里的頻數。以320×256幀大小、灰度值為14 b的紅外圖像為例,在每個(gè)像素灰度值都相同的極限情況下,每個(gè)地址空間需要的存儲的值為81 920,轉換為二進(jìn)制有17 b,故所需存儲空間大小為17 b×214。對雙端口RAM的操作分為三個(gè)階段:
(1)在幀正程時(shí),只需對A端口進(jìn)行讀/寫(xiě)操作。根據接收到的像素灰度值,先讀出RAM中對應地址空間的儲值,加“1”后回寫(xiě)入原來(lái)的地址空間,這樣在每幀正程結束時(shí),就統計完了每個(gè)灰度值出現的頻數,即完成了灰度直方圖統計。
(2)幀逆程時(shí),要同時(shí)對A,B端口進(jìn)行讀操作。對于A(yíng)端口,依次從高地址讀取RAM中的數,將讀取的數進(jìn)行累加,當和大于幀像素個(gè)數的5%時(shí),此時(shí)對應的地址值即為Xmax;類(lèi)似地對B端口操作,從0地址開(kāi)始讀RAM,可找到Xmin。將得到的灰度值Xmin和Xmax存入寄存器,作為除法器和下一幀圖像拉伸運算的輸入。
(3)每幀最后將雙端口RAM清零,為下一幀灰度直方圖統計做準備。由于雙端口RAM沒(méi)有整體清零功能,設計中采用從“O”地址開(kāi)始。依次往高地址寫(xiě)零的方式清零。
2.2.2 除法器
除法運算通過(guò)調用ISE IP Core Generator生成的15位定點(diǎn)除法器來(lái)實(shí)現,滿(mǎn)足高精度要求,而不采用逼近法。一幀圖像的拉伸只需調用一次除法器,提高了運算的效率。在幀逆程計算Q:=16 384/(Xmax-Xmin)的值,對于15位輸入,除法器有18個(gè)時(shí)鐘周期的延時(shí),而這并不會(huì )影響圖像處理的實(shí)時(shí)性。
2.2.3 控制時(shí)鐘
在1個(gè)像素時(shí)鐘周期內要完成讀RAM、加法計算和回寫(xiě)RAM的操作,RAM的控制時(shí)鐘至少必須是像素時(shí)鐘的4倍??刂茣r(shí)鐘的選取還要考慮幀逆程的時(shí)間長(cháng)度,要在逆程里訪(fǎng)問(wèn)RAM查找到Xmin和Xmax,還要完成RAM清零操作。FPGA系統時(shí)鐘為96 MHz,分頻后產(chǎn)生48 MHz,為像素時(shí)鐘8倍,用它作為雙端口RAM和除法器的控制時(shí)鐘,可滿(mǎn)足要求。
2.2.4 拉伸運算
將式(1)進(jìn)行簡(jiǎn)單變換,可以記為:
Q值在上幀結束前已經(jīng)得到,根據式(2)拉伸運算得到簡(jiǎn)化,只需1次減法和乘法運算,得到積的小數點(diǎn)左移6位后,截取低8位就得到拉伸后的灰度值。需要注意的是,截取前要判定乘法是否溢出,如果溢出,結果置為最大灰度值255。
3 系統驗證
采用飛機高空采集的地面紅外圖像作為驗證模板,灰度拉伸前的原始圖像如圖2所示,整幅圖像對比度低,細節極不明顯。最大、最小灰度值按5%的比例選取,拉伸后的圖像如圖3所示,拉伸后可明顯看出河流、道路、汽車(chē)等地物的輪廓,但圖像中較亮和較暗的部分層次不清晰。若減小灰度值壓縮比例為2%,圖像的主要輪廓變化不明顯,較亮和較暗的部分將會(huì )顯現出一定層次,這表明被壓縮的區間相對變小,按比例拉伸的圖像范圍擴大。分段線(xiàn)性拉伸的結果可好可壞,分段區間的選擇是關(guān)鍵,選取時(shí)要考慮原始圖像的質(zhì)量。噪聲和盲元數目較少時(shí),被壓縮的區間可適當調小。
評論