你不知道的SVD 演算法------點雲配準+絕對定向+座標轉換
Sfm那篇部落格已經介紹,3D-3D的變換,不同學科稱呼不同。
在測繪領域,稱作為座標轉換,即七引數轉換—(3個旋轉,3個平移,1個尺度),通常尺度因子可以不計。最常見的情景諸如,54座標到80座標,80到CGS200座標等。
在攝影測量學科裡,稱為絕對定向,即是把模型納入到地面攝影測量座標系中(像空間輔助到像—地面攝影測量)
公式如下:
求解該方程的絕對定向元素的時候,至少知道3對點才能求解。因為上式是非線性方程,故需要線性化。列出誤差方程,然後迭代求解直到改正數小於某一個閾值。
在計算機視覺中,我們可以稱為為SLAM/點雲配準。與二維座標配準類似,只不過增加一個維度。
以上求解定向引數可以借用SVD演算法輕易解得,SVD演算法作為線性代數的知識,其有很多用處,分解本質矩陣E得到相機位姿態、求解線性方程解等:
1、 points1->m*3,points2->n*3 m=n
2、 center_points1=mean(points,0) ->1*3
center_points2=mean(points,0) ->1*3
3、 座標中心化,其目的是減少有效位數,保證計算精度
New_points1=Points1- np.tile(center_points1,(m,1)) ->m*3
New_points2=Points2- np.tile(center_points2,(m,1)) ->n*3
4、 得到轉換矩陣M
M= New_points2.T* New_points1或者M= New_points1.T* New_points2 結果是一樣的,筆者試驗過了 (注意是points1 到points2的變換)
5、 分解M,得到R and T
注意:筆者最開始犯了一個嚴重的錯誤。也是很多人容易忽略的。
在matlab 中:
U,S,V=SVD(M)
->U*S*V.T=M
在python 中:
U,S,Vt=SVD(M)
->U*S*Vt=M
也就是python 分解出來的v是轉置後的,不是真真的V。
所以對於matlab 版本:
R=U*V’
對於python :
至少3個點求解完定向引數後,對於points1座標系下剩下的點可以利用R*points+T來完成將其統一到points2座標系下的過程。
程式碼如下:
# -*- coding: utf-8 -*-
#3d points transform
import numpy as np
def points3D_transform(points1,points2):
'''points1 m*3 points2 n*3 m=n'''
center_points1=np.mean(points1,0)
center_points2=np.mean(points2,0 )
new_points1=points1-np.tile(center_points1,(points1.shape[0],1))
new_points2=points2-np.tile(center_points2,(points2.shape[0],1))
M=new_points2.T @ new_points1 #3*3 向量化程式設計,拒絕迴圈
u,s,vt=np.linalg.svd(M)
R=u@vt
if np.linalg.det(R)<0:
R=-R
T=center_points2.T-R@center_points1
return R,T
相關推薦
你不知道的SVD 演算法------點雲配準+絕對定向+座標轉換
Sfm那篇部落格已經介紹,3D-3D的變換,不同學科稱呼不同。 在測繪領域,稱作為座標轉換,即七引數轉換—(3個旋轉,3個平移,1個尺度),通常尺度因子可以不計。最常見的情景諸如,54座標到80座標,80到CGS200座標等。 在攝影測量學科裡,稱為絕對定向
PCL 3D-NDT演算法點雲配準
本節我們將介紹如何使用正態分佈變換演算法來確定兩個大型點雲(都超過100,000個點)之間的剛體變換。正態分佈變換演算法是一個配准算法,它應用於三維點的統計模型,使用標準最優化技術來確定兩個點雲間的最優的匹配,因為其在配準過程中不利用對應點的特徵計算和匹配,所以
VTK修煉之道57:圖形基本操作進階_點雲配準技術(LandMark標記點演算法和座標系顯示方法)
#include <vtkAutoInit.h> VTK_MODULE_INIT(vtkRenderingOpenGL); VTK_MODULE_INIT(vtkRenderingFreeType); VTK_MODULE_INIT(vtkInteractionStyle); #include
3D Registration 三維點雲配準
待讀參考: https://blog.csdn.net/kaspar1992/article/details/54836222 https://www.cnblogs.com/yin52133/archive/2012/07/21/2602562.html https://blog.csdn.net/u
PCL: Registration模組之IterativeClosestPoint點雲配準
ICP匹配,中文應該叫臨近點迭代吧,是計算機圖形學中的一個非常有用的演算法,尤其是在三維重建點雲配準中有著極其重要的地位,此外在SLAM等移動機器人導航等領域也有著很大的用武之地。 經過了十多年的發展ICP也有著很多的變種,今天我們首先熟悉下最基本的ICP匹配演算法,PCL中的實現與參考文獻中的
三維點雲配準
作者:劉緣 連結:https://www.zhihu.com/question/34170804/answer/121533317 來源:知乎 著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。 本科畢業設計做的點雲配準,對這個方面有一些初步理解,希望有所幫助~
PCL學習筆記——利用點雲配準CorrespondenceEstimationBase()函式找出兩部分點雲重疊區域
主要Classes: pcl::registration::CorrespondenceEstimation< PointSource, PointTarget, Scalar > Class Template Reference 主要函式: tem
你還不知道微信點餐小程序怎麽弄嗎?
微信點餐小程序 微信點餐系統 “微信小程序點餐系統”它有什麽優勢?能給餐飲商家帶來什麽效益? 1、顧客下單後,訂單直接同步至後廚,省去溝通成本,控制出錯率,降低用餐高峰期餐廳服務壓力。 2.非高峰期,顧客在入座後,亦可輕松掃桌上二維碼,直接點餐下單,從而節
原來華為雲賬號,竟有這些你不知道的“貓膩”?
1、華為雲賬號每年可享有10次5天無理由全額退訂; 2、當你需要購買大量雲產品即便官方已經有了折扣卻仍然感覺價格不太理想的時候,你可以嘗試去聯絡一下客服或者工作人員,看看有沒有能商榷的餘地; 3、華為雲社群是最快能參與華為雲官方活動的地方,也是獲取華為雲產品優惠券很方便的地方,當然前
你所不知道的21個雲伺服器的應用實踐———雲端計算綜合入門指南
摘要: 如今,基於網際網路的服務和互動已經越來越深入我們的生活,“雲端計算”也成為了不折不扣的高頻詞彙。並以其快捷、按需呼叫網路資源的優勢為我們的日常生活帶來了諸多便利和改變。之前,我們基於雲伺服器的多種利用方法制作了“雲端計算的1024種玩法”的零基礎入門專題,現在,我們對這一專題進行擴
子字串查詢之————關於KMP演算法你不知道的事
寫在前面: (閱讀本文前需要了解KMP演算法的基本思路。另外,本著大道至簡的思想,本文的所有例子都會做從頭到尾的講解) 作者翻閱了大量網上現有的KMP演算法部落格,發現廣為流傳的竟然是一種不完整的KMP演算法。即通過next陣列來作為有限狀態自動機,以此實現非匹配時的回退。這不失為一種好的
Dubbo Cluster叢集那點你不知道的事。
這是why技術的第33篇原創文章 本週是在家辦公的一週,上面的圖就是我在家的工位。 工欲善其事,必先利其器。在家辦公,我是認真的。 在家裡開發的時候有需求是這樣的:一個如果介面呼叫失敗,需要自動進行重試。 雖然關係不大,但是我還是想到了Dubbo的叢集容錯策略:Failover Cluster,即失敗自動
深入JDK源碼,這裏總有你不知道的知識點!
方法 int com 運行時異常 form 成對 adl 拷貝 般的 Java的基礎知識有很多,但是我認為最基礎的知識應該要屬jdk的基礎代碼,jdk的基礎代碼裏面,有分了很多基礎模塊,其中又屬jdk包下面的lang包最為基礎。 我們下面將總結和分析一下lang包下面最為基
1.一男子在路邊一根接著一根地抽煙。一個女士走過來對他說:“嘿,你不知道你是在慢性自殺嗎?註意看看煙盒上的警告信息。”“沒關系”, 男子悠然自得地又吸了一口:“我是個程序員。”“嗯?這和你是程序員有什麽關系?...
我不知道 不知道 對他 上網 是我 .com 一個 但是 err 1.一男子在路邊一根接著一根地抽煙。一個女士走過來對他說:“嘿,你不知道你是在慢性自殺嗎?註意看看煙盒上的警告信息。”“沒關系”,男子悠然自得地又吸了一口:“我是個程序員。”“嗯?這和你是程序員有什麽關系?”
【轉載】史上最全:TensorFlow 好玩的技術、應用和你不知道的黑科技
tube map 高性能 知識 seq 出現 執行時間 mes lex 【導讀】TensorFlow 在 2015 年年底一出現就受到了極大的關註,經過一年多的發展,已經成為了在機器學習、深度學習項目中最受歡迎的框架之一。自發布以來,TensorFlow 不斷在完善並增加新
你不知道的 flex 技巧
hacker https ems add init 實踐 事情 pwa 需要 一、使用 Auto Margins 對齊 不需要給圖片使用任何的 flex,也不需要給父容器設置 space-between,只需要給 ‘ BUY-BUY-BUY‘ 按鈕設置
你不知道的javaScript筆記(2)
是否 foreach 函數 嚴格模式 console spa new 簡單的 否則 this和對象原型 this是一個很特別的關鍵字,被自動定義在所有函數的作用域中 // foo.count 是0,字面理解是錯誤的 function foo(num) {
微信聊天記錄要怎麽恢復刪除的記錄?這一小妙招你不知道嗎
說到男人出軌,女人就有話要說了。相信絕大數女人聽到自己男人在外面有小三,一定是非常的暴跳如雷,電話不停的轟擊男人的手機,直到男人接聽為止。這事第一件事,獲得男人目前所在的具體位置。 那麽第二件事就是等男人回到家後拷問男人以及關於小三的事
你不知道的javaScript筆記(4)
作用域 能夠 max rip 指數 upper 是否 進制 spa 類型: JavaScript 有7種內置類型 空值 (null) 未定義(undefined) 布爾值(boolean) 數字(number) 字符串(string) 對象(object)
或許你不知道的10條SQL技巧
提高效率 經驗 查詢 中國 nbsp 結果集 復雜 移動 前綴 這幾天在寫索引,想到一些有意思的TIPS,希望大家有收獲。 一、一些常見的SQL實踐 (1)負向條件查詢不能使用索引 select * from order where status!=0 and st