基于 RANSAC 及其改进的面片分割

 ​​​​

 

 

部分源代码展示:

//经典ransac
void main01()
{
	char *inputpath = "D:\\testdata.xyz";
	char *outpath = "D:\\testdata_ransac.txt";

	clock_t start, finish;
	start = clock();
	vector<pcl::PointXYZ> cloud = ReadPointXYZIntoVector(inputpath);//读入点云数据
	if (cloud.size() == 0)
	{
		cout << "文件输入路径有问题" << endl;
		system("pause");
	}

	//(1)进行单栋分离
	std::vector<std::vector<pcl::PointXYZ>> multiple_buildings;
	double r = 2.0;
	multiple_buildings = EuclideanCluster2DDis(cloud, r);
	//(2)对每栋建筑物进行ransac探测面片
	ofstream outfile(outpath, ios::out);
	srand((int)time(0));
	int sumplanes = 0;
	for (int i = 0; i < multiple_buildings.size(); i++)
	{
		cout << "开始处理第" << i << "栋建筑物" << endl;
		double DisThres = 0.1;
		int iterativeTimes = 400;

		vector<vector<pcl::PointXYZ>> clusters;
		clusters = RANSACDistance(multiple_buildings[i], DisThres, iterativeTimes);
		for (int j = 0; j < clusters.size(); j++)
		{
			if (clusters[j].size() > 5)//只输出多于5个点的面片
			{
				double r = rand() % 255;
				double g = rand() % 255;
				double b = rand() % 255;

				for (int k = 0; k < clusters[j].size(); k++)
				{
					outfile << fixed << setprecision(3) << clusters[j][k].x << "\t" << clusters[j][k].y << "\t" << clusters[j][k].z << "\t" << fixed << setprecision(0) << r << '\t' << g << "\t" << b << endl;
				}
			}
		}
	}
	cout << "结束" << endl;
	system("pause");


}

基于C++的源代码下载地址:https://download.youkuaiyun.com/download/qq_32867925/87163059

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

点云实验室lab

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值