【ITK库学习】使用itk库进行图像配准:变换Transform(三)

目录

  • 1、itkAffineTransform 仿射变换
  • 2、itkBSplineDeformableTransform B样条可变形变换

1、itkAffineTransform 仿射变换

该类实现向量空间的仿射变换(例如空间坐标)

此类允许定义和操作n维仿射空间(及其关联的向量空间)对其自身的仿射变换,一种常见的用途是定义和操作二维和三维的欧几里得坐标变换,但其他用途也是可能的。

仿射变换在数学上定义为线性变换加上常数偏移,如果 A 是常数 n x n 矩阵,b 是常数 n 向量,则 y = Ax+b 定义从 n 向量 x 到 n 向量 y 的仿射变换。

两点之间的差异是一个向量,并且仅使用矩阵进行线性变换。 即:(y1-y2) = A*(x1-x2)。

变换公式为:
在这里插入图片描述

该类通过检查对象的类型来确定是将对象转换为点还是向量,Point 类型的对象变换为点,Vector 类型的对象转换为向量。

仿射变换的一种常见用途是定义二维和三维空间中的坐标转换。 在此应用中,x 是包含点的“源”坐标的二维或三维向量,y 是包含“目标”坐标的向量,矩阵 A 定义源坐标系的缩放和旋转到目标,b 定义原点从源到目标的转换。 更一般地,A 还可以定义各向异性缩放和剪切变换。 此类中的几个方法就是为此目的而设计的,并使用适合协调转换的语言。

任意两个仿射变换可以组合,结果是另一个仿射变换, 然而,顺序很重要。 给定两个仿射变换 T1 和 T2,我们会说“将 T1 与 T2 预组合”产生将 T1 应用于源的变换,然后将 T2 应用于该结果以获得目标。 相反,我们会说“将 T1 与 T2 进行后合成”会产生将 T2 应用于源的转换,然后将 T1 应用于该结果以获得目标。(T1 还是 T2 按字典顺序排在第一位取决于您是否选择从右到左编写映射,反之亦然;我们通过引用应用程序顺序而不是文本顺序来避免整个问题。)

该类有两个模板参数:

TParametersValueType 用于标量数值的类型,要么是浮动的,要么是双精度的。

VDimension 向量空间的维数。

此类提供了几种设置定义变换的矩阵和向量的方法。 为了支持配准框架,还可以使用方法SetParameters() 将变换参数设置为大小为 (VDimension + 1) * VDimensionArray<double>。 第一个 (VDimension x VDimension) 参数按行主序定义矩阵(其中列索引变化最快),最后一个 VDimension 参数定义每个维度的平移。

此类还支持旋转中心(中心)的规范以及针对该中心旋转应用的平移,默认情况下,旋转中心设置为原点。

2、itkBSplineDeformableTransform B样条可变形变换

BSplineTransform是此类的较新版本,且为首选。

此类封装了点从一个 N 维空间到另一个 N 维空间的可变形变换,变形场使用 B 样条建模,变形是在控制点的稀疏规则网格上定义的,并通过定义每个控制点的变形来改变,任意点 x处的变形 D(x) 是通过使用 B 样条插值核获得的。

变形场网格由用户指定的GridRegionGridSpacingGridOrigin 定义。 每个网格/控制点都有与其关联的 N 个变形系数,代表变形的 N 个方向分量,网格外的变形加上BSpline插值的支撑区域假定为零。

添加此函数是为了允许转换与 itkTransformReader/Writer I/O 过滤器一起使用。

  • Set/GetGridOrigin():设置/获取变换域原点
  • Set/GetGridDirection():设置/获取变换域方向
  • Set/GetGridRegion():设置/获取变换域网格大小
  • Set/GetGridSpacing():设置/获取网格间距或分辨率
  • SetFixedParameters():设置固定参数,该方法设置变换的固定参数,对于 BSpline 变形变换,参数如下:网格大小、网格原点和网格间距,固定参数是模板尺寸的三倍,该函数的作用是进行以下调用:transform->SetGridSpacing(spacing)变换->SetGridOrigin( 原点 )变换->SetGridDirection(方向)变换->SetGridRegion( bsplineRegion)
  • SetCoefficientImages():设置系数图像数组,这是用于将 BSpline 系数设置为 SpaceDimension 图像数组的替代 API,固定参数取自第一幅图像,假设所有后续图像的缓冲区域与第一图像相同,请注意,没有进行错误检查
  • Set/GetBulkTransform():设置要应用的批量变换,默认是恒等变换
