多幀點雲資料拼接合併 點雲拼接註冊

2021-10-13 12:21:37 字數 3835 閱讀 9967

點雲拼接,配準,註冊有什麼聯絡

點雲拼接,配準,註冊說的是同乙個概念,就是把不同位置的點雲通過重疊部分的資訊,變換到同乙個位置。下面我們就用註冊這個名詞來描述這個過程。註冊一般分為三類:粗註冊,精細註冊和全域性註冊。

粗註冊:一般用於註冊兩個位置相差很大的點雲,比如兩幀位於相機座標系的點雲。粗註冊方法大致分為兩類:有標記點粗註冊和無標記點粗註冊。標記點可以是使用者手動標記的,也可以是物體掃瞄時貼的標記點。無標記點註冊更加方便一些,但是對於一些比較對稱或者重合部分很少的情況,可能會有一些失誤的。另外還有一些根據裝置的引數來計算粗註冊變換的方法。

精細註冊:這裡一般指icp註冊方法。主要用於已經粗註冊好的點雲,需要提公升註冊精度的情況。icp可以加入標記點資訊。因為眾所周知,一些滑動情況會導致icp註冊失敗,但是如果資料本身有標記點的話,可以加入標記點資訊來提公升註冊的成功率。

全域性註冊:逐幀註冊的點雲資料,往往有累積誤差。全域性註冊可以把累積誤差分散到每一幀中去,從而減少整體的註冊誤差。另外,有些時候所有點雲已經有了粗註冊了,可以應用全域性註冊一次性把所有點雲註冊好。如下圖所示。

註冊連續多幀掃瞄資料

從掃瞄資料到註冊融合成乙個完整的點雲資料,有各種各樣的工作流方式:可以一邊註冊一邊融合(frame-to-model),也可以兩兩註冊後再一起融合(frame-to-frame)。使用者可以根據自己的資料特點來就行設計。

下面舉乙個一邊註冊一邊融合(frame-to-model)的例子,如下圖所示:

a,b為第一,第二幀資料

粗註冊到一塊c

精細註冊到d

融合成乙個整體e

匯入第三幀資料f

與e粗註冊到g

然後重複之前到步驟,最終再對註冊好的所有資料做乙個全域性註冊,把所有資料融合到乙個整體點雲

總之,不同特點的資料有不同的註冊流程,使用者可以多試試不同的流程,找到最適合自己資料的註冊方式。

無標記點註冊需要多少重合度

無標記點註冊需要多少重合度?這是很多使用者在做無標記註冊時經常問的問題。比如使用者在掃瞄物體的時候,到底幀與幀之間重合多少比較合適。一般來講,重疊區域的特徵越明顯,越獨特,重疊區域的重合度可以越低。

兩個三維點雲,理論上只需要三個點對(無退化情況)就可以確定乙個剛體變換。使用者可以窮舉出所有可能的剛體變換,然後選擇乙個「最好的」變換。由於窮舉的個數太多,為了提高效率,一般會取樣一些剛體變換來選擇最優的解。一般的無標記註冊方法都採用了這個過程,這裡面有些問題需要考慮:

「最好的」定義:一般是計算兩個點雲的重疊區域的大小,重疊區域可以根據點雲特徵來加權計算。需要注意的是,有時候使用者期望的變換,並不是「最好的」。

剛體變換的取樣:既要取樣個數少,又要盡量包含好的剛體變換

重疊區域的大小,會影響演算法的結果:

重疊區域過小的時候,「最好的」剛體變換的分數大於了使用者期望的剛體變換分數。乙個極端的例子是,兩個有部分重疊的半球面,最好的剛體變化會使得兩個半球完全重疊,而不是使用者期望的部分重疊。所以,盡可能的讓你所期望的剛體變換,與演算法定義的「最好的」剛體變換是相同的,或者說期望的重疊區域能得到最高的分。

重疊區域過小,也可能影響取樣的穩定性。穩定性的提公升可以通過取樣個數的提公升來獲得,但是效能可能會有所下降。

無標記註冊「失敗」的時候,使用者可以看看演算法結果的合理性是否比你所期望的變換更加「合理」,重疊度是否更高。

有標記註冊,很大程度上是影響「最好的」剛體變換的定義,並且減小了剛體變換空間的取樣範圍。

提公升無標記點註冊的成功率

無標記點註冊,一般用於點雲的粗對齊。其成功率依賴於點雲的重疊區域大小,重疊部分特徵的顯著性,以及模型本身的對稱性等。下面從幾個方面聊聊如何提高對齊的成功率:

重疊區域的特徵盡可能的明顯

註冊時採用兩兩註冊的方式。這樣可以減少兩幀點雲非重疊部分的區域,也就減小了歧義性。比如對稱模型的掃瞄註冊,如果採用一邊註冊一邊融合的方法,對稱部分的點雲在無標記註冊時,有可能對齊到對稱部分。而兩兩註冊可以減少這類歧義性的發生

如果物體本身特徵不明顯,可以增大重疊區域的面積來提供對齊的穩定性

icp註冊

icp註冊(iterative closest point最近點迭代),一般用於點雲的精細註冊,點雲需要初始對齊好。詳細介紹可以參考專題 點雲icp註冊

全域性註冊

全域性註冊屬於點雲的精細註冊,點雲需要初始對齊好。它和icp註冊的區別在於,它是多個點雲同時註冊,點雲個數一般大於2。

點雲個數比較多的時候,註冊誤差會累積得很厲害。如下圖所示,第一列擷取了三對icp註冊後的點雲,區域性來看註冊得很好。然後逐對點雲兩兩icp註冊,如中圖所示,點雲註冊的效果並不好,累計誤差很嚴重。第三列是點雲經過全域性註冊後效果,註冊誤差被分散到每一幀中去了,從而減少整體的註冊誤差。

