裴明敬 符茂勝 董文忠
(皖西學院電子與信息工程學院, 安徽 六安 237012)
目前,圖像畸變矯正技術多停留在理論研究階段,在工業(yè)上的應用主要基于PC來實現(xiàn)?;兂C正包括攝像機標定和矯正部分,其中標定部分比較復雜。當攝像機位置固定并且模組在同一水平面的情況下,只做一次標定即可,而矯正則需每次重復進行。畸變矯正過程涉及到圖片的映射,映射是隨機存儲過程,處理比較耗時。在此,我們提出了一種新的矯正方法 —— 陣列點陣標定板法。為了達到更快的矯正速度,矯正部分也在FPGA(Field Programmable Gate Array,現(xiàn)場可編程門陣列)上進行硬件加速處理,這樣可以分別將攝像機標定部分和矯正部分做成硬件加速模塊,并結(jié)合FPGA并行處理,利用乒乓操作以及流水線等優(yōu)勢進行設計,從而實現(xiàn)圖像實時處理。
本次實驗不采用物理標定版,而是在LCD屏幕中生成pattern標定圖,然后通過攝像機采集得到畸變圖。通過pattern標定圖的已知信息,可以得到畸變圖的信息,在畸變圖和pattern圖之間建立映射關系,就可以計算出畸變參數(shù)。傳統(tǒng)的畸變算法比較復雜,實時性差,其主要作用在于實現(xiàn)非線性變換[1-3]。
通過透視變換將空間中的點投影到圖像平面即形成視圖,投影公式如下:
S·m′=A·[R|t]·M′
(1)
(2)
式中:S為攝像機平面空間,以(X,Y,Z)為某一點的世界坐標;(u,v)為點投影在圖像平面的坐標;以像素為單位,A被稱作攝像機矩陣,或者內(nèi)參數(shù)矩陣;(cx,cy)為基準點,通常在圖像的中心;fx、fy為以像素為單位的焦距。如果針對攝像機所拍的某幅圖像進行升采樣或者降采樣,參數(shù)fx、fy、cx,cy都將縮放同樣比例。內(nèi)參數(shù)矩陣不依賴于場景視圖,只需固定焦距即可,矩陣計算數(shù)據(jù)可以重復使用。旋轉(zhuǎn)-平移矩陣[R|t]為外參數(shù)矩陣,用于描述攝像機相對于某個固定場景的運動軌跡,或者場景相對于攝像機的運動軌跡。如果場景圍繞攝像機作剛性運動,也就是[R|t]將點(X,Y,Z)的坐標變換到某個坐標系,這個坐標系相對于攝像機來說是固定不變的。真正的鏡頭通常有一些形變,主要的變形為徑向形變,也會有輕微的切向形變。模型可以擴展為:
(3)
x′=x/z
y′=y/z
(4)
x″=x′(1+k1·r2+k2·r4)+2p1x′y′+
p2(r2+2x′2)
(5)
y″=y′(1+k1·r2+k2·r4)+2p1x′y′+
p1(r2+2x′2)
(6)
r2=x′2+y′2
u=fx·x″+cx
v=fy·y″+cy,
式中:k1和k2是徑向形變系數(shù),p1和p2是切向形變系數(shù)。
根據(jù)以上模型來完成以下步驟:
(1) 給定內(nèi)參數(shù)和外參數(shù),將點投影到圖像平面。
(2) 給定內(nèi)參數(shù),根據(jù)幾個點坐標和其對應的圖像坐標計算外參數(shù)。
(3) 根據(jù)已知的定標模式,從幾個角度的照片來計算攝像機的外參數(shù)和內(nèi)參數(shù),運用最小二乘法估計相關參數(shù)[4-5]。
設計系統(tǒng)標定總體方案。圖1所示為標定方案總體框圖。這是針對畸變矯正效果要求非常苛刻的情況所作的設計。標定只需要做一次,標定時間很長,但是整個系統(tǒng)對一次標定的時間并不是非常敏感,故考慮在下層實現(xiàn)標定。
方案總體包括二值化角點粗提取、腐蝕和膨脹、Blob分析、外參攝像機標定、坐標生成和坐標映射等部分,各部分均掛在系統(tǒng)總線上,與微處理器相互交換數(shù)據(jù)。
圖1 標定方案總體框圖
攝像機標定步驟如下:
(1) 找棋盤標定板平面中的角點。在此過程中,要保證角點數(shù)目正確,精確到每行、每列各多少個點,不能多檢或漏檢。此步驟只是粗略提取角點,如果精度不高,矯正效果就會嚴重受損。
(2) 對角點進行提取,保證達到亞像素級別。
(3) 按照一定規(guī)則對角點進行排序。
(4) 計算角點的世界坐標系和圖像坐標系,對內(nèi)外參數(shù)進行初始化。
(5) 計算攝像機單應性矩陣等內(nèi)部參數(shù),對單應性矩陣歸一化處理,利用最小二乘法原理計算出4個內(nèi)參數(shù)。
(6) 利用畸變模型求解畸變參數(shù),然后利用非線性最小二乘法進行參數(shù)優(yōu)化。
(7) 計算外參數(shù)。根據(jù)內(nèi)參數(shù)、畸變參數(shù)和已知點分別求解畸變坐標、單應性矩陣、旋轉(zhuǎn)矩陣和平移矩陣,然后通過高斯-牛頓法對旋轉(zhuǎn)矩陣和平移矩陣進行優(yōu)化提煉(大約進行20次迭代),每次迭代都需要進行一次投影映射變換。
(8) 利用高斯-牛頓方法對所有的參數(shù)進行優(yōu)化提煉,迭代30次,以最后一次的結(jié)果作為最終參數(shù)值。
本方案基于FPGA平臺來實現(xiàn)標定,系統(tǒng)從上層發(fā)出指令,在下位機進行標定。當接收到命令后,系統(tǒng)會立即進行圖片采集,并將圖片送入下位機進行標定,然后分別計算出內(nèi)參數(shù)、外參數(shù)和畸變參數(shù)。此過程只需要進行一次標定,后期只需進行矯正即可。
當下位機計算出參數(shù)之后,立即進入畸變矯正過程。在此過程中,將原始圖像按照一定大小分塊,并通過畸變模型找出畸變圖中對應塊的大小,然后進行坐標映射??紤]到FPGA資源情況,選擇了8個圖像塊同時進行處理,這樣可以大大縮短矯正時間。
畸變矯正的理想圖分辨率為6 576× 4 384,畸變圖分辨率為6 576×4 384。將理想圖按照行列自行分塊,每塊大小為822×548。橫向分為8個塊,縱向分成8個塊,一共64個塊。
分塊后,通過畸變模型計算出原始畸變圖中的畸變塊,然后計算出畸變塊的外接矩形,將畸變圖外接矩形作為畸變圖的分塊。圖2所示為原始圖像到目標圖像的映射過程。blockij模塊中的像素坐標,通過畸變模型計算的坐標在畸變圖外接塊中進行插值,將計算處理的像素值返回,賦值給blockij模塊中像素坐標對應的像素值。為了縮短處理時間,采用模塊并行操作。
圖2 原始圖像到目標圖像的映射過程
此方案稱為陣列點陣標定板,也適用于透視變換。透視變換在FPGA的實現(xiàn)包括坐標生成和坐標映射,畸變矯正也包括坐標生成和坐標映射,二者的算法差異在于坐標生成實現(xiàn)過程不同。透視變換的坐標生成為單應性和線性,而畸變矯正的坐標生成模塊中畸變模型是非線性的,其參數(shù)不同。二者的坐標映射是相同的,此部分可以融合在一起。將畸變矯正和透視變換進行合并,運行時間縮短了一半。圖3所示為透視變換和畸變矯正融合流程。
圖3 透視變換和畸變矯正融合流程
在FPGA開發(fā)板ZC702平臺進行矯正實驗,運行環(huán)境為Win7操作系統(tǒng),CPU為酷睿i7,內(nèi)存為16 GiB。實驗圖像的分辨率是6 576×4 384,開發(fā)板的時鐘頻率是100 MHz。在一般軟件平臺下需要3 000 μs,而本方案總共耗時315 ms,速度提高了9.5倍之多。
圖4所示為畸形圖像矯正效果??梢钥闯?,原始圖像有明顯的桶形畸變,通過矯正之后,桶形畸變明顯改善。表1所示為矯正前后圖像參數(shù)。
圖4 畸形圖像矯正效果
傾斜度是指圖像有效區(qū)間外界矩形與水平方向的角度;邊界最大間隙是指圖片有效區(qū)和其外界矩形沒有重合的最大間隙;背景亮度是指圖像的平均亮度;缺陷亮度是指圖像中缺陷的平均亮度。
表1 矯正前后圖像參數(shù)
對棋盤格圖像進行校正后,圖像方格的大小(寬度和高度)如圖5所示。在理想狀態(tài)下,校正后棋盤格圖像垂直方向長度像素為485,水平方向長度像素均為670,所有方格的大小應該相同。
實驗測量結(jié)果顯示,方格與理想方格寬度和高度差距只在1個像素范圍以內(nèi),說明矯正精度很高。
圖5 矯正后的棋盤格圖像
本次研究中,提出了陣列點陣標定板的方案,采用FPGA工具對畸變圖像進行校正。實驗效果圖非常完美,圖像矯正速度相比傳統(tǒng)基于純軟件的方案提高了9.5倍,圖像矯正的像素精度可以達到1。本次研究僅基于單通道,在以后的研究中將嘗試雙通道、四通道等處理技術的實驗。