0 前言
?? 這兩年開始畢業(yè)設(shè)計和畢業(yè)答辯的要求和難度不斷提升,傳統(tǒng)的畢設(shè)題目缺少創(chuàng)新和亮點,往往達(dá)不到畢業(yè)答辯的要求,這兩年不斷有學(xué)弟學(xué)妹告訴學(xué)長自己做的項目系統(tǒng)達(dá)不到老師的要求。
為了大家能夠順利以及最少的精力通過畢設(shè),學(xué)長分享優(yōu)質(zhì)畢業(yè)設(shè)計項目,今天要分享的是
?? python opencv 機(jī)器視覺圖像拼接算法
??學(xué)長這里給一個題目綜合評分(每項滿分5分)
- 難度系數(shù):3分
- 工作量:3分
- 創(chuàng)新點:3分
圖像拼接在實際的應(yīng)用場景很廣,比如無人機(jī)航拍,遙感圖像等等,圖像拼接是進(jìn)一步做圖像理解基礎(chǔ)步驟,拼接效果的好壞直接影響接下來的工作,所以一個好的圖像拼接算法非常重要。
再舉一個身邊的例子吧,你用你的手機(jī)對某一場景拍照,但是你沒有辦法一次將所有你要拍的景物全部拍下來,所以你對該場景從左往右依次拍了好幾張圖,來把你要拍的所有景物記錄下來。那么我們能不能把這些圖像拼接成一個大圖呢?
這是一個非常好的畢業(yè)設(shè)計研究課題,學(xué)長非常推薦!
一、拼接效果
依照慣例, 廢話不多說,先上拼接效果
拼接左圖:
拼接右圖:
拼接效果:
拼接前:
拼接后:
二、算法介紹
1.拼接算法簡介
圖像拼接技術(shù)就是將數(shù)張有重疊部分的圖像(可能是不同時間、不同視角或者不同傳感器獲得的)拼成一幅無縫的全景圖或高分辨率圖像的技術(shù)。在醫(yī)學(xué)成像、計算機(jī)視覺、衛(wèi)星數(shù)據(jù)、軍事目標(biāo)自動識別等領(lǐng)域具有重要意義。
圖像拼接目前有很多算法,圖像拼接的質(zhì)量,主要依賴于圖像的配準(zhǔn)程度,因此通過不同的圖像匹配方式將算法分為以下兩種:
1.1 基于區(qū)域相關(guān)拼接算法
該算法比較傳統(tǒng)和普遍,從待拼接圖像的灰度值出發(fā),對待配準(zhǔn)圖像中一塊區(qū)域與參考圖像中的相同尺寸的區(qū)域使用最小二乘法或者其它數(shù)學(xué)方法計算其灰度值的差異(1.通過累加各點灰度的差值,2.計算兩塊區(qū)域的對應(yīng)像素點灰度值的相關(guān)系數(shù),相關(guān)系數(shù)越大,則兩塊圖像的匹配程度越高,3.兩者中計算相關(guān)系數(shù)的效果更好)。對此差異比較后來判斷待拼接圖像重疊區(qū)域的相似程度,由此得到待拼接圖像重疊區(qū)域的范圍和位置,從而實現(xiàn)圖像拼接。
也可以通過FFT 變換將圖像由時域變換到頻域,然后再進(jìn)行配準(zhǔn)。對位移量比較大的圖像,可以先校正圖像的旋轉(zhuǎn),然后建立兩幅圖像之間的映射關(guān)系。
1.2 基于特征相關(guān)拼接算法
于特征的配準(zhǔn)方法不是直接利用圖像的像素值,而是通過像素導(dǎo)出圖像的特征,然后以圖像特征為標(biāo)準(zhǔn),對圖像重疊部分的對應(yīng)特征區(qū)域進(jìn)行搜索匹配,該類拼接算法有比較高的健壯性和魯棒性。
在兩幅圖像對應(yīng)的特征集中利用特征匹配算法盡可能地將存在對應(yīng)關(guān)系的特征對選擇出來。一系列的圖像分割技術(shù)都被用到特征的抽取和邊界檢測上。
1.3 拼接算法的基本流程
- 根據(jù)給定圖像/集,實現(xiàn)特征匹配
- 通過匹配特征計算圖像之間的變換結(jié)構(gòu)
- 利用圖像變換結(jié)構(gòu),實現(xiàn)圖像映射
- 針對疊加后的圖像,采用APAP之類的算法, 對齊特征點
- 通過圖割方法,自動選取拼接縫
- 根據(jù)multi-band bleing策略實現(xiàn)融合
2. 拼接算法原理
2.1 第一種:特征匹配
特征是要匹配的兩個輸入圖像中的元素,為了給圖像提供更好的特征匹配,采用角點匹配,進(jìn)行定量測量。在視點變化時,角點特征是穩(wěn)定的。角點檢測算法有Harris角點檢測算法、SIFT特征點檢測算法、FAST角點檢測算法、SURF特征點檢測算法。
本次實驗使用的Opencv stitch源碼中默認(rèn)第一選擇是SURF特征點檢測,第二是ORB特征點檢測。
SURF(Speeded Up Robust Features)改進(jìn)了特征的提取和描述方式,用一種更為高效的方式完成特征的提取和描述。它是SIFT的高效變種,也是提取尺度不變特征,算法步驟與SIFT算法大致相同,但采用的方法不一樣,SURF算法要比SIFT算法更高效。
2. 2 第二種:計算圖像之間的變換結(jié)構(gòu)
- 2.1.SURF使用Hessian矩陣來檢測特征點,該矩陣是x,y方向的二階導(dǎo)數(shù)矩陣,可測量一個函數(shù)的局部曲率,其行列式值代表像素點周圍的變化量,特征點需取行列式值的極值點。
- 2.2特征點定位:通過特征點鄰近信息插補(bǔ)來定位特征點。
- 2.3方向定位:通過計算特征點周圍像素點x,y方向的哈爾小波變換,并將x,y方向的變換值在xy平面某一角度區(qū)間內(nèi)相加組成一個向量,在所有的向量當(dāng)中最長的(即x、y分量最大的)即為此特征點的方向。
- 2.4特征描述子:選定了特征點的方向后,其周圍相素點需要以此方向為基準(zhǔn)來建立描述子。此時以5 ? 5 555?5個像素點為一個子區(qū)域,取特征點周圍 20 ? 20 202020?20個像素點的范圍共16個子區(qū)域,計算子區(qū)域內(nèi)的x、y方向(此時以平行特征點方向為x、垂直特征點方向為y的哈爾小波轉(zhuǎn)換總和Σdx、ΣdyΣdx、Σdy與其向量長度總和Σ|dx|、Σ|dy|Σ|dx|、Σ|dy|共四個量值,共可產(chǎn)生一個64維的描述子。
- 2.5如果兩個特征點的矩陣跡正負(fù)號相同,代表這兩個特征具有相同方向上的對比度變化,如果不同,說明這兩個特征點的對比度變化方向是相反的,即使歐氏距離為0,也直接予以排除。
- 2.6用方型濾波器取代SIFT中的高斯濾波器,利用積分圖(計算位于濾波器方型的四個角落值)大幅提高運算速度。
2. 3 第三種:通過graph cut尋找拼接縫
上圖中,我們把兩個Patch拼合到一起,它們首先被放置為有一定重合區(qū)域。為了讓兩者之間的縫隙盡可能的不明顯,我們需要知道一個分割線(cut),在這個分割線的左邊,圖像像素由A貢獻(xiàn),相反在其右邊,圖像像素則由B貢獻(xiàn)。
這里我們將輸出的圖像看做是由”圖(Graph)“所表示,并且給這個Graph兩個端點,一個是A,一個是B:
文章來源:http://www.zghlxwxcb.cn/news/detail-730659.html
上圖中,標(biāo)有數(shù)字的節(jié)點實際上是重合區(qū)域的像素,節(jié)點之間的連接都是有代價的。我們需要拿起剪刀從某個連接上剪掉某些連接,并且要使得被剪掉的連接的代價之和最小化,這就是最典型的圖算法中的最小割問題(min cut),它也對應(yīng)著所謂的最大流問題(max flow)。
那么,如何定義連接之間的代價呢?這里假設(shè)在重合區(qū)域兩個相鄰的輸出像素分別是s和t。我們知道輸出的像素既可能來自于A,也可能來自于B,于是我們用A(s),B(s)來表示s點在A圖和B圖的顏色, 用A(t),B(t)來表示t點在A圖和B圖的顏色。
于是,s點和t點的連接的代價被定義為:
我們要做的就是尋找一個切割縫,最小化M ( s , t , A , B ) M(s,t,A,B)M(s,t,A,B)當(dāng)找到這條縫之后,左邊的像素從A中拷貝而來,而右邊的像素則從B中拷貝而來即可。
接下來就可以不斷的拼合更多的Patch,目標(biāo)是用越來越多次的覆蓋輸出圖片中的縫隙,使得圖像重合部分越來越多,直到代價值收斂。文章來源地址http://www.zghlxwxcb.cn/news/detail-730659.html
最后
到了這里,關(guān)于計算機(jī)畢設(shè) python opencv 機(jī)器視覺圖像拼接算法的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!