news 2026/10/23 19:09:34

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/10/22 22:35:00

江苏苏州一家IPO业绩增速放缓,连续三年分红又补流3亿元

作者:Jasper来源:IPO魔女2025年12月19日,固德电材系统(苏州)股份有限公司(以下简称“固德电材”)将迎来深交所创业板上市委员会审核,公司保荐机构为东吴证券,拟募集资金1…

作者头像 李华
网站建设 2026/10/21 10:59:26

63、SQL与对象:现状与未来探索

SQL与对象:现状与未来探索 集合类型处理 在数据库操作中,集合类型的处理是一个重要方面。对于集合中单个成员值的更改,可使用特定语句。FOREACH 循环会将集合中的每个项提取到一个变量中,以便 SPL 例程进行处理,最后用集合变量的内容更新表中的集合列。 以 Oracle 处理…

作者头像 李华
网站建设 2026/10/23 13:36:51

Unite.vim终极指南:Vim统一界面管理神器快速入门

Unite.vim终极指南:Vim统一界面管理神器快速入门 【免费下载链接】unite.vim :dragon: Unite and create user interfaces 项目地址: https://gitcode.com/gh_mirrors/un/unite.vim Unite.vim是Vim编辑器中革命性的统一界面管理插件,它通过标准化…

作者头像 李华
网站建设 2026/10/20 16:47:25

终极指南:彻底解决Lsyncd排除路径配置难题

终极指南:彻底解决Lsyncd排除路径配置难题 【免费下载链接】lsyncd Lsyncd (Live Syncing Daemon) synchronizes local directories with remote targets 项目地址: https://gitcode.com/gh_mirrors/ls/lsyncd Lsyncd(Live Syncing Daemon&#x…

作者头像 李华
网站建设 2026/10/21 22:32:02

记力扣LCP28.采购方案 练习理解

小力将 N 个零件的报价存于数组 nums。小力预算为 target,假定小力仅购买两个零件,要求购买零件的花费不超过预算,请问他有多少种采购方案。注意:答案需要以 1e9 7 (1000000007) 为底取模,如:计算初始结果…

作者头像 李华