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;
}
왜 이것이 작동하지 않는가?
질문 제목을이 사이트의 향후 사용자를위한 검색 결과에 표시되는 의미있는 내용으로 편집하십시오. "공개적으로 사용 가능한 PCL RANSAC 코드"는 귀하가 가지고있는 문제 또는 질문에 대한 설명이 아니라 성명서입니다. 질문에 대한 태그에서 PCL 및 RANSAC 정보를 확인 했으므로 제목에 포함 시키면 중복되거나 의미가 없습니다. 남아있는 "공개적으로 사용 가능한 코드"는 질문 주제 나 문제에 대한 정보를 제공하지 않습니다. 감사. –
일반적으로 컴파일 가능한 코드의 최소한의 예제를 게시하면 도움이됩니다 (이 코드는 누락 된 헤더와 'final_result'의 이중 선언이 아닙니다). – Simson