Use GridProjection to construct surface

本文详细介绍了点云数据的法线估计、点云融合、网格重建等关键步骤,通过使用Kd树搜索方法和点云特征整合,实现从原始点云到高质量三维网格的高效转换。
	// surface建立部分
    // Normal estimation*
	pcl::search::KdTree<pcl::PointXYZ>::Ptr tree (new pcl::search::KdTree<pcl::PointXYZ>);
    tree->setInputCloud(mls_points);

    pcl::NormalEstimation<pcl::PointXYZ, pcl::Normal> n;
    n.setInputCloud(mls_points);
    n.setSearchMethod(tree);
    n.setKSearch(20);

    pcl::PointCloud<pcl::Normal>::Ptr normals(new pcl::PointCloud<pcl::Normal>);
    n.compute(*normals);
    //* normals should not contain the point normals + surface curvatures

    // Concatenate the XYZ and normal fields*
	pcl::PointCloud<pcl::PointNormal>::Ptr cloud_with_normals (new pcl::PointCloud<pcl::PointNormal>);
    concatenateFields(*mls_points, *normals, *cloud_with_normals);
    //* cloud_with_normals = cloud + normals

    // Create search tree*
	pcl::search::KdTree<pcl::PointNormal>::Ptr tree2 (new pcl::search::KdTree<pcl::PointNormal>);
    tree2->setInputCloud(cloud_with_normals);

    // Init objects
    pcl::PolygonMesh mesh;
    pcl::GridProjection<pcl::PointNormal> grid;

	// Set parameters
	grid.setResolution(0.005);
	grid.setPaddingSize(3);
	grid.setNearestNeighborNum(100);
	grid.setMaxBinarySearchLevel(10); 


	// Reconstruct
    grid.setInputCloud(cloud_with_normals);
    grid.setSearchMethod(tree2);    
    grid.reconstruct (mesh);
	std::cout << "GridProjection reconstruct done"<<std::endl;


### NPOI 'Unable to construct record instance' 错误原因及解决方案 #### 一、错误原因分析 NPOI 是一个用于处理 Microsoft Office 文件的开源库,类似于 Java 中的 Apache POI。当使用 NPOI 处理 Excel 文件时,如果出现 `Unable to construct record instance` 错误,通常是因为以下原因之一: 1. **文件格式不兼容** 如果使用的 Excel 文件格式与当前 NPOI 版本支持的格式不符,则可能导致解析失败并抛出此异常。例如,某些旧版 NPOI 可能无法完全支持 `.xlsx` 格式的复杂特性[^3]。 2. **NPOI 库版本过低** 类似于引用中的描述,较低版本的 NPOI 或者其依赖项可能存在未修复的 bug,这些 bug 导致在特定场景下无法正确解析记录实例[^2]。 3. **Excel 文件损坏或特殊字符存在** 当 Excel 文件中包含特殊的不可识别字符或者单元格内容超出了预期范围(如字符串长度超出限制),也可能引发此类异常。 4. **运行环境差异** 不同的操作系统或开发环境中可能存在的字节编码问题也会引起类似的错误。尤其是在跨平台部署的情况下,可能会因编码设置不同而导致解析失败。 --- #### 二、解决方案 以下是针对上述问题的具体解决措施: 1. **升级 NPOI 到最新稳定版本** 高版本的 NPOI 对各种 Excel 文件的支持更加完善,并且修复了许多已知的问题。建议从官方仓库获取最新的正式发布版本,并替换现有项目中的 dll 文件。 2. **验证输入文件的有效性和一致性** 使用工具(如 Microsoft 自带的 Excel 工具或其他第三方校验软件)检查目标 Excel 文件是否存在结构上的缺陷或隐藏的非法字符。确保文件能够被正常打开并无明显错误提示。 3. **调整代码逻辑以增强鲁棒性** 在读取 Excel 数据前增加预处理步骤,捕获潜在的风险点。例如,可以尝试先加载工作簿再逐页遍历表格内容,同时加入必要的异常捕捉机制来定位具体的失败位置。 下面是一个简单的示例代码片段展示如何安全地加载 Excel 文件: ```csharp using System; using NPOI.SS.UserModel; public class ExcelReader { public static void ReadExcel(string filePath) { try { IWorkbook workbook = WorkbookFactory.Create(new FileInfo(filePath)); ISheet sheet = workbook.GetSheetAt(0); foreach (var row in sheet) { Console.WriteLine($"Row {row.RowNum}:"); foreach (var cell in row.Cells) { Console.Write($"{cell.ToString()}, "); } Console.WriteLine(); } } catch (Exception ex) { Console.Error.WriteLine($"Error reading file: {ex.Message}"); } } } ``` 4. **考虑替代方案** 若经过多次尝试仍未能解决问题,可评估其他成熟的 .NET Excel 操作库作为备选方案,比如 EPPlus 或 ClosedXML 等。它们同样提供了强大的功能集并且社区活跃度较高,有助于快速获得技术支持和更新信息。 --- ###
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值