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