typedef itk:: BSplineDeformableTransform<double,2,3> TransformType;
typename TransformType::Pointer transform = TransformType::New();transform->SetGridRegion( region );
transform->SetGridSpacing( spacing );
transform->SetGridOrigin( origin );TransformType::ParametersType parameters( transform->GetNumberOfParameters() );
// Fill the parameters with values
transform->SetParameters( parameters )
outputPoint = transform->TransformPoint( inputPoint );

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/595755.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

班主任是班级工作的什么人

在我们的学习生涯中&#xff0c;班主任是一个不可或缺的角色。他不仅是我们学术上的指导者&#xff0c;更是我们成长路上的引路人。 是班级的掌舵者。一个班级就像一艘船&#xff0c;航行在知识的海洋中。班主任就是这艘船的船长&#xff0c;他们带领着我们向着目标前进&#x…

【办公软件】修改U盘的默认盘符

在工作中我们可能会因为有一些大型软件设置了库文件路径&#xff08;如Z盘&#xff09;。在家办公时通过U盘的方式将库拷入在U盘中&#xff0c;但是到家里的电脑上&#xff0c;U盘插入后会默认一个盘符&#xff08;如E盘&#xff09;&#xff0c;那么应该怎么操作呢&#xff1f…

国产化软硬件升级之路:πDataCS 赋能工业软件创新与实践

在国产化浪潮的推动下&#xff0c;基础设施软硬件替换和升级的需求日益增长。全栈国产化软硬件升级替换已成为许多领域中的必选项&#xff0c;也引起了数据库和存储领域的广泛关注。近年来&#xff0c;虽然涌现了许多成功的替换案例&#xff0c;但仍然面临着一些问题。 数据库…

判断线性相关性

线性相关是线性代数中的一个重要概念&#xff0c;用于描述向量或向量组之间的线性关系。以下是判断向量组是否线性相关的几种方法&#xff1a; 1. **根据定义判断**&#xff1a; - 如果存在一组不全为零的系数&#xff0c;使得这些系数与对应的向量组相乘后相加等于零向量&a…

如何为项目创建高效的项目进度表?

项目管理是一项负有巨大责任的工作&#xff0c;涉及到完成项目所需的大量流程和任务。如果没有任务和责任的线路图&#xff0c;很容易就偏离方向&#xff0c;无法了解项目每个阶段需要完成的任务。这就是为什么项目进度表是成功执行项目的核心所在。 什么是项目进度表&#xff…

MSVCR100.dll丢失,程序无法启动,快速修复,亲测有效

很多用户&#xff0c;在日常使用电脑的过程中都遇到过&#xff0c;电脑报错“程序由于缺失MSVCR100.dll文件&#xff0c;无法启动&#xff0c;需要重新安装解决”&#xff0c;不少用户卸载软件重装后&#xff0c;还是报错&#xff0c;那么应该怎么解决呢&#xff1f; 首先&…

FastApi-快速入门1

FastAPI 是一个用于构建 API 的现代、快速&#xff08;高性能&#xff09;的 web 框架&#xff0c;使用 Python 3.8 并基于标准的 Python 类型提示。 关键特性: 快速&#xff1a;可与 NodeJS 和 Go 并肩的极高性能&#xff08;归功于 Starlette 和 Pydantic&#xff09;。最快…

「实验记录」CS144 Lab1 StreamReassembler

目录 一、Motivation二、SolutionsS1 - StreamReassembler的对外接口S2 - push_substring序列写入ByteStream 三、Result四、My Code五、Reference 一、Motivation 我们都知道 TCP 是基于字节流的传输方式&#xff0c;即 Receiver 收到的数据应该和 Sender 发送的数据是一样的…

vue-cli项目中vue.config.js的配置

