Structure From Motion
Structure from motion 簡介
1.SFM介紹
2.SFM整體流程
3.特徵點提取
4.特徵點匹配
5.初始像對
6.3D重建
7.bundle adjustment
8.SFM 工具介紹
1.SFM介紹
SFM為透過相機的移動來確定目標的空間和幾何關係,是一種3D重建常見的方法,與Kinect這種有3D攝影機最大的不同:
只需要普通的RGB相機即可,成本較低
較不受環境約束(地形、陽光)
但SFM背後需要複雜的理論和計算,再精確度和速度上都還有待提升。
2.SFM整體流程
(圖源:https://blog.csdn.net/qq_20791919/article/details/74936438)
(圖源:https://blog.csdn.net/Mahabharata_/article/details/70799695)
3.特徵點提取
為了要進行影像的匹配,需要在影像中選擇具有代表性的區域,例如:影像中的角點、邊緣等,容易識別的區塊,尤其是角點的辨識度最高
常使用的特徵提取方法,且open有提供函式庫
-SIFT
-SURF
4.特徵點匹配
-兩個影像之間進行SIFT特徵點進行匹配
-KDTree對最近的特徵點進行匹配
-建立匹配系統後,生成track列表(同名點)
-如果一個track包含同個影像多次,表示此匹配關係有誤, 因為同個影像的多個特徵點都匹配到同個點
-如果track少應該剔除,通常track為2,視為資訊太少,3D 重建容易產生錯誤
5.初始像對
-計算內點
-採用RANSC 計算單應矩陣
-滿足單應矩陣的匹配點稱為內點
-內點佔的比例越高,低視差現象越明顯
-選擇初始像對
-匹配特徵點要足夠多
-選擇內點數量少,但又不少於100個的影像
(防止兩個影像的視角過於接近)
6. 3D重建
-取得相機參數
-外參
-計算本征矩陣,進一步求出R、T矩陣
-內參
-焦距,光心位置
-利用以上的R、T矩陣與影像的匹配關係還原三維座標
-加入更多影像
-不斷加入新的影像並計算R、T矩陣,然後繼續還原出更多 的3 維點
-持續透過bundle adjustment優化、merge 3D點雲
7.bundle adjustment
大部分的SfM方法依靠bundle adjustment來做優化
-投射出來通常無法相交,bundle adjustment幫助merge兩個 3D點雲
-從初始的兩張影像就開始第一次的bundle adjustmen
8.SFM 工具介紹
VisualSFM : A Visual Structure from Motion System
由Changchang Wu製作
網站:http://ccwu.me/vsfm/
影片:https://www.youtube.com/watch?v=5ceiO d8Yx3g
測試影像:https://www.youtube.com/watch?v=ye-C-OOFsX8
SFM 工具操作-開啟影像
SFM 工具操作-特徵匹配
SFM 工具操作-3D 重建
結果
reference
[1]https://blog.csdn.net/KinboSong/article/details/72587204
[2]https://github.com/opencv/opencv_contrib/tree/master/modules/sfm
[3]https://blog.csdn.net/zkl99999/article/details/46467277
[4]https://blog.csdn.net/sway_2012/article/details/8036863
[5]https://blog.csdn.net/GH_HOME/article/details/73870310
[6]https://blog.csdn.net/u014636245/article/details/77527627
[7]http://www.echojb.com/qt/2017/04/26/363876.html
[8]http://www.csprs.org.tw/Temp/4_101103_129-137.pdf
[9]https://blog.csdn.net/zhazhiqiang/article/details/42740429
[10]https://blog.csdn.net/Mahabharata_/article/details/70799695
[11]https://blog.csdn.net/qq_26499769/article/details/51817254
[12]https://blog.csdn.net/BrookIcv/article/details/78858199
[13]https://blog.csdn.net/zb1165048017/article/details/71104241
[14]https://blog.csdn.net/qingcaichongchong/article/details/62424661
[15]https://blog.csdn.net/heyijia0327/article/details/53782094
[16]https://blog.csdn.net/heyijia0327/article/details/53782094
[17]https://blog.csdn.net/qq_20791919/article/details/74936438
[18]https://blog.csdn.net/qq_33826977/article/details/79834735
[19]http://www.cs.cornell.edu/projects/p2f/
[20]https://blog.csdn.net/linczone/article/details/46237197
[21]https://blog.csdn.net/u012989207/article/details/45032469
[22]http://francemapping.free.fr/Portfolio/Prog3D/CMVS.html
1.SFM介紹
2.SFM整體流程
3.特徵點提取
4.特徵點匹配
5.初始像對
6.3D重建
7.bundle adjustment
8.SFM 工具介紹
1.SFM介紹
SFM為透過相機的移動來確定目標的空間和幾何關係,是一種3D重建常見的方法,與Kinect這種有3D攝影機最大的不同:
只需要普通的RGB相機即可,成本較低
較不受環境約束(地形、陽光)
但SFM背後需要複雜的理論和計算,再精確度和速度上都還有待提升。
(圖源:https://blog.csdn.net/qq_20791919/article/details/74936438)
(圖源:https://blog.csdn.net/Mahabharata_/article/details/70799695)
3.特徵點提取
為了要進行影像的匹配,需要在影像中選擇具有代表性的區域,例如:影像中的角點、邊緣等,容易識別的區塊,尤其是角點的辨識度最高
常使用的特徵提取方法,且open有提供函式庫
-SIFT
-SURF
-兩個影像之間進行SIFT特徵點進行匹配
-KDTree對最近的特徵點進行匹配
-建立匹配系統後,生成track列表(同名點)
-如果一個track包含同個影像多次,表示此匹配關係有誤, 因為同個影像的多個特徵點都匹配到同個點
-如果track少應該剔除,通常track為2,視為資訊太少,3D 重建容易產生錯誤
-計算內點
-採用RANSC 計算單應矩陣
-滿足單應矩陣的匹配點稱為內點
-內點佔的比例越高,低視差現象越明顯
-選擇初始像對
-匹配特徵點要足夠多
-選擇內點數量少,但又不少於100個的影像
(防止兩個影像的視角過於接近)
-取得相機參數
-外參
-計算本征矩陣,進一步求出R、T矩陣
-內參
-焦距,光心位置
-利用以上的R、T矩陣與影像的匹配關係還原三維座標
-加入更多影像
-不斷加入新的影像並計算R、T矩陣,然後繼續還原出更多 的3 維點
-持續透過bundle adjustment優化、merge 3D點雲
大部分的SfM方法依靠bundle adjustment來做優化
-投射出來通常無法相交,bundle adjustment幫助merge兩個 3D點雲
-從初始的兩張影像就開始第一次的bundle adjustmen
8.SFM 工具介紹
VisualSFM : A Visual Structure from Motion System
由Changchang Wu製作
網站:http://ccwu.me/vsfm/
影片:https://www.youtube.com/watch?v=5ceiO d8Yx3g
測試影像:https://www.youtube.com/watch?v=ye-C-OOFsX8
SFM 工具操作-開啟影像
SFM 工具操作-特徵匹配
SFM 工具操作-3D 重建
結果
reference
[1]https://blog.csdn.net/KinboSong/article/details/72587204
[2]https://github.com/opencv/opencv_contrib/tree/master/modules/sfm
[3]https://blog.csdn.net/zkl99999/article/details/46467277
[4]https://blog.csdn.net/sway_2012/article/details/8036863
[5]https://blog.csdn.net/GH_HOME/article/details/73870310
[6]https://blog.csdn.net/u014636245/article/details/77527627
[7]http://www.echojb.com/qt/2017/04/26/363876.html
[8]http://www.csprs.org.tw/Temp/4_101103_129-137.pdf
[9]https://blog.csdn.net/zhazhiqiang/article/details/42740429
[10]https://blog.csdn.net/Mahabharata_/article/details/70799695
[11]https://blog.csdn.net/qq_26499769/article/details/51817254
[12]https://blog.csdn.net/BrookIcv/article/details/78858199
[13]https://blog.csdn.net/zb1165048017/article/details/71104241
[14]https://blog.csdn.net/qingcaichongchong/article/details/62424661
[15]https://blog.csdn.net/heyijia0327/article/details/53782094
[16]https://blog.csdn.net/heyijia0327/article/details/53782094
[17]https://blog.csdn.net/qq_20791919/article/details/74936438
[18]https://blog.csdn.net/qq_33826977/article/details/79834735
[19]http://www.cs.cornell.edu/projects/p2f/
[20]https://blog.csdn.net/linczone/article/details/46237197
[21]https://blog.csdn.net/u012989207/article/details/45032469
[22]http://francemapping.free.fr/Portfolio/Prog3D/CMVS.html
留言
張貼留言