一千萬個為什麽

搜索

從pointcloud檢測旋轉軸

我正試圖在3d pointcloud上自動檢測旋轉軸。

換句話說,如果我拿了一個小的3D點雲,選擇一個單一的旋轉軸,並以不同的旋轉角度制作幾個點的副本,那麽我得到一個更大的pointcloud。

算法的輸入是較大的pointcloud,所需的輸出是單軸對稱。最後,我將計算彼此旋轉的點之間的對應關系。

較大的pointcloud的大小約為100K點,旋轉副本的數量是未知的。

在我的情況下,旋轉角度具有恒定的增量,但不一定跨越360度。例如,我可能有0,20,40,60。或者我可能有0,90,180,270。但我不會有0,13,78,212(或者如果我這樣做,我不在乎檢測它)。

這似乎是一個計算機視覺問題,但我無法弄清楚如何精確找到軸。輸入通常非常幹凈,接近浮動精度。

我沒有旋轉/復制的原始較小的pointcloud來制作更大的pointcloud。我知道數據是合成的,噪音很小(通常是另一個程序的輸出)。

我們無法輕易地計算出較小雲中可能的點數,因為不幸的是,沿著軸線,點不會重復。如果我們知道軸上有哪些點,那麽我們可以提出可能的因素,但是我們已經解決了這個問題。

-

謝謝大家的建議。看起來我的最終算法將嘗試使用k-nn度量來提出匹配點的集合。每個集團都會給出一個軸。然後我可以使用RANSAC將軸擬合到所有派系的結果中。

最佳答案

嗯,以下方法可能有用,但這取決於您的數據的具體情況。它基於這樣的假設:相鄰位置之間的差距足夠大(20度可能很好),小點雲近似於一個表面(最後一個可以克服)。我建議使用局部特征匹配(計算機視覺中的流行技術)。

首先,對於大型雲的每個點,您應該計算局部描述符(如圖像的SIFT或SURF)。點雲最受歡迎的是旋轉圖像

Johnson, A., & Hebert, M. (1999). Using spin images for efficient object recognition in cluttered 3 d scenes. IEEE Transactions on Pattern Analysis and Machine Intelligence, 21(5), 433–449. Citeseer. Retrieved from http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.23.8816&rep=rep1&type=pdf.

此處使用高級修改:

Endres, F., Plagemann, C., Stachniss, C., & Burgard, W. (2009). Unsupervised Discovery of Object Classes from Range Data using Latent Dirichlet Allocation. In Robotics: Science and Systems. Seattle, USA.

如果它在計算上很難,請問我如何減少維數而不會在判別力量上失去很多,我曾經做過一次。

然後你應該匹配描述符,即在它們的高維空間中找到每個描述符的最近鄰居。如果小雲已經旋轉了3次,那麽應該有3個好的最近鄰居。但是,由於雲自相交,匹配可能包含噪聲。您仍然需要找到適合大量匹配的軸(盡管不是全部匹配)。在這裏你可以使用像RANSAC這樣的強大擬合(你應該做一些數學來定義軸位置的可能性w.r.t.找到的匹配)。請註意,它與其他人建議的方法不同。基於描述符而不是原始點,您應該只適合一行而不是平面族(RANSAC可能無法適合具有4-5個正確點和100K異常值的平面)。

另請註意:

如果你的小掃描不接近表面,你應該提出一個不同的旋轉不變描述符,而不是旋轉圖像。

為了計算法線並進行檢索,你可以查看這個庫: http://graphics.cs.msu.ru/en/science/research/3dpoint/lidark (主要版本即將推出)。

轉載註明原文: 從pointcloud檢測旋轉軸