vue-cli项目中vue.config.js的配置 一、直接上代码 一、直接上代码 let path require(path) let glob require(glob)function resolve(dir) {return path.join(__dirname, src/${dir}) }module.exports {pages: {index: {// page 的入口entry: src/main.js,// 模板来源temp…

Java学习笔记

Java学习笔记 java发展先按黑马尚硅谷的路线来吧部分项目代码参考 第一阶段&#xff1a;JavaSE基础9天 中文API可以看菜鸟教程里的 java发展 jdk8后最大改变&#xff1a;lambda&#xff0c;stream 先按黑马尚硅谷的路线来吧 https://blog.csdn.net/qq_40991313/article/deta…

为什么需要在bean上使用@EqualsAndHashCode(callSuper = true)这个注解

我们还是写一个案例&#xff0c;来探讨它的作用。 写三个类&#xff0c;一个是子类Child.class&#xff0c;一个是父类Person.class&#xff0c;一个是测试类Test.class Person父类很简单&#xff0c;就一个属性code&#xff1b; Child子类也很简单&#xff0c;继承了父类之后…

计算机组成原理-总线标准(系统总线 局部总线 设备总线)

文章目录 总览例子总线标准的基本概念系统总线标准局部总线标准设备总线标准对比小结为何串行总线取代并行总线 总览 例子 总线标准的基本概念 北桥芯片速度大于南桥芯片 系统总线标准 ISA和EISA都是并行总线 Intel提出了FBS总线标准比EISA和ISA快&#xff0c;后来又提出来…

LeetCode(31) 下一个排列

整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。 例如&#xff0c;arr [1,2,3] &#xff0c;以下这些都可以视作 arr 的排列&#xff1a;[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 。 整数数组的 下一个排列 是指其整数的下一个字典序更大的排列。更正式地&#xf…

数据结构期末复习(1)数据结构和算法 线性表

数据结构期末总复习&#xff08;gaois课堂版&#xff09; 数据结构的概念 数据结构是计算机科学中的一个重要概念&#xff0c;它指的是组织和存储数据的方式。数据结构可以帮助我们高效地操作和管理数据&#xff0c;使得计算机程序能够更加有效地执行各种任务。 数据结构有很…

防火墙未开端口导致zookeeper集群异常,kafka起不来

转载说明&#xff1a;如果您喜欢这篇文章并打算转载它&#xff0c;请私信作者取得授权。感谢您喜爱本文&#xff0c;请文明转载&#xff0c;谢谢。 问题描述&#xff1a; 主机信息&#xff1a; IPhostname10.0.0.10host1010.0.0.12host1210.0.0.13host13 在这三台主机上部署…

山西电力市场日前价格预测【2024-01-05】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2024-01-05&#xff09;山西电力市场全天平均日前电价为259.10元/MWh。其中&#xff0c;最高日前电价为363.99元/MWh&#xff0c;预计出现在18:00。最低日前电价为0.00元/MWh&#xff0c;预计出…

Linux第1步_VMware软件安装

1、双击“VMware-workstation-full-15.5.0-14665864”&#xff0c;得到下面的界面&#xff1a; 2、等待几分钟&#xff0c;得到下面的界面&#xff1a; 3、点击“下一步” 4、勾选“我接受许可协议中的条款(A)”&#xff0c;见下图&#xff1a; 5、点击“下一步”&#xff0c;得…

使用通用MCU实现无人机飞行任务的快速二次开发

使用通用MCU实现无人机飞行任务的快速二次开发 ---TIDronePilot外部控制offboard模式介绍 无名小哥 2024年1月1日 传统飞控二次开发方法和主要存在的问题简介 通过对前面几讲中《零基础竞赛无人机积木式编程指南》系列开发教程的学习可知&#xff0c;在以往TI电赛真题的学习…

RK3568驱动指南|第九篇 设备模型-第101章 总线注册流程理论分析实验

瑞芯微RK3568芯片是一款定位中高端的通用型SOC&#xff0c;采用22nm制程工艺&#xff0c;搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码&#xff0c;支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU&#xff0c;可用于轻量级人工…

力扣hot100 二叉树展开为链表 递归 特殊遍历

&#x1f468;‍&#x1f3eb; 题目地址 &#x1f469;‍&#x1f3eb; 参考题解 &#x1f60b; 将左子树插入到右子树上 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* …