天天看點

基于RANSAC算法的圖像拼接

在同一位置(即圖像的照相機位置相同)拍攝的兩幅或多幅圖像是單應性相關的。接下來要讨論的就是利用該限制将很多圖像縫補起來,拼成一個大的圖像來建立全景圖像。

1.1 SIFT特征比對

sift算法原理在之前已經發表過了,在這裡就不多贅述。(連結:SIFT特征比對算法及代碼(python))

在圖像拼接中應用的目的: 由sift算法将兩幅圖像進行特征比對,找到圖像之間的對應關系。

1.2 RANSAC算法

RANSAC(RANdom SAmple Consensus)也稱随機一緻性采樣。該算法是用來求解單應性矩陣并找到正确的直線來拟合帶有噪聲的資料。也就是說,給定一組資料點集中包含正确的點和噪聲點,RANSAC能找到一條直線來挑選出正确的點,同時摒棄噪聲點。

利用RANSAC算法進行圖像拼接是為了減少多幅圖像之間出現的特征點錯配問題。

單應性矩陣是保直線的,是利用homography算法由兩幅圖像中各取4個點構造出來的。

用該算法得到的隻是圖像的平面資訊,而不知道景深資訊(用RANSAC進行圖像拼接的缺陷之一)。

在圖像拼接中應用的目的: 利用RANSAC算法找到兩張圖像間的單應性矩陣,減少錯誤比對。

1.3 圖像拼接

基于RANSAC算法的圖像拼接是利用RANSAC算法估計出的圖像間的單應性矩陣,再将所有圖像扭曲到一個公共的圖像平面上。

通常,這裡的公共平面為中心圖像平面(否則,需要進行大量變形)。一種方法是建立一個很大的圖像,比如圖像中全部填充0,使其和中心圖像平行,然後将所有的圖像扭曲到上面。由于我們所有的圖像是由照相機水準旋轉拍攝的,是以我們可以使用一個較簡單的步驟:将中心圖像左邊或者右邊的區域填充0,以便為扭曲的圖像騰出空間。

下面給出不同場景下(室内&室外)及不同景深兩種情況下的拼接結果。

Ⅰ 景深較小的室内場景:

要拼接的四張原圖:

基于RANSAC算法的圖像拼接

拼接後的結果:

基于RANSAC算法的圖像拼接
基于RANSAC算法的圖像拼接

Ⅱ 景深較小的室外場景:

要拼接的四張原圖:

基于RANSAC算法的圖像拼接

拼接後的結果:

基于RANSAC算法的圖像拼接
基于RANSAC算法的圖像拼接

Ⅲ 景深較大的室外場景:

要拼接的三張原圖:

基于RANSAC算法的圖像拼接

拼接後的結果:

基于RANSAC算法的圖像拼接
基于RANSAC算法的圖像拼接

基于RANSAC算法的圖像拼接存在的問題可以從上面的拼接結果看出來,不同圖像之間的連接配接部分出現不連貫以及由于圖像曝光不同而出現的邊緣效應的情況。而且還可以看出RANSAC算法隻是将圖像進行簡單的扭曲(從矩形變成四邊形),導緻圖像拼接得非常生硬。

eg:

基于RANSAC算法的圖像拼接
基于RANSAC算法的圖像拼接