news 2026/4/16 16:41:31

IterativeClosestPoints icp配准矩阵

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
IterativeClosestPoints icp配准矩阵

一:主要的知识点

1、说明

本文只是教程内容的一小段,因博客字数限制,故进行拆分。主教程链接:vtk教程——逐行解析官网所有Python示例-CSDN博客

2、知识点纪要

本段代码主要涉及的有①ICP配算法的运用,②运用ICP的配准矩阵


二:代码及注释

import vtkmodules.vtkRenderingOpenGL2 import vtkmodules.vtkInteractionStyle from vtkmodules.vtkCommonCore import vtkPoints from vtkmodules.vtkCommonDataModel import vtkCellArray, vtkPolyData, vtkIterativeClosestPointTransform from vtkmodules.vtkFiltersGeneral import vtkTransformPolyDataFilter # from vtkmodules.vtkFiltersSources import def main(): """ 原文写法 sourcePoints = vtkPoints() sourceVertices = vtkCellArray() sp_id = sourcePoints.InsertNextPoint(1.0, 0.1, 0.0) # 返回为0 sourceVertices.InsertNextCell(1) sourceVertices.InsertCellPoint(sp_id) sp_id = sourcePoints.InsertNextPoint(0.1, 1.1, 0.0) # 返回为1 sourceVertices.InsertNextCell(1) sourceVertices.InsertCellPoint(sp_id) sp_id = sourcePoints.InsertNextPoint(0.0, 0.1, 1.0) # 返回为2 sourceVertices.InsertNextCell(1) sourceVertices.InsertCellPoint(sp_id) source = vtkPolyData() source.SetPoints(sourcePoints) source.SetVerts(sourceVertices) 我觉得这种写法与一般示例的写法出入较大,在这里重写 """ sourcePoints = vtkPoints() sourcePoints.InsertNextPoint(1.0, 0.1, 0.0) sourcePoints.InsertNextPoint(0.1, 1.1, 0.0) sourcePoints.InsertNextPoint(0.0, 0.1, 1.0) sourceCells = vtkCellArray() sourceCells.InsertNextCell(1, [0]) sourceCells.InsertNextCell(1, [1]) sourceCells.InsertNextCell(1, [2]) source = vtkPolyData() source.SetPoints(sourcePoints) source.SetVerts(sourceCells) pointCount = 3 for index in range(pointCount): point = [0, 0, 0] sourcePoints.GetPoint(index, point) print("source point[%s]=%s" % (index, point)) # target_points。目标点位 targetPoints = vtkPoints() targetPoints.InsertNextPoint(1, 0, 0) targetPoints.InsertNextPoint(0, 1, 0) targetPoints.InsertNextPoint(0, 0, 1) targetCells = vtkCellArray() targetCells.InsertNextCell(1, [0]) targetCells.InsertNextCell(1, [1]) targetCells.InsertNextCell(1, [2]) target = vtkPolyData() target.SetPoints(targetPoints) target.SetVerts(targetCells) pointCount = 3 for index in range(pointCount): point = [0, 0, 0] targetPoints.GetPoint(index, point) print("target point[%s]=%s" % (index, point)) # 构建icp icp = vtkIterativeClosestPointTransform() icp.SetSource(source) icp.SetTarget(target) icp.GetLandmarkTransform().SetModeToRigidBody() # 设为刚体,只能旋转和平移,不能缩放 icp.SetMaximumNumberOfIterations(20) # 设置最大迭代次数为20 icp.StartByMatchingCentroidsOn() # 开启ICP算法的质心预匹配步骤,它会在第一次迭代时,先应用一个平移变换,将源点云的质心移动到目标点云的质心位置 icp.Modified() # 通知 VTK 管道,这个对象(icp 变换对象)的参数已被修改 icp.Update() """ vtkTransformPolyDataFilter 将一个 vtkPolyData 数据集应用几何变换,然后生成一个新的、已变换的 vtkPolyData 对象 下面一段代码的含义是指将source乘以ipc得到的4x4配准矩阵 """ icpTransformFilter = vtkTransformPolyDataFilter() icpTransformFilter.SetInputData(source) icpTransformFilter.SetTransform(icp) icpTransformFilter.Update() transformedSource = icpTransformFilter.GetOutput() # ============ display transformed points ============== pointCount = 3 for index in range(pointCount): point = [0, 0, 0] transformedSource.GetPoint(index, point) print("transformed source point[%s]=%s" % (index, point)) if __name__ == '__main__': main()
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 11:02:10

Piper开发调试实战指南:3大核心技巧加速游戏设备配置开发

Piper开发调试实战指南:3大核心技巧加速游戏设备配置开发 【免费下载链接】piper GTK application to configure gaming devices 项目地址: https://gitcode.com/gh_mirrors/pip/piper Piper作为专业的游戏设备配置GTK应用程序,为开发者提供了高效…

作者头像 李华
网站建设 2026/4/16 11:01:26

jQuery-Cookie到JS Cookie技术迁移完整指南:高效版本升级最佳实践

jQuery-Cookie到JS Cookie技术迁移完整指南:高效版本升级最佳实践 【免费下载链接】jquery-cookie No longer maintained, superseded by JS Cookie: 项目地址: https://gitcode.com/gh_mirrors/jq/jquery-cookie 在当前前端技术快速迭代的背景下&#xff0c…

作者头像 李华
网站建设 2026/4/16 11:01:19

【2024最新】Zalando RESTful API设计准则深度解析与实战指南

【2024最新】Zalando RESTful API设计准则深度解析与实战指南 【免费下载链接】restful-api-guidelines A model set of guidelines for RESTful APIs and Events, created by Zalando 项目地址: https://gitcode.com/gh_mirrors/re/restful-api-guidelines 在微服务架构…

作者头像 李华
网站建设 2026/4/16 12:52:58

Keploy Serverless测试:零代码自动化测试的革命性突破

Keploy Serverless测试:零代码自动化测试的革命性突破 【免费下载链接】keploy Test generation for Developers. Generate tests and stubs for your application that actually work! 项目地址: https://gitcode.com/GitHub_Trending/ke/keploy 我们发现&a…

作者头像 李华
网站建设 2026/4/16 1:20:32

JAX多精度计算实战:3大技巧提升深度学习模型性能

在深度学习模型部署过程中,你是否面临这样的困境:高精度模型推理缓慢,低精度模型准确性堪忧?JAX框架的多精度计算能力正是解决这一痛点的利器。本文将带你深入了解JAX数值类型系统的特性,掌握3大核心优化技巧&#xff…

作者头像 李华
网站建设 2026/4/16 13:45:35

告别Vim碎片化搜索:Unite.vim统一界面全攻略

告别Vim碎片化搜索:Unite.vim统一界面全攻略 【免费下载链接】unite.vim :dragon: Unite and create user interfaces 项目地址: https://gitcode.com/gh_mirrors/un/unite.vim 还在为Vim中各种搜索命令记不住而烦恼吗?Unite.vim就是你的救星&…

作者头像 李华