https://zhuanlan.zhihu.com/p/71777362
1.1 圖像拼接基本步驟
圖像拼接的完整流程如上所示,首先對輸入圖像提取魯棒的特征點,並根據特征描述子完成特征點的匹配,然后根據已經匹配的特征點對得到相鄰圖像的位置關系從而進行圖像配准,由於直接進行圖像配准會破壞視場的一致性,因而先將圖像投影在球面或者柱面上,最后計算相鄰圖像的拼縫並完成重疊區域的融合,得到最終的全景圖像。
2.1 輸入圖像
2.2 特征點提取和特征匹配
特征點指的是圖像灰度值發生劇烈變化的點或者在圖像邊緣上曲率較大的點,用直白的話來說就是指,從不同的角度對同一個場景進行拍照,在每一幅照片中都能魯棒的提取的圖像的點就是特征點。一個好的特征點提取算法需要具有以下的特征:數量多,在不同場景下都能提取得到足夠數量的特征點;獨特性好,從而便於對特征點進行匹配;抗旋轉,抗亮度變化,抗尺度縮放等,常用的特征點提取算法包括SIFT,SURF,ORB等,OpenCV的拼接模塊集成了SURF/ORB兩種特征點提取算法,代碼如下:
特征描述子就是描述一個特征點的屬性,比如sift算法就是使用一個128維的向量,通過比較不同圖像特征點的特征向量的歐式距離從而判斷這兩個特征點是否能進行匹配。
2.3 圖像配准
該步驟的計算思路是計算兩幅圖像的單應性矩陣,從而得到一幅圖像相對於另一幅圖像的位置,用公式描述為
由於每個特征點都有 兩個坐標,因此只需要四個點即可求解出該八參數模型的解,同時考慮到前面利用特征向量匹配得到的特征點對可能存在誤匹配,因此使用RANSAC算法進行求解,簡單地說就是,每次隨機抽取四個點求解單應性矩陣,然后根據該單應性矩陣判斷剩余的匹配對是否為正確匹配,選擇正確匹配數量最多的一組來進行求解,一個簡單的算法流程圖為:
另外前面的算法孤立求解兩幅圖像之間的位置,如果直接進行多幅圖像的拼接會造成誤差的累積,因此使用光束平差法進行聯合優化,可以同時優化多個相機參數,從而得到更准確的圖像位置,
水平矯正
2.4 圖像投影
在得到相機的相對位置,如果直接進行拼接會破壞視場的一致性,使得拼接得到的全景圖看起來不夠連貫,因此需要通過投影變換將所有圖像都投影在球面,柱面等,投影平面的選擇與相機拍攝的方式有關系,一般來說球面投影,柱面投影是最為常用的投影方式。OpenCV代碼為:
到這一步為止,圖像拼接可以認為基本完成了,但是此時拼接得到的結果可能存在明顯的亮暗變化,可能存在部分錯位,圖像與圖像之間的重疊區域也會有明顯的過渡痕跡,為了解決這些問題,通過下面的后處理手段可以得到更好的結果。
2.5曝光補償
如果在拍攝過程中,由於未固定曝光,就會導致不同時刻拍攝得到的圖片的整體亮度不同,那么直接進行拼接就會出現明顯的明暗上的變化,因此需要設置曝光補償,使得不同照片的整體亮度一致:
2.6 拼縫計算和圖像融合
拼縫就是指圖像之間重疊區域中最為相似的那條線,在得到相鄰兩幅圖像的拼縫位置后,在拼縫附近的若干個像素使用融合算法,對於重疊區域中遠離拼縫的位置只選擇一側的圖像,通過這樣的方法,可以有效的去除圖像之間的錯位,偽像,得到更好的拼接結果。
常用的融合算法有羽化融合和拉普拉斯融合算法,羽化融合就是對拼縫附近的位置根據與接縫的距離求出權重,加權融合,而拉普拉斯融合算法相當於求出圖像不同頻率的分量,然后按頻率進行融合,顯然拉普拉斯融合算法效果更好,但計算復雜度也更高。