顶部图片
022-23715128

联系方式

CONTACT
  • 公众号
    新浪微博
  • 中国 ● 天津

    联系地址:天津市西青区华鼎高科技发展中心

  • 公司座机:022-23715128

    24小时热线:15522534786

    联系QQ:2085429559

    公司邮箱:gvt@techlego.com

当前位置: 首页 > 新闻资讯 > 行业新闻 >
新闻资讯NEWS

日期:2025-03-21 13:44 浏览次数: 作者:来高科技
拼接性能优化:轻量化实现两个角度点云数据的特征拼接技术解析 分享到:

 

引言

在三维数据处理领域,特征拼接技术扮演着至关重要的角色。通过将不同角度扫描的数据准确快速拼接,不仅可以提高点云数据的完整性,还能简化数据处理流程。本文旨在介绍一种精准的特征拼接方法,解析如何利用特定软件工具完成这一过程,并确保最终点云数据的准确性和坐标一致性。

为了实现给定两个角度点云数据的特征拼接并将拼接后的数据导入到第一个角度点云数据中,我们可以采取以下步骤

 
 

特征拼接函数原型

TECHLEGO-来高科技

void feature_align(vector_double res)
1、搭建程序框架,连接相应的软件并打开所需工程
2、获取该工程的所有点云信息,并重新打开工程以便将其置于特征对齐窗口中
3、打开另一个工程作为移动数据源,并同样放置于特征对齐窗口中。
4、执行特征拼接操作,并使用迭代最近点算法(ICP)对拼接结果进行优化。
5、将对齐的数据放入原项目中,并保存修改。

具体实现代码示例展示了如何通过编程接口完成上述流程,包括创建协议、初始化客户端、加载参考和移动数据、执行特征拼接以及ICP优化等关键步骤。每个步骤都包含详细的逻辑判断,以确保操作的成功率。
源码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using techlego_cs;
namespace feature_align_demo_cs
{
internal class Program
{
static int Main(string[] args)
{
//通过IP端口创建协议
var protocol = techlego_cs.global.create_binary_protocol("localhost", 5252);
//通过协议创建客户端
var client = techlego_cs.h_scan3d_client.make_shared(protocol);
bool operation_flag = false;
//获取作为特征拼接的参考数据
string ref_project= "D:\\桌面\\capfeaturealign\\cap1\\cap1.vtop";
//获取作为特征拼接的移动数据
string move_project= "D:\\桌面\\capfeaturealign\\cap2\\cap2.vtop";
//打开作为特征拼接参考数据的项目
operation_flag = client.get_h_scan3d_client().open_project(ref_project);
if (operation_flag)
{
Console.WriteLine("open project success");
}
else
{
Console.WriteLine("open project fail");
return -1;
}
//获取参考数据点数量,获取点数据后项目会自动关闭需要重新打开
vector_h_point_info ref_points = new vector_h_point_info();
client.get_h_scan3d_client().get_scan_data_all(ref_points);
operation_flag = client.get_h_scan3d_client().open_project(ref_project);
if (operation_flag)
{
Console.WriteLine("open project success");
}
else
{
Console.WriteLine("open project fail");
return -1;
}
//载入特征拼接的参考数据,载入后项目会自动关闭
client.get_h_scan3d_client().load_feature_align_data_from_project(false, true);
//打开作为特征拼接移动数据的项目
operation_flag = client.get_h_scan3d_client().open_project(move_project);
if (operation_flag)
{
Console.WriteLine("open project success");
}
else
{
Console.WriteLine("open project fail");
return -1;
}
//载入特征拼接的移动数据,载入后项目会自动关闭
client.get_h_scan3d_client().load_feature_align_data_from_project(false, false);
vector_double res = new vector_double();
//进行特征拼接,返回的vector长度为12表示特征拼接成功,其他为失败
client.get_h_scan3d_client().feature_align(res);
if (res.size() != 12)
{
Console.WriteLine("feature align fail");
return -1;
}
vector_double icp_res = new vector_double();
//icp 误差
double error = 0;
//参考数据匹配序号
vector_int ref_match_index = new vector_int();
//icp 随机采样数量,一般为参考数据个数
var sample_count = ref_points.get_size();
//icp 迭代次数
int iteration = 1;
//匹配点时的最小距离
int min_dist = 1;
//匹配点时的最大距离
int max_dist = 5;
//进行对特征拼接结果进行icp优化,返回的vector长度为12表示成功,其他为失败
client.get_h_scan3d_client().icp_align(icp_res, ref error, ref_match_index, res, false, min_dist, max_dist, iteration, (int)sample_count, false, true);
if (icp_res.size() != 12)
{
Console.WriteLine("icp align fail");
return -1;
}
//打开参考项目为接收特征数据做准备
operation_flag = client.get_h_scan3d_client().open_project(ref_project);
if (operation_flag)
{
Console.WriteLine("open project success");
}
else
{
Console.WriteLine("open project fail");
return -1;
}
//把对齐数据放入工程
client.get_h_scan3d_client().convert_align_data_to_scan_groups();
//保存工程
client.get_h_scan3d_client().save_project();
Console.ReadKey();
return 0;
}
}
}
 
 

总结

TECHLEGO-来高科技

通过执行上述步骤,可以有效地实现两个角度三维点云数据之间的特征拼接。此过程不仅增强了数据集间的关联性,也为进一步的数据分析和应用奠定了良好基础。此外,文中提供的代码片段展示了如何利用编程手段自动化这一流程,并提供相关SDK接口,提高了工作效率和准确性。
 
 

官网视频号·更多视频案例·关注我们

 



往期回顾

 

多机联动扫描系统助力嫦娥五号构建月表地形

 

喷漆自动化三维视觉全流程

 

混凝土立方试块尺寸三维检测全流程​

↙点击“阅读原文”查看更多精彩内容


  • 上一篇:深入探讨:如何将机器人位姿高效绑定至扫描数据组
  • 下一篇:使用Techlego软件实现迅捷多件双面扫描与拼接
  • 相关推荐 NEWS More>