天天看點

PCL點雲變換與移除NaN

對點雲的操作可以直接應用變換矩陣,即旋轉,平移,尺度,3D的變換就是要使用4*4 的矩陣,例如:

PCL點雲變換與移除NaN
PCL點雲變換與移除NaN
PCL點雲變換與移除NaN
PCL點雲變換與移除NaN

等等模型

在這裡直接使用程式開實作一個點雲的旋轉,建立檔案matrix.cpp

編譯後我們随便找一個PCD檔案檢視效果,也可以該程式的參數,檢視不同的參數的結果

指令視窗列印的結果

PCL點雲變換與移除NaN

可視化的結果

PCL點雲變換與移除NaN

 (2)移除 NaNs:

從傳感器獲得的點雲可能包含幾種測量誤差和/或不準确。其中之一是在一些點的坐标中存在NaN(不是數)值,正如你在下面的檔案中看到的那樣:

 點雲對象的成員函數有稱為“is_dense()”,如果所有的點都有效的傳回true是為有限值。一個NaNs表明測量傳感器距離到該點的距離值是有問題的,可能是因為傳感器太近或太遠,或者因為表面反射。那麼當存在無效點雲的NaNs值作為算法的輸入的時候,可能會引起很多問題,比如“"Assertion `point_representation_->isValid (point) && "Invalid (NaN, Inf) point coordinates given to radiusSearch!"' failed."”如果發生這樣的錯誤就要移除這些點,那麼下面就是為了解決移除無效點的程式

然後可以顯示移除NaNs點後的可視圖,

PCL點雲變換與移除NaN

 這張點雲是我自己用kinect 生成的點雲,在沒有移除NaNs的時候可以先讀取以下,顯示他的點雲數值在指令視窗,你會發現會有很多的NaNs的無效點,經過

移除這些點之後在read一些列印處的結果就不會存在NaNs的無效點,這樣在後期的使用算法的時候就不會出現錯誤了。

PCL點雲變換與移除NaN

這種方法的問題是它不會保持點雲仍然是有序點雲。所有的點雲都存儲一個“寬度”和“高度”變量。在無序點雲,總數為寬度相同,而高度設定為1。在有序的點雲(像從相機拍攝像傳感器如Kinect或Xtion的),寬度和高度都相同的像素的圖像分辨率傳感器的工作。點雲分布在深度圖像的行中,每一個點對應一個像素。成員函數”isorganized()”如果高度大于1時傳回真。

由于移除NaNs無效點會改變點雲的點的數量,它不再能保持組織與原來的寬高比,是以函數将設定高度1。這不是一個大問題,隻有少數的PCL的算法工作明确要求是有序的點雲(大多這樣情況下會使用在優化上),但你必須考慮其中的影響。

暫時就到這裡了。。。。。。

微信公衆号号可掃描二維碼一起共同學習交流

PCL點雲變換與移除NaN

繼續閱讀