【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.mfbz.cn/a/292635.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

QT C++调用python传递RGB图像和三维数组,并接受python返回值(图像)

目的&#xff1a; 用QT调用python代码&#xff0c;将QT读取的图像(Qimage)作为参数传入python中&#xff0c;将QT的三维数组作为参数传递给python&#xff0c;python接收QT传入的图像进行计算&#xff0c;将结果返回给QT并显示。 一 .pro 头文件的配置&#xff0c;和lib库的…

在 Mac 上轻松安装和配置 JMeter

Apache JMeter 是一个开源的负载测试工具&#xff0c;可以用于测试静态和动态资源&#xff0c;确定服务器的性能和稳定性。在本文中&#xff0c;我们将讨论如何下载和安装 JMeter。 安装 Java&#xff08;已安装 Java 的此步骤可跳过&#xff09; 要安装 Java&#xff0c;请按…

数字孪生与边缘计算的结合

数字孪生与边缘计算的结合可以在物理实体附近进行实时数据处理和决策&#xff0c;从而提高响应速度、降低延迟&#xff0c;并有效地利用边缘资源。以下是数字孪生在边缘计算中的一些应用&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开…

JavaWeb——后端之SpringBoot基础知识

2. SpringBoot 官网&#xff1a;https://spring.io/ Spring全家桶&#xff1a;Spring已经形成了一种开发生态圈&#xff0c;其提供的若干子项目分别用于完成特定的功能 Spring Boot简化了Spring Framework&#xff0c;不用底层实现那么配置繁琐&#xff0c;可以快速构建应用…

【Java EE初阶八】多线程案例(计时器模型)

1. java标准库的计时器 1.1 关于计时器 计时器类似闹钟&#xff0c;有定时的功能&#xff0c;其主要是到时间就会执行某一操作&#xff0c;即可以指定时间&#xff0c;去执行某一逻辑&#xff08;某一代码&#xff09;。 1.2 计时器的简单介绍 在java标准库中&#xff0c;提供…

ChatGPT怎么帮我上班的

1.解放生产力 1&#xff09;标准格式&#xff0c;完美输出。GPT对于公文等具有一定标准格式的文件&#xff0c;可以进行完美仿写&#xff0c;随随便便以假乱真那都是小菜一碟&#xff0c;这对于经常要开展规范成文的人来说&#xff0c;简直就是个福音&#xff0c;只要前期调教…

使用“反向代理服务器”的优点是什么?

反向代理服务器是一种网络架构模式&#xff0c;通常位于客户端和实际服务器之间&#xff0c;用于处理客户端请求并转发到实际服务器。以下是使用反向代理服务器的优点&#xff1a; 1.安全性&#xff1a;反向代理服务器可以提供额外的安全层。通过在反向代理服务器上配置防火墙和…

Jmeter 性能压测 —— 常见问题

1、怎么确定系统最大负载&#xff1f; 通过负载测试&#xff0c;不断增加用户数&#xff0c;随着用户数的增加&#xff0c;各项性能指标也会相应产生变化&#xff0c;当出现了性能拐点。 比如&#xff0c;当用户数达到某个数量级时&#xff0c;响应时间突然增长&#xff0c;那…

电脑重装后恢复音频输出(安装声卡驱动)

写在前面&#xff1a;本博客仅作记录学习之用&#xff0c;部分图片来自网络&#xff0c;如需引用请注明出处&#xff0c;同时如有侵犯您的权益&#xff0c;请联系删除&#xff01; 文章目录 前言基本设置检查声卡驱动自带Realtek高清晰音频管理器不带Realtek高清晰音频管理器 总…

ROS学习笔记(8)进一步深入了解ROS第二步

0.前提 在上一讲中我提到过该系列是基于宾夕法尼亚大学工程学院的ROS公开课&#xff0c;系列文章将来源于公开课中的课后习题。该系列可以很好的帮助大家更加深入的了解ROS的一些概念。&#xff08;有效面对HR的提问。&#xff09; 1. (C)What is a nodehandle object? Can we…

