本發(fā)明屬于圖像處理技術(shù)領域,特別涉及一種基于相機陣列的全景成像方法,可用于橫豎兩個方向更大場景圖像的拼接。
背景技術(shù):
隨著科學技術(shù)的發(fā)展,數(shù)字成像技術(shù)正在逐步邁上一個新的臺階,數(shù)字成像設備也開始被廣泛應用于日常生活中,利用數(shù)碼相機,手機等設備拍攝相片已成為人們?nèi)粘I钪胁豢苫蛉钡囊徊糠郑c此同時,單個相機成像的局限也在日益顯現(xiàn):在一些特殊的應用場景中,由于數(shù)字成像設備自身的限制,使得使用者的需求不能被很好地滿足。例如,當人們要獲得寬視場,高分辨率的圖像時,很多時候只能采用廣角相機,然而其昂貴的價格卻使人望而卻步。
為了解決上述問題,圖像拼接技術(shù)應運而生。該技術(shù)可以將一系列有部分重疊邊界的小視角圖像根據(jù)相應算法進行匹配對準進而融合,最終拼接成一幅寬視角圖像。
圖像拼接技術(shù)最直接的應用就是手機自帶的全景成像模式,然而其局限也顯而易見:只能橫拍或只能豎拍,最終得到的圖像只有一個方向的延伸;同時,拍攝這樣的圖像需要手持拍攝時有極高的穩(wěn)定度,否則會導致最終得到的圖像產(chǎn)生變形,無法得到想要的效果,使得用戶體驗大打折扣。
維沃移動通信有限公司擁有的專利“一種全景拍照的方法及移動終端”(申請?zhí)?01610515352.x,申請日2016.06.30,授權(quán)號cn1059779156a,授權(quán)日2016.09.28)提出了一種全景拍照的方法及移動終端。該專利技術(shù)包括第一、第二和第三攝像頭,通過在全景拍攝中控制三個攝像頭獲取三幅圖像,同時進行圖像拼接,生成目標全景圖像,可在不水平旋轉(zhuǎn)移動終端的情況下,一次拍照就獲取到全景圖像。該方法存在的不足之處是一次拍照僅能獲取一個方向的圖像,最終結(jié)果不能滿足某些大場景拼接的需求。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的在于針對上述已有技術(shù)的不足,提出一種基于相機陣列的全景成像方法,以通過一次拍照同時獲取橫豎兩個方向的圖像,滿足更大場景圖像拼接的需求。
本發(fā)明的基本思路是:使用2×3陣列相機得到陣列圖像,每兩幅圖像間都存在重疊區(qū)域,控制六個相機同步采集圖像;對圖像分別進行特征提取與兩兩匹配,最后進行圖像融合完成拼接。其實現(xiàn)步驟如下:
(1)使用陣列相機完成多幅圖像的同時采集,獲取i幅圖像,m≤i;
(2)讀入兩幅圖像并分別提取尺度不變特征變換特征點,即sift特征點;
(3)對步驟(2)所得sift特征點進行特征匹配查找,得到每兩幅圖像的匹配點;
(4)對步驟(3)所得的每兩幅圖像匹配點進行篩選并計算最優(yōu)變換矩陣h;
(5)根據(jù)步驟(4)所得最優(yōu)變換矩陣對圖像進行變換,并進行圖像融合:
(5a)根據(jù)步驟(4)所得最優(yōu)變換矩陣對輸入兩幅圖像中的任意一幅進行變換,使得兩幅圖像位于同一坐標系中且兩幅圖像具有重疊區(qū)域;
(5b)對(5a)中變換到同一坐標系的兩幅圖像進行亮度校正,使兩幅圖像的亮度差異最??;
(5c)在配準的圖像上尋找一條最佳縫合線;
(5d)對包含最佳縫合線的矩形進行加權(quán)平均融合,得到兩幅圖像的拼接全景圖像;
(6)陣列圖像拼接:
(6a)以其前一次拼接好的圖像和待拼接圖像作為輸入的兩幅圖像,繼續(xù)重復步驟(2)~(5),循環(huán)進行,直到待拼接圖像為第m幅圖像為止,m<=i,最終得到m幅圖像的橫向拼接全景圖;
(6b)重復(6a)k次,k<=i且k×m≤i,得到k幅橫向拼接圖,每幅橫向拼接圖由m幅圖像拼接而成;
(6c)將k幅橫向圖像的前兩幅作為輸入圖像,逆時針旋轉(zhuǎn)90°,重復步驟(2)~(5),得到兩幅圖像的縱向拼接圖,對于剩余k-2幅橫向圖像,以其前一次拼接好的圖像和逆時針旋轉(zhuǎn)90°后的待拼接圖像作為輸入的兩幅圖像,再重復步驟(2)~(5),循環(huán)進行,直到待拼接圖像為第k幅圖像為止,再將拼接所得的縱向圖像順時針旋轉(zhuǎn)90°,最終得到i幅圖像的橫縱向拼接全景圖。
本發(fā)明與現(xiàn)有技術(shù)相比有以下優(yōu)點:
第一、本發(fā)明將陣列圖像與sift算法結(jié)合,并對sift算法進行了改進,在景深基本一致的情況下可以大幅縮減拼接時間;
第二、本發(fā)明有效的實現(xiàn)了陣列圖像與融合算法的結(jié)合,并對現(xiàn)有尋找最佳縫合線的算法進行了改進,即使用陣列相機獲取圖像,可以同時采集i幅圖像進行拼接,減小因時間變化而導致的場景誤差,尤其在動態(tài)場景下的物體位移相對最小,使得拼接效果更好;改進的最佳縫合線算法可以有效避開運動物體進行拼接,實驗結(jié)果顯示拼接圖像幾乎不存在拼接縫,“鬼影”現(xiàn)象的出現(xiàn)頻率也大幅下降;
第三、本發(fā)明使用陣列相機采集圖像,可以滿足一次拍攝就拼接成像,減少了工作量,得到更大視場,更高分辨率的拼接圖。
附圖說明
圖1為本發(fā)明的實現(xiàn)流程圖;
圖2為本發(fā)明中用于圖像采集的相機陣列圖;
圖3為本發(fā)明中相機陣列采集的六幅圖像;
圖4為對圖3中的六幅圖像進行了拼接及融合后的全景圖像。
具體實施方式
下面結(jié)合附圖對本發(fā)明的具體實施例進行詳細說明:
參照圖1,本發(fā)明的實現(xiàn)步驟如下:
步驟1,獲取圖像。
采用如圖2所示相機陣列采集圖像,該相機陣列由i個相機在橫縱方向進行二維組合排列,通過調(diào)節(jié)每個相機的位置及焦距,使得這些相機始終能夠成行成列且整體組合為矩形,得到滿足不同要求的圖像。
該相機陣列中的每一個相機都可以連續(xù)采集多幅圖像;通過改變相機的位置獲取不同視野的圖像;同時,每個相機都可以調(diào)節(jié)焦距,獲得不同景深的圖像。
調(diào)節(jié)好相機位置及焦距后,快速按下開始與結(jié)束鍵,得到每個相機采集到的若干幅圖像,每相鄰兩個相機采集到的圖像均具有重疊區(qū)域,共得到i幅具有重疊區(qū)域的圖像,本實例給出但不限于六幅圖像。
步驟2,讀入兩幅圖像并分別提取sift特征。
常見的特征點提取算法包括:harris算子,log算子,susan算子,sift算法等,本發(fā)明采用尺度不變特征變換算法提取特征點,即sift特征點,步驟如下:
(2a)構(gòu)建高斯金字塔及高斯差分金字塔,檢測尺度空間極值;
(2a1)構(gòu)建高斯金字塔的過程包括對圖像做降采樣和對圖像做高斯平滑兩步;
根據(jù)圖像的原始大小和塔頂圖像的大小,計算金字塔的層數(shù)n:
n=log2{min(m,n)}-t,t∈[0,log2{min(m,n)})
其中m,n分別為原圖像的長和寬,t為塔頂圖像的最小維數(shù)的對數(shù)值。
在本發(fā)明中,調(diào)整每個相機焦距,使得相機拍攝圖像的景深基本一致,此時兩幅圖像的尺度基本一致,使得對兩幅圖像構(gòu)建金字塔時金字塔層數(shù)n是一個大于1小于4的值,以降低拼接時間;
(2a2)將原圖像作為高斯金子塔的第一層,再對原始圖像逐層降階采樣,每次降采樣所得到的新圖像為金字塔的新一層,直到第n層為止,得到一系列由大到小的圖像,從下到上構(gòu)成塔狀模型,得到初始圖像金字塔;
(2a3)將初始圖像金字塔每層的一張圖像使用不同參數(shù)做高斯模糊,使得金字塔的每層含有多張高斯模糊圖像,將金字塔每層多張圖像合稱為一組,得到高斯金字塔;
(2a4)構(gòu)建高斯差分金字塔,即dog金字塔:將(2a3)得到的高斯金字塔每組中相鄰上下兩張圖像相減,得到高斯差分金字塔;
(2a5)進行空間極值點檢測:
取高斯差分金字塔每組中的每一個像素點,分別將它們與本張以及上下兩張的26個鄰域中所有像素點作比較:如果從高斯差分金字塔所取的像素點的值是最大值或最小值,則所取點的像素值是圖像在當前尺度下的一個尺度空間極值,其中尺度空間由高斯金字塔實現(xiàn),每一組的每一張圖像對應不同的尺度;
(2b)將(2a)中的尺度空間極值作為關鍵點,對該關鍵點進行定位和方向確定:
(2b1)通過插值去除低對比度的點,并且消除邊緣響應,完成對關鍵點的精確定位;
(2b2)對特征點進行方向賦值:
對于(2b1)精確定位的關鍵點,采集其所在高斯金字塔圖像3σ鄰域窗口內(nèi)像素的梯度和方向分布特征,梯度的模值m(x,y)和方向θ(x,y)如下:
θ(x,y)=tan-1((l(x,y+1)-l(x,y-1))/l(x+1,y)-l(x-1,y)))
其中,l為關鍵點所在的尺度空間值,梯度的模值m(x,y)按σ=1.5σ_oct的高斯分布加成,3σ鄰域窗口半徑為3×1.5σ_oct;
(2b3)使用直方圖依次統(tǒng)計每個關鍵點鄰域窗口內(nèi)像素的梯度和方向,即將直方圖以每10度方向為一個柱,共36個柱,柱表示的方向為像素點梯度方向,柱的長短為梯度幅值,以直方圖中最長柱表示的方向作為每個關鍵點的主方向,完成方向確定;
(2c)對于每個完成定位和方向確定的關鍵點周圍圖像區(qū)域進行分塊,并在該關鍵點為中心的4×4的塊內(nèi)計算8個方向的梯度直方圖,繪制每個梯度方向的累加,生成具有獨特性的128維的向量,用該向量將這個關鍵點描述出來,得到兩幅圖像的sift特征。
步驟3,進行特征匹配查找,得到每兩幅圖像的匹配點。
采用k-d樹算法即k-dtree算法和最優(yōu)節(jié)點優(yōu)先算法,即bbf算法對圖像進行特征匹配查找,實現(xiàn)兩個圖像的特征點匹配,步驟如下:
(3a)采用k-d樹算法根據(jù)步驟(2)所得的特征點對待拼接圖像中的特征點建立k-d樹;
(3b)采用bbf算法對圖像進行特征匹配查找,實現(xiàn)兩個圖像的特征點匹配:
(3b1)對輸入圖像中的每個特征點,在k-d樹中查找出待拼接圖像中與之歐氏距離最近的前兩個最近鄰特征點;
(3b2)將指定特征點與兩個最近鄰特征點中第一個最近鄰的歐式距離與指定特征點與第二個最近鄰的歐式距離求,并將該比值與設定的比例閾值0.49進行比較:
如果比值小于該比例閾值,則接受指定特征點與第一個最近鄰點為一對匹配點,實現(xiàn)兩個圖像的特征點匹配;否則不接受指定特征點與第一個最近鄰點為一對匹配點。
步驟4,對步驟3所得的每兩幅圖像匹配點進行篩選并計算最優(yōu)變換矩陣h。
本步驟采用ransac算法進行,其步驟如下:
(4a)將步驟3中所得匹配點對作為樣本集,從樣本集中隨機抽選一個ransac樣本,即4個匹配點對;
(4b)根據(jù)這4個匹配點對計算當前變換矩陣l;
(4c)根據(jù)樣本集、當前變換矩陣l和誤差度量函數(shù),得到滿足當前變換矩陣l的一致集c,并記錄一致集中元素的個數(shù)a;
(4d)設定一個最優(yōu)一致集,初始元素個數(shù)為0,將當前一致集中元素個數(shù)a與最優(yōu)一致集中元素個數(shù)做比較:如果當前一致集中元素個數(shù)a大于最優(yōu)一致集中元素個數(shù),則將最優(yōu)一致集更新為當前一致集,否則,則不更新最優(yōu)一致集;
(4e)計算當前錯誤概率p:
p=(1-in_fracs)o
其中,in_frac為當前最優(yōu)一致集中元素個數(shù)占樣本集中樣本總數(shù)的百分比,s是計算變換矩陣需要的最小特征點對個數(shù),取值為s=4,o是迭代次數(shù);
(4f)將計算當前錯誤概率p與允許的最小錯誤概率0.01進行比較:
如果p大于允許的最小錯誤概率,則返回步驟(4a),直到當前錯誤概率p小于最小錯誤概率為止;
如果p小于允許的最小錯誤概率,則當前最優(yōu)一致集對應的變換矩陣l即為所求的最優(yōu)變換矩陣h,該最優(yōu)變換矩陣的大小為3×3。
步驟5,根據(jù)步驟4所得最優(yōu)變換矩陣對圖像進行變換和圖像融合。
由于傳統(tǒng)的加權(quán)平均融合算法易產(chǎn)生“鬼影”現(xiàn)象,尤其在動態(tài)場景下,當使用陣列相機采集圖像時,如存在運動物體,直接傳統(tǒng)的加權(quán)平均融合算法效果很差,很難體現(xiàn)運動物體,因此本發(fā)明采用一種改進的最佳縫合線算法與加權(quán)融合算法結(jié)合,對“鬼影””現(xiàn)象的拼接融合有顯著地改進,其步驟如下:
(5a)根據(jù)步驟(4)所得變換矩陣對輸入兩幅圖像中的任意一幅進行變換,使得兩幅圖像位于同一坐標系中;
(5b)對(5a)中變換到同一坐標系的兩幅圖像進行亮度校正,使兩幅圖像的亮度差異最小,過程如下:
(5b1)將待拼接圖像與輸入圖像均轉(zhuǎn)化為灰度圖,分別計算出待拼接圖像的像素和與輸入圖像的像素和,即先計算輸入圖像非重疊部分的像素值之和g及待拼接圖像非重疊部分的像素值之和v;再計算重疊區(qū)域的中心矩形的像素和q,該中心矩形的高為重疊區(qū)域高度值的1/2,寬為重疊區(qū)域?qū)挾鹊?/1.5;然后得到輸入圖像的像素和為g+q,得到待拼接圖像的像素和為v+q;
(5b2)計算待拼接圖像與輸入圖像像素和的比值b,并將比值b與1進行比較:
如果b小于1,則將輸入圖像每點的像素值與b相乘,執(zhí)行(5c);
如果b大于1,則將待拼接圖像的每點的像素值與b的倒數(shù)相乘,執(zhí)行(5c);
(5c)在配準且亮度矯正過的圖像上尋找一條最佳縫合線:
(5c1)將輸入圖像和待拼接圖像均轉(zhuǎn)化為灰度圖,將輸入圖像與待拼接圖像在重疊區(qū)域的對應像素進行依次相減,得到兩幅圖像重疊區(qū)域的差值圖像,計算差值圖像中每個像素的強度值e(x,y):
e(x,y)=|egray(x,y)|+egeometry(x,y),
其中,egray表示重疊區(qū)域像素點的灰度值之差,egeometry表示重疊區(qū)域像素點的結(jié)構(gòu)值之差:
egeometry=(▽x1-▽x2)×(▽y1-▽y2)
其中,▽x1-▽x2為輸入圖像與待拼接圖像在重疊區(qū)域的對應像素在x方向的梯度差,
▽y1-▽y2為輸入圖像與待拼接圖像在重疊區(qū)域的對應像素在y方向的梯度差;
▽x1為輸入圖像在重疊區(qū)域每個點在x方向的梯度,該梯度由x方向的核sx與輸入圖像在重疊區(qū)域圖像中的每個像素點做卷積和的運算得到;
▽x2為待拼接圖像在重疊區(qū)域每個點在x方向的梯度,該梯度由x方向的核sx與待拼接圖像在重疊區(qū)域圖像中的每個像素點做卷積和的運算得到;
▽y1為輸入圖像在重疊區(qū)域每個點在y方向的梯度,該梯度由y方向的核sy與輸入圖像在重疊區(qū)域圖像中的每個像素點做卷積和的運算得到;
▽y2為待拼接圖像在重疊區(qū)域每個點在y方向的梯度,該梯度由y方向的核sy與待拼接圖像在重疊區(qū)域圖像中的每個像素點做卷積和的運算得到;
sx,sy均為改進的sobel算子模板,分別為:
(5c2)運用動態(tài)規(guī)劃理論,將差值圖像第一行的每一像素點作為一條縫合線的起點,向下擴展,尋找下一行相鄰的三個點中強度值最小的點,使之作為縫合線的擴展方向,依次類推到最后一行,在生成的所有縫合線中找出e(x,y)之和最小的一條縫合線作為最佳縫合線;
(5d)對包含最佳縫合線的矩形進行加權(quán)平均融合,得到兩幅圖像的拼接全景圖像:
(5d1)找到最小縫合線后,取包含縫合線在內(nèi)并左右各擴展10個像素的矩形區(qū)域,對其中的像素進行加權(quán)平均,得到該矩形區(qū)域的融合圖;
(5d2)從輸入圖像中取得矩形區(qū)域左邊部分,從變換后的待拼接圖像中取得矩形區(qū)域右邊部分,得到最終的融合圖,至此,完成了兩幅輸入圖像的拼接。
步驟6,陣列圖像的拼接。
(6a)以其前一次拼接好的圖像和待拼接圖像作為輸入的兩幅圖像,繼續(xù)重復步驟2~步驟5,循環(huán)進行,直到待拼接圖像為第3幅圖像為止,最終得到3幅圖像的橫向拼接全景圖;
(6b)重復(6a)兩次,得到兩幅橫向拼接圖,每幅橫向拼接圖由3幅圖像拼接而成;
(6c)判斷這兩幅橫向拼接圖的長和寬是否是4的倍數(shù):若不是,將這兩幅橫向拼接圖的長和寬就近修改為4的倍數(shù),若是,則保持這兩幅橫向拼接圖的長和寬不變;
(6d)將兩幅橫向拼接圖作為輸入圖像,逆時針旋轉(zhuǎn)90°,重復步驟2~步驟5,得到兩幅圖像的縱向拼接圖,再將拼接所得的縱向圖像順時針旋轉(zhuǎn)90°,最終得到6幅圖像的橫縱向拼接全景圖。
需要說明的是,本發(fā)明方法不僅僅局限于六幅陣列圖像的拼接,該方法具有廣泛適用性,在相機足夠多的情況下或者移動相機分別取景時,可完成更多圖像的拼接,也可以在現(xiàn)有基礎上完成兩幅,三幅,四幅圖像的拼接,滿足各種不同的需求,適用于各種不同的場合。同時,由于陣列相機可以實現(xiàn)六個相機同時拍攝,也保證了拼接結(jié)果的準確性。
本發(fā)明的效果可通過一些實驗進一步說明。
1.實驗條件
實驗系統(tǒng)包括一個陣列相機,如圖2所示,本實驗在vs2010的軟件環(huán)境下進行。
2.實驗內(nèi)容
使用本發(fā)明方法采集室外圖像,場景中包括一個正在移動的人,陣列相機采集到的圖像如圖3所示,其中圖3中包括有六幅具有重疊區(qū)域的圖像,利用本發(fā)明方法對圖3六幅圖像進行拼接后得到圖4全景圖。
從圖4可見,本發(fā)明對存在動態(tài)物體的圖像拼接效果良好,不存在“鬼影”現(xiàn)象;在整幅拼接全景圖中,沒有觀察到明顯的拼接縫;相比單幅圖像,該拼接全景圖視野更大,圖像細節(jié)更多,可獲得高質(zhì)量的拼接結(jié)果。