2017-06-17 37 views
1

私はこの コードで入力雲の取捨選択キーポイントを計算しようとしています:それは見た目ほどPointCloudライブラリ:計算がキーポイントをふるいにかける - 入力クラウドエラー

#include <iostream> 
#include <boost/thread/thread.hpp> 
#include <pcl/range_image/range_image.h> 
#include <pcl/io/ply_io.h> 
#include <pcl/visualization/range_image_visualizer.h> 
#include <pcl/visualization/pcl_visualizer.h> 
#include <pcl/features/range_image_border_extractor.h> 
#include <pcl/keypoints/narf_keypoint.h> 
#include <pcl/features/narf_descriptor.h> 
#include <pcl/console/parse.h> 
#include <pcl/point_types.h> 
#include <pcl/features/pfh.h> 
#include <pcl/kdtree/kdtree.h> 
#include <pcl/surface/gp3.h> 
#include <pcl/features/spin_image.h> 
#include <cmath> 
#include <pcl/registration/icp.h> 
#include <pcl/keypoints/sift_keypoint.h> 
void processSift (std::string filename, std::string filename2){ 
    // ------------------------------------------------------------------ 
    // -----Read ply file----- 
    // ------------------------------------------------------------------ 
    pcl::PointCloud<PointType>::Ptr cloud_xyz_ptr(
        new pcl::PointCloud<PointType>); 
    pcl::PointCloud<PointType>& cloud_xyz = *cloud_xyz_ptr; 
    if (pcl::io::loadPLYFile(filename, cloud_xyz) == -1) { 
      cerr << "Was not able to open file \"" << filename << "\".\n"; 
      printUsage(""); 
    } 

    // Parameters for sift computation 
    const float min_scale = 0.01f; 
    const int n_octaves = 3; 
    const int n_scales_per_octave = 4; 
    const float min_contrast = 0.001f; 
pcl::SIFTKeypoint<PointType, pcl::PointWithScale> sift; 
pcl::search::KdTree<PointType> tree= new pcl::search::KdTree<PointType>();//new API 
pcl::PointCloud<pcl::PointWithScale>::Ptr sifts (new 
pcl::PointCloud<pcl::PointWithScale>); 
pcl::KdTree<PointType>::PointCloudConstPtr ptr_sift_cloud(&cloud_xyz); 
sift.setInputCloud(ptr_sift_cloud); 
//sift.setSearchMethod (tree); 
sift.setScales(min_scale, n_octaves, n_scales_per_octave); 
sift.setMinimumContrast(min_contrast); 
sift.compute (*sifts); 

cout << "Computed " << (*sifts).size() << " SIFT Keypoints"; 

さて問題はSIFTキーポイントクラスの内部にありますPointXYZには "intensity"という名前のパラメータはありません。

In file included from 
/home/adrian/PointCloudComparator/src/comparator.cpp:21:0: 
/usr/include/pcl-1.7/pcl/keypoints/sift_keypoint.h: In instantiation of 
‘float pcl::SIFTKeypointFieldSelector<PointT>::operator()(const PointT&) 
const [with PointT = pcl::PointXYZ]’: 
/usr/include/pcl-1.7/pcl/keypoints/impl/sift_keypoint.hpp:236:82: required 
from ‘void pcl::SIFTKeypoint<PointInT, PointOutT>::computeScaleSpace(const 
PointCloudIn&, pcl::SIFTKeypoint<PointInT, PointOutT>::KdTree&, const 
std::vector<float>&, Eigen::MatrixXf&) [with PointInT = pcl::PointXYZ; 
PointOutT = pcl::PointWithScale; pcl::SIFTKeypoint<PointInT, 
PointOutT>::PointCloudIn = pcl::PointCloud<pcl::PointXYZ>; 
pcl::SIFTKeypoint<PointInT, PointOutT>::KdTree = 
pcl::search::Search<pcl::PointXYZ>; Eigen::MatrixXf = Eigen::Matrix<float, 
-1, -1>]’ 
/usr/include/pcl-1.7/pcl/keypoints/impl/sift_keypoint.hpp:163:56: required 
from ‘void pcl::SIFTKeypoint<PointInT, 
PointOutT>::detectKeypointsForOctave(const PointCloudIn&, 
pcl::SIFTKeypoint<PointInT, PointOutT>::KdTree&, float, int, 
pcl::SIFTKeypoint<PointInT, PointOutT>::PointCloudOut&) [with PointInT = 
pcl::PointXYZ; PointOutT = pcl::PointWithScale; pcl::SIFTKeypoint<PointInT, 
PointOutT>::PointCloudIn = pcl::PointCloud<pcl::PointXYZ>; 
pcl::SIFTKeypoint<PointInT, PointOutT>::KdTree = 
pcl::search::Search<pcl::PointXYZ>; pcl::SIFTKeypoint<PointInT, 
PointOutT>::PointCloudOut = pcl::PointCloud<pcl::PointWithScale>]’ 
/usr/include/pcl-1.7/pcl/keypoints/impl/sift_keypoint.hpp:139:83: required 
from ‘void pcl::SIFTKeypoint<PointInT, 
PointOutT>::detectKeypoints(pcl::SIFTKeypoint<PointInT, 
PointOutT>::PointCloudOut&) [with PointInT = pcl::PointXYZ; PointOutT = 
pcl::PointWithScale; pcl::SIFTKeypoint<PointInT, PointOutT>::PointCloudOut = 
pcl::PointCloud<pcl::PointWithScale>]’ 
/home/adrian/PointCloudComparator/src/comparator.cpp:340:1: required from here 
/usr/include/pcl-1.7/pcl/keypoints/sift_keypoint.h:49:16: error: ‘const 
struct pcl::PointXYZ’ has no member named ‘intensity’ 
    return p.intensity; 

PointXYZ値のキーポイントを選びたい場合はどうすればよいですか?

よろしく

+0

'もしPCL ::検索:: KdTree :: Ptrがtree'

乾杯「PointXYZRGB」にすべての「点種」を変更することで、動作します - 多分あなたは '.'の代わりに' - > 'を使う必要がありますか? –

答えて

0

だから、実際には問題は::私はPCLを使用していますということPointXYZで、型PCL :: PointXYZRGBが存在します。この1は、(色の)属性の強さを持っており、今ではちょうど

関連する問題