2014-05-10 3 views
0

작업 결과를 저장 : http://pointclouds.org/documentation/tutorials/random_sample_consensus.php공개적으로 사용 가능한 PCL RANSAC 코드를 실행 및하지 내가 여기에서 PCL에 대한 RANSAC의 공개 된 코드를 사용하는 것을 시도하고있다

을 그러나, 나는 3D 뷰어 부분을 생략하고있다. 내가 직면하고있는 문제는 내가 최종 포인트 구름 크기를 확인할 때 & 결과를 저장할 수 없다는 것입니다. 즉, 0을 보여줍니다. 코드는 다음과 같습니다.

#include <pcl/sample_consensus/ransac.h> 
#include <pcl/sample_consensus/sac_model_plane.h> 
#include <pcl/sample_consensus/sac_model_sphere.h> 
#include <pcl/visualization/pcl_visualizer.h> 
#include <boost/thread/thread.hpp> 

int main(int argc, char** argv) 
{ 
    // initialize PointClouds 
    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>); 
    pcl::PointCloud<pcl::PointXYZ>::Ptr final (new pcl::PointCloud<pcl::PointXYZ>); 

    pcl::PointCloud<pcl::PointXYZ> final_result = *final; 

    // populate our PointCloud with points 
    cloud->width = 500; 
    cloud->height = 1; 
    cloud->is_dense = false; 
    cloud->points.resize (cloud->width * cloud->height); 
    for (size_t i = 0; i < cloud->points.size(); ++i) 
    { 
    if (pcl::console::find_argument (argc, argv, "-s") >= 0 || pcl::console::find_argument (argc, argv, "-sf") >= 0) 
    { 
     cloud->points[i].x = 1024 * rand()/(RAND_MAX + 1.0); 
     cloud->points[i].y = 1024 * rand()/(RAND_MAX + 1.0); 
     if (i % 5 == 0) 
     cloud->points[i].z = 1024 * rand()/(RAND_MAX + 1.0); 
     else if(i % 2 == 0) 
     cloud->points[i].z = sqrt(1 - (cloud->points[i].x * cloud->points[i].x) 
             - (cloud->points[i].y * cloud->points[i].y)); 
     else 
     cloud->points[i].z = - sqrt(1 - (cloud->points[i].x * cloud->points[i].x) 
             - (cloud->points[i].y * cloud->points[i].y)); 
    } 
    else 
    { 
     cloud->points[i].x = 1024 * rand()/(RAND_MAX + 1.0); 
     cloud->points[i].y = 1024 * rand()/(RAND_MAX + 1.0); 
     if(i % 2 == 0) 
     cloud->points[i].z = 1024 * rand()/(RAND_MAX + 1.0); 
     else 
     cloud->points[i].z = -1 * (cloud->points[i].x + cloud->points[i].y); 
    } 
    } 

    std::vector<int> inliers; 

    // created RandomSampleConsensus object and compute the appropriated model 
    pcl::SampleConsensusModelSphere<pcl::PointXYZ>::Ptr 
    model_s(new pcl::SampleConsensusModelSphere<pcl::PointXYZ> (cloud)); 
    pcl::SampleConsensusModelPlane<pcl::PointXYZ>::Ptr 
    model_p (new pcl::SampleConsensusModelPlane<pcl::PointXYZ> (cloud)); 
    if(pcl::console::find_argument (argc, argv, "-f") >= 0) 
    { 
    pcl::RandomSampleConsensus<pcl::PointXYZ> ransac (model_p); 
    ransac.setDistanceThreshold (.01); 
    ransac.computeModel(); 
    ransac.getInliers(inliers); 
    } 
    else if (pcl::console::find_argument (argc, argv, "-sf") >= 0) 
    { 
    pcl::RandomSampleConsensus<pcl::PointXYZ> ransac (model_s); 
    ransac.setDistanceThreshold (.01); 
    ransac.computeModel(); 
    ransac.getInliers(inliers); 
    } 

    // copies all inliers of the model computed to another PointCloud 
    pcl::copyPointCloud<pcl::PointXYZ>(*cloud, inliers, *final); 
    cout << final->size() << endl; // show the size 
    pcl::PointCloud<pcl::PointXYZ> final_result = *final; 
    pcl::io::savePCDFile ("final_result.pcd", final_result); // save 

    return 0; 
} 

왜 이것이 작동하지 않는가?

+1

질문 제목을이 사이트의 향후 사용자를위한 검색 결과에 표시되는 의미있는 내용으로 편집하십시오. "공개적으로 사용 가능한 PCL RANSAC 코드"는 귀하가 가지고있는 문제 또는 질문에 대한 설명이 아니라 성명서입니다. 질문에 대한 태그에서 PCL 및 RANSAC 정보를 확인 했으므로 제목에 포함 시키면 중복되거나 의미가 없습니다. 남아있는 "공개적으로 사용 가능한 코드"는 질문 주제 나 문제에 대한 정보를 제공하지 않습니다. 감사. –

+0

일반적으로 컴파일 가능한 코드의 최소한의 예제를 게시하면 도움이됩니다 (이 코드는 누락 된 헤더와 'final_result'의 이중 선언이 아닙니다). – Simson

답변

0

컴파일 된 프로그램을 실행할 때 인수로 -s 또는 -sf를 전달해야합니다.