博客轉載自:http://www.pclcn.org/study/shownews.php?lang=cn&id=163
可視化點雲顏色特征
多數情況下,點雲顯示不采用簡單的XYZ類型,常用的點雲類型是XYZRGB點,也包含顏色數據,除此之外,用戶還希望給指定點雲定制顏色,以使點雲在視窗中比較容易區分,如圖1所示,點賦予不同的顏色表征其對應的z軸值不同。PCLVizualizer可根據所存儲的顏色數據為點雲賦色,或者按照用戶自定義的顏色為點雲着色。許多設備,比如微軟Kinect,可獲取帶有RGB數據的點雲,PCLVizualizer可視化類可使用這種顏色數據為點雲着色,rgbVis函數中的代碼用於完成這種操作。
圖1 可視化帶顏色信息的點雲
與前面的代碼相比,這個代碼沒有太大的改變。
boost::shared_ptr<pcl::visualization::PCLVisualizer> rgbVis (pcl::PointCloud<pcl::PointXYZRGB>::ConstPtr cloud)
首先,與前面簡單示例相比點雲類型發生了變化,這里使用的點雲帶有RGB數據的屬性字段,這是比較關鍵的一點,沒有RGB字段的點雲(點雲的類型不一定必須只限定為點類型PointXYZRGB,只要包括三個顏色分量即可),PCLVisualizer類將不知道該為點雲着什么顏色。
pcl::visualization::PointCloudColorHandlerRGB<pcl::PointXYZRGB> rgb(point_cloud_ptr);
其次,設置窗口的背景顏色后,我們創建一個顏色處理對象PointCloudColorHandlerRGB,PCLVisualizer類利用這樣的對象顯示自定義顏色數據,在這個示例中,PointCloudColorHandlerRGB對象得到每個點雲的RGB顏色字段,其他的類似於PointCloudColorHandlerRGB對象有多種應用,在下一個示例中我們將學習另一種着色方法,但是這個處理也可用於其他操作,比如由其他字段映射出來的顏色、或者由幾何特征映射出來的顏色,更詳細的信息請參照API文檔。
viewer->addPointCloud<pcl::PointXYZRGB> (cloud, rgb, "sample cloud");
最后,當我們添加點雲的時候,我們可以指定添加到視窗中點雲的PointCloudColorHandlerRGB着色處理對象。
可視化點雲自定義顏色特征
第三個示例函數是演示怎樣給點雲着上單獨的一種顏色,我們可以利用該技術給指定的點雲着色,以使所着色的點雲區別與其他點雲,如圖2所示用戶自定義所有點雲顏色為綠色,在這個示例中,customColourVis函數中,我們將點雲賦為綠色,在這里,我們也設置了較大的點雲顯示尺寸,以使點雲及顏色更明顯。
圖2 單獨一種顏色的點雲
與前面情況相同,下面的這段示例代碼跟上面那段示例代碼沒有太大改變。
boost::shared_ptr<pcl::visualization::PCLVisualizer> customColourVis (pcl::PointCloud<pcl::PointXYZ>::ConstPtr cloud)
這個示例中所用的點雲類型是XYZ類型。在自定義着色處理對象PointCloudColorHandlerCustom中,沒有那個點雲字段用作顏色字段,不論所用的點雲是什么類型,我們都可以為點雲着自定義顏色。
pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> single_color (cloud, 0, 255, 0);
所以,這里我們需要創建一個自定義顏色處理器PointCloudColorHandlerCustom對象,並設置顏色為純綠色。
viewer->addPointCloud<pcl::PointXYZ> (cloud, single_color, "sample cloud");