icp演算法可以使用svd或者非線性優化的方法進行求解。因為pcl原始碼中對icp的求解就是使用svd,所以這裡對其進行一些**。
p =1
n∑i=
1n(p
i),p
′=1n
∑i=1
n(pi
′)\boldsymbol=\frac \sum_^\left(\boldsymbol_\right), \quad \boldsymbol^=\frac \sum_^\left(\boldsymbol_^\right)
p=n1i
=1∑n
(pi
),p
′=n1
i=1
∑n(
pi′
) 6.根據以上推導,我們重點需要求出旋轉量r
rr,求得之後代入自然可以獲得t
tt。對公式(6)進行展開:
1 2∑
i=1n
∥qi−
rqi′
∥2=1
2∑i=
1nqi
tqi+
qi′t
rtrq
i′−2
qitr
qi′\frac \sum_^\left\|\boldsymbol_-\boldsymbol \boldsymbol_^\right\|^=\frac \sum_^ \boldsymbol_^ \boldsymbol_+\boldsymbol_^ \boldsymbol^ \boldsymbol \boldsymbol_^-2 \boldsymbol_^ \boldsymbol \boldsymbol_^
21i=1
∑n∥
qi−
rqi′
∥2=
21i
=1∑n
qit
qi
+qi′
trt
rqi′
−2q
itr
qi′
注意到第一項和 r
rr 無關,第二項由於 rtr
=ir^tr = i
rtr=
i,亦與 r
rr 無關。因此,實際上優化 目標函式變為:
∑ i=
1n−q
itrq
i′=∑
i=1n
−tr(
rqi′
qit)
=−tr
(r∑i
=1nq
i′qi
t)\sum_^-\boldsymbol_^ \boldsymbol \boldsymbol_^=\sum_^-\operatorname\left(\boldsymbol \boldsymbol_^ \boldsymbol_^\right)=-\operatorname\left(\boldsymbol \sum_^ \boldsymbol_^ \boldsymbol_^\right)
i=1∑n
−qit
rqi
′=i
=1∑n
−tr
(rqi
′qi
t)=
−tr(
ri=1
∑nq
i′q
it)
其實就是3∗1
∗1∗3
3*1 * 1*3
3∗1∗1∗
3的矩陣,自然只有對角線上的資料表示兩個點之間的有效資料。
整個原始碼從align函式開始,呼叫關係如上圖所示。
需要注意的是,pcl中根據演算法的分類,對所有的**進行歸類。比如pcl屬於registration類,那麼所有的匹配演算法都統一放在registration資料夾下。
其中**件是定義好的函式介面,一些簡單的函式直接在裡面通過內聯函式的形式進行了完善。
impl(implement)資料夾下的hpp檔案則是對**件中定義的複雜檔案的實現。
src資料夾則是乙個空的.cpp檔案,只包含了對應的標頭檔案。個人理解主要是為了編譯生成可呼叫的庫檔案。
點雲離群點剔除演算法 PCL原始碼有實現
utf8gbsn 基於概率的點雲離群點剔除演算法.本演算法的原始碼實現在pcl庫中,請搜尋statistical outlier removal.hpp檔案.假如我們有乙個點雲資料x x x 其中x ix i xi 是n維度空間中的點.那麼問題是,我們想剔除掉那些遠離資料群落的離群點.比如,三維重建...
AQS之await和signal原始碼解析
上篇的文章中我們介紹了aqs原始碼中lock方法和unlock方法,這兩個方法主要是用來解決併發中互斥的問題,這篇文章我們主要介紹aqs中用來解決執行緒同步問題的await方法 signal方法和signalall方法,這幾個方法主要對應的是synchronized中的wait方法 notify方法...
演算法 梯度下降法求最優解,python原始碼
簡單解釋 比如拿溫度感測器來說,就是根據之前一段時間的溫度資料計算下當前理論上應該測量到的溫度,如果超出這個最優解的一定比例,就可以理解為突發狀況了 如下 coding utf 8 訓練集 每個樣本點有3個分量 x0,x1,x2 x 1,0.3 1,1.3 1,2.3 1,3.2 1,4.4 x 1...