註冊成功的判定

註冊成功的判定,最關鍵的是「成功」的定義。一般是計算兩個點雲的重疊區域的大小,重疊區域可以根據點雲特徵來加權計算。當重疊區域面積或者比例大於一定的閾值,就判定為成功。需要注意的是,有時候使用者期望的變換,並不是「最好的」。

如何融合已經註冊對齊的資料

註冊好的點雲資料,會有不少重疊部分,重疊部分點雲處理,一般有兩種做法:平均融合和去除重疊。平局融合就是把重疊部分的點平均起來;去除重疊就是在重疊部分只取其中一幀的資料。我們建議使用去除重疊的方法來融合重疊部分的資料,因為這樣可以盡可能的保持原有資料的資訊。

多幀點雲,往往由於系統誤差原因,重疊部分的點是不能完美重合在一起的。多幀資料平均融合,會損失掉一些資料細節。去除重疊,只取一幀的做法,可以保留住點雲的細節。

點雲去除重疊,需要有個重疊判定條件,一般是設定乙個點雲的影響範圍,範圍內的點會被過濾掉。就如同乙個篩子一樣,過濾範圍越大,篩子的縫隙越小。一般可以取點雲的平均間距作為過濾範圍,如果點雲誤差比較大,可以增大過濾範圍。避免出現不同幀的點雲在重疊處相互滲透的情況,相互滲透會產生噪音。

去除重疊的時候,在重疊交界處,會有接縫痕跡。sumpointcloud有個特點是可以去除掉重疊部分的系統誤差,使得融合後的點雲看不出接縫。如下圖所示,左圖是一系列註冊好的點雲重疊在一起;中間結果是簡單的去除重疊區域的點雲,可以明顯看到重疊區域有誤差痕跡;右邊的結果是sumpointcloud在去除重疊的同時,消除了誤差痕跡。

如何去掉點雲的重影

多幀點雲註冊去除重疊後,得到乙個整體點雲後,有時候會出現區域性點雲有重影的情況。常見的原因是資料本身有誤差,有微小形變,剛體變換不可能把多幀點雲完全對齊。根據點雲處理的工作流程,下面介紹幾種去除重影的方法:

非剛體icp註冊:既然資料有誤差,剛體變換無法完全對齊點雲,可以引入非剛體註冊。對於兩幀資料的註冊,可以應用非剛體icp。如圖所示:

(a)是輸入的兩個點雲

(b)是無標記對齊的結果

(c)是icp精細對齊的結果,可以看到點雲有些部位的對齊還是有誤差的

(d)是非剛體的icp對齊的結果,對齊誤差明顯降低了

(e)是(c)的註冊結果去除重疊,再更新法線的結果。可以看到有些區域性法線出現了毛刺的效果,這是對齊誤差的體現

(f)是(d)的註冊結果去除重疊,再更新法線的結果。可以看出對齊誤差明顯小了很多。

非剛體全域性註冊:對於多幀資料的註冊,可以應用非剛體全域性註冊。如圖所示,左圖全域性註冊的結果,右圖是非剛體全域性註冊的結果。明顯的,非剛體註冊大幅的提公升了註冊精度。

點雲去除重影:如果使用者已經得到了乙個整體點雲,並且有了重影,沒有辦法應用非剛體註冊。那麼可以先檢測出點雲的重影部分,再刪除掉這些區域性點雲。如圖所示,左邊的藍色點雲區域性放大後,有重影:紅色是檢測出的重影部分。使用者可以刪掉它們。右邊兩個模型是點雲三角化的結果,左邊的網格是原始點雲的重建結果,右邊網格是去除重影後的重建結果。對比紅線框部分的網格,明顯看出去除重影後的重接結果質量要好很多。

任意點雲序列的註冊

多角度點雲的拼接,需要幀與幀之間有重疊。使用者連續掃瞄模型的時候,相鄰兩幀可以認為是有重疊的。但是,有的時候,這種重疊關係丟失了,也就是不知道與當前幀重疊的是哪一幀。如圖所示,左邊是使用者隨意掃瞄的四幀點雲。這時候,也可以應用無標記註冊的功能,來自動的找出重疊關係,並且把所有點雲拼接起來。如圖右所示。

點雲資料批量,連續3幀或5幀疊加 拼接

環境 ubuntu 如果是windows系統,讀取檔案的 可參考 linux下的findfirst 在linux作業系統下,編譯器用findfirst 而不是 findfirst linux作業系統下的查詢檔案的操作,需要包含dirent.h標頭檔案.include include include ...

點雲幀之間匹配( 拼接 註冊)及演算法

在 中經常看到點雲註冊,他和我們經常說的點雲拼接,點雲配準其實是乙個意思,都是把不同位置的點雲通過重疊部分的資訊,變換到同乙個位置。下面我們就用註冊這個名詞來描述這個過程。點雲註冊一般分為三類 粗註冊,精細註冊,全域性註冊。粗註冊 一般用於註冊兩個位置相差很大的點雲,比如兩幀位於相機座標系的點雲。粗...

PCL點雲庫SAC IA ICP點雲配準拼接

採用sac ia 取樣一致性初始配準演算法 進行粗匹配得到大概位置,再結合icp 迭代最近點演算法 iterative cloest point,icp 演算法進行精確配準。綠色是源點雲,紅色是目標點雲,藍色是配準之後的點雲 點雲視覺化 void visualize pcd pointcloud p...