
摘要:隨著仿生學(xué)技術(shù)的快速發(fā)展,科學(xué)家們模仿魚的眼睛的基本結(jié)構(gòu)研究設(shè)計出了魚眼鏡頭,魚眼鏡頭本質(zhì)上是超大廣角的攝像頭,焦距小、視野大是它的特點(diǎn)和優(yōu)勢。但是,由于魚眼鏡頭結(jié)構(gòu)的特殊性,會產(chǎn)生一定程度的畸變,如何消除這種畸變引起了科學(xué)界廣泛的關(guān)注。
關(guān)鍵詞:魚眼鏡頭矯正;數(shù)字識別;Python;OpenCV
一、引言
20世紀(jì)初,魚眼鏡頭就漸漸進(jìn)入了人們的視野,并且在之后的幾年不斷蓬勃發(fā)展,為了更好的使用魚眼鏡頭帶來的便利,科學(xué)家就矯正魚眼鏡頭產(chǎn)生的圖像畸變課題做出了很多研究,并且取得了可觀的成就。
在現(xiàn)有的一些研究成果中看,對于魚眼鏡頭的畸變校正研究,一般都是分為兩個方面,即標(biāo)準(zhǔn)化標(biāo)定和優(yōu)化校正算法。魚眼鏡頭的畸變校正技術(shù)從開始最為傳統(tǒng)的對魚拍攝的圖像產(chǎn)生的畸變校正,到對魚眼鏡頭自身標(biāo)定的校正技術(shù),最后到魚眼鏡頭可以自動視覺校正,魚眼鏡頭矯正技術(shù)不斷發(fā)展,不斷優(yōu)化為其更為廣泛的應(yīng)用奠定了堅(jiān)實(shí)的基礎(chǔ)。
魚眼鏡頭矯正技術(shù)的一項(xiàng)重要應(yīng)用就是數(shù)字識別,因?yàn)轸~眼鏡頭可以獲得大量的信息量,對于近距離、大面積區(qū)域的數(shù)字圖像采集識別,比如圖書、檔案的數(shù)字標(biāo)簽的機(jī)器識別既可以節(jié)省設(shè)備成本,又可以提升數(shù)字識別的效率和準(zhǔn)確度,在現(xiàn)實(shí)社會中有很高的應(yīng)用價值。
二、魚眼鏡頭基本研究
魚眼鏡頭一種超大廣角的特殊鏡頭,前端的第一片透鏡是向前突出的,即為凸透鏡,而且其頂點(diǎn)超出了鏡筒,在外形上類似于金魚鼓起的眼睛,這也就是魚眼鏡頭名字的由來。
魚眼鏡頭的成像過程可以分為兩個步驟:第一步,將光學(xué)的中心設(shè)為球心來建立球面坐標(biāo)模型,并使用中心投影的方法將整個空間內(nèi)的每一個點(diǎn)都映射到這一球面上;第二步,將這一球面上的投影點(diǎn)再映射到像平面上,使之成為像平面中的像素點(diǎn)。傳統(tǒng)相機(jī)采用的是經(jīng)典的“相似性”原理,而魚眼鏡頭采用的則是“非線性映射”。
三、魚眼鏡頭的矯正
魚眼鏡頭的畸變矯正流程通常能夠分為兩個方面,即魚眼鏡頭的畸變標(biāo)定和畸變校正。矯正魚眼鏡頭圖像畸變的完整流程圖如圖所示。
畸變標(biāo)定是魚眼鏡頭矯正的第一步,分為角點(diǎn)檢測和標(biāo)定參數(shù)計算兩個步驟,角點(diǎn)檢測可以確定標(biāo)定模板的灰度值信息變化程度比較大的區(qū)域,并且將其認(rèn)定做此標(biāo)定模板的角點(diǎn)處。
在實(shí)際操作過程中,一般會選擇棋盤之類的一些有一定規(guī)律的事物作為標(biāo)定模板,這里選擇使用的是內(nèi)部角點(diǎn)為9*6的棋盤格作為標(biāo)定模板。為了提升的標(biāo)定參數(shù)的精度,需要從不同的角度對同一個棋盤格拍攝多張圖像,整個拍攝只是簡單的重復(fù)取樣過程。
這里使用的棋盤格的每行每列角點(diǎn)數(shù)為Size board_size = Size(9,6),且其中每個小棋盤格的大小Size square_size = Size(20,20),共拍攝11張魚眼棋盤圖像。處理棋盤圖像時先使用cvtColor函數(shù)把彩色圖像變成灰度圖,通過檢測找出標(biāo)定圖像的灰度值信息變化程度比較劇烈的區(qū)域作為標(biāo)定模板的角點(diǎn)。最后,用findChessboardCorners函數(shù)提取角點(diǎn)并且使用CornerSubPix函數(shù)進(jìn)行過亞像素精確化,即完成了角點(diǎn)檢測環(huán)節(jié)的工作。
接著確定魚眼鏡頭的內(nèi)在固有參數(shù),這里主要使用的函數(shù)是fisheye::calibrate,其中涉及到許多參數(shù),包括objectPoints, imagePoints,K,D,rvecs, tvecs,DIM等,最為主要的是對DIM、K和D的計算。魚眼鏡頭矯正的第二步是畸變校正,使用initUndistortRectifyMap函數(shù)做非線性映射??梢酝ㄟ^目標(biāo)圖像找到與之對應(yīng)的原始圖像坐標(biāo),再將所求得的坐標(biāo)值返回復(fù)制到目標(biāo)圖像的坐標(biāo)系中,即可將畸變的圖像矯正為正常圖片。
四、魚眼圖像的數(shù)字識別
數(shù)字識別主要使用的是SVM分類庫的方法,運(yùn)用SVM分類庫進(jìn)行簡單數(shù)字識別首先要獲取大量的數(shù)字圖片訓(xùn)練樣本,使用訓(xùn)練樣本總結(jié)出手寫數(shù)字中存在的內(nèi)在規(guī)則。訓(xùn)練樣本的數(shù)量越多,算法的準(zhǔn)確性越高。
這里采用的數(shù)據(jù)集總共有759個黑色數(shù)字圖片,每個數(shù)字約有70張圖片首先,將數(shù)字圖片轉(zhuǎn)換為只有數(shù)字0和1的二進(jìn)制矩陣,有數(shù)字內(nèi)容的部分為1,其余部分為0,保存在文本文檔中,為訓(xùn)練數(shù)據(jù)集做好準(zhǔn)備。
在對數(shù)據(jù)集訓(xùn)練時,需要將全部數(shù)據(jù)集分為兩個部分:訓(xùn)練集和測試集,用訓(xùn)練集圖片進(jìn)行數(shù)據(jù)集的訓(xùn)練,用測試集圖片對訓(xùn)練好的模型進(jìn)行檢測,這里采用的測試集包含600張黑體數(shù)字圖片,即0至9每個數(shù)字有60張圖片,最后通過計算得出判斷準(zhǔn)確的圖片的概率,基本符合預(yù)期要求。
對待識別的圖像進(jìn)行二值化處理,圖片中的每一個像素點(diǎn)分為256個亮度等級,二值化過程也就是分析每一個像素點(diǎn)的灰度值,這里設(shè)定的閾值是100,即灰度值大于100的像素點(diǎn)呈現(xiàn)黑色,灰度值小于100的像素點(diǎn)呈現(xiàn)白色。二值化處理減少了部分圖像矯正時產(chǎn)生的模糊和干擾,提高了數(shù)字識別的準(zhǔn)確性。
最后,將待識別圖片進(jìn)行數(shù)字分割,將其中的每個數(shù)字提取出來,形成單個的數(shù)字圖片并識別,識別效果達(dá)到預(yù)期要求。
五、綜述
本文介紹了魚眼鏡頭矯正技術(shù)的發(fā)展意義及魚眼鏡頭的基本結(jié)構(gòu)與成像原理。分析了對魚眼鏡頭所產(chǎn)生畸變的矯正方法及矯正流程,將魚眼鏡頭的矯正過程分為兩個步驟:魚眼鏡頭標(biāo)定和矯正魚眼圖像,在OpenCV環(huán)境下用Python語言編程將存在畸變的魚眼圖像矯正為符合人們正常認(rèn)知的圖片。最后對魚眼圖像中的數(shù)字信息進(jìn)行識別,通過SVM分類器方法提取出其中的數(shù)字信息。
作者簡介:
金益帆(1997—),女,滿族,河北石家莊人,學(xué)歷:本科,職稱:初級工程師。