圖像拼接

圖像拼接算法一般基於如下思路:

  1. 對每張圖像進行特徵點提取;
  2. 特徵點匹配;
  3. 特徵點篩選
  4. 計算投影矩陣;
  5. 進行投影變換
  6. 進行圖像簡單拼接;
  7. 對重疊部分進行融合;

特徵點提取

選擇不同的特徵點提取算法,會對拼接的結果產生影響。

分別測試了sift,surf,orb對特徵點進行提取,在其他步驟一樣的情況下,最終的拼接效果sift≈surf>orb

特徵點匹配

特徵點篩選

排序篩選:根據匹配度進行排序,選擇前特定數量或者特定百分比的特徵點作爲優秀特徵點。

使用orb特徵,當分別選擇前30%和前50%特徵點的最終效果。

閾值篩選:當匹配度大於一定閾值,認爲該點爲優秀特徵點。

findhomography計算單應性矩陣(3*3)

單應性矩陣(Homography)是一個從一張圖像到另一張圖像映射關係的轉換矩陣(3*3)。

 

以上圖爲例,點(x1,y1)到點(x2,y2)的單應性變換爲:

相比於使用getPerspectiveTransform根據4個點來獲得投影變換矩陣,findHomography使用優化算法從一系列點中篩選出最優解。

Mat homo = findHomography(imagePoints1, imagePoints2, CV_RANSAC);

 

計算配準圖的四個頂點座標

在執行投影變換之前,計算投影變換後四個頂點在拼接後圖像的位置,進而得出存放拼接後圖像的尺寸大小。

 

按照單應性變換公式,求解頂點變換後的座標位置。

例如,以左上角頂點(0,0)爲例,變換後的座標爲:

    v2[0] = 0;
    v2[1] = 0;
    v2[2] = 1;
    V2 = Mat(3, 1, CV_64FC1, v2);  
    V1 = Mat(3, 1, CV_64FC1, v1);  
    V1 = H * V2;
    x = v1[0] / v1[2];
    y = v1[1] / v1[2];

執行投影變換

對右邊圖像執行投影變換。

圖像簡單拼接

將左邊圖像覆蓋疊加在右邊圖像上。

左邊爲surf的拼接效果,右邊爲orb的拼接效果

簡單拼接完成後就可以看出最終效果了,簡單拼接錯位嚴重的話,說明特徵點提取步驟就存在問題,融合完成後效果也不會好到哪裏去。

重疊部分融合

左邊爲surf的融合效果,右邊爲orb的融合效果,右邊存在明顯的重影現象,欄杆區域重疊度不好。

圖像融合對重疊部分採用加權融合的方式,在重疊部分由前一幅圖像慢慢過渡到第二幅圖像,非重疊部分直接採用原圖像。

重疊部分的權值公式:

其中x爲當前處理點到重疊區域左邊界距離。

參考:

https://www.cnblogs.com/skyfsm/p/7411961.html

https://blog.csdn.net/weixin_42717395/article/details/85768313

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章