vscode无识别已有的maven java项目(visual studio code not recognizing java project)

文章目录 事情经过尝试疑惑问题解决结论 事情经过 未安装任何Java Extension Pack使用 Maven 的 archetype:generate 命令来创建一个新的项目使用vscode打开了该目录然后安装Java Extension Pack等java插件配置了vscode settings.json中的 java.configuration.runtimes和 java…

网站迁移和SEO:损害排名的常见错误

正在规划站点迁移&#xff1f; 迁移是更困难的 - 通常是可怕的 - SEO任务之一。 为了让它发挥作用&#xff0c;你需要避免常见的陷阱&#xff0c;这些陷阱可能会影响你的知名度&#xff0c;并导致流量和收入的损失。 8 月 11 日&#xff0c;我主持了一场赞助的搜索引擎杂志网…

TypeScript 从入门到进阶之基础篇(二) ts进阶类型篇

TypeScript 从入门到进阶系列 TypeScript 从入门到进阶之基础篇(一) ts基础类型篇 文章目录 TypeScript 从入门到进阶系列前言一、object 类型1、基础运用2、可选属性3、任意属性4、只读属性 readonly5、对象中的函数 二、数组类型1、数组的运用2、使用接口定义数组3、argumen…

关于标准那些事——第六篇 四象之“玄武”(格式的编排)

两仪生四象——东方青龙&#xff08;木&#xff09;、西方白虎&#xff08;金&#xff09;、南方朱雀&#xff08;火&#xff09;、北方玄武&#xff08;水&#xff09; 分别对应标准编写之四象——层次的编写、要素的编写、要素的表述、格式的编排。 今天来分享一下 格式的编…

Python 标准库中的 csv 包

0. Abstract 官方文档很罗嗦&#xff0c;长篇大论例子少。本文将举例说明 csv 包的用法&#xff0c;然后补充一些必要的说明。 1.0 CSV 文件 CSV(Comma-Separated Values,逗号分隔值)文件是一种常见的以纯文本形式存储数据的文件格式。它使用逗号作为字段之间的分隔符&#…

【Linux】——基本指令(二)

&#x1f497;个人主页&#x1f497; ⭐个人专栏——数据结构学习⭐ &#x1f4ab;点击关注&#x1f929;一起学习C语言&#x1f4af;&#x1f4ab; 目录 导读&#xff1a;1. vim 指令2. head指令3. tail指令4. tree指令5. 输出重定向6. echo指令7. wc指令8. | 字符9. date指令…

CMake入门教程【核心篇】属性管理set_property和get_property

&#x1f608;「CSDN主页」&#xff1a;传送门 &#x1f608;「Bilibil首页」&#xff1a;传送门 &#x1f608;「本文的内容」&#xff1a;CMake入门教程 &#x1f608;「动动你的小手」&#xff1a;点赞&#x1f44d;收藏⭐️评论&#x1f4dd; 文章目录 1.概述2.设置属性 - …

JS中 focus 和 blur 焦点事件

发现的一个小知识点 focus 获取焦点事件 代码如下&#xff1a; <body><input type"text" placeholder"input输入框"><script>let input document.querySelector(input)input.addEventListener(focus, function (e) {e.target.style.…

Java学校教务管理系统源码带微信小程序

运行环境&#xff1a;jdk8mysql5.7IntelliJ IDEAmaven 技术&#xff1a;springbootmybatislayuishirojquery 教务管理系统是一个基于网络的在线管理平台, 帮助学校管理教务系统&#xff0c;用一个帐号解决学校教务教学管理&#xff0c; 灵活的定制符合学校自己实际情况的教务系…

如何理解面向对象的OO设计原则和设计模式?

一、如何理解面向对象的编程原则? 单一职责原则(Single Responsibility Principle) 一个类,应该由一组相关性很高的数据和方法组成。一个类应该仅有一个引起它变化的原因。单一职责最难界定的就是关于“职责”的定义,往往需要丰富的经验和对业务的认知程度,这也更加容易引…