【ITK库学习】使用itk库进行图像配准:内插器(插值)

news2025/1/22 8:13:47

目录

  • 1、itkNearestNeighborInterpolateImageFunction 最近点插值
  • 2、itkLinearInterpolateImageFunction 线性插值
  • 3、itkBSplineInterpolateImageFunction B样条插值
  • 4、itkWindowedSincInterpolateImageFunction 窗口化Sinc插值
  • 5、itkRayCastInterpolateImageFunction 投射插值
  • 6、itkGaussianInterpolateImageFunction 高斯插值

配准时,参考图像的网格位置没有映射到待配准图像的网格位置时,就需要用差补法来计算待配准图像中非网格位置上的亮度值。在ITK中主要用interpolator类实现,能够插入配准函数中。

配准计算中,差补法会影响最后花的平滑度和总计算时间,因此选择具体的差补方法时要考虑平滑度和计算简化两个方面。

  • ImageFunction::IsInsideBuffer(): 可用于在调用方法之前检查边界,判断物理点是否落在图像像素的空间范围之内。
  • GetRadius():获取插值所需的半径,定义了在给定点处插值所需的周围像素的数量
  • Evaluate(const PointType & point):在点位置对图像进行插值,返回插值图像强度,指定点位置,不进行边界检查,假设该点位于图像缓冲区内
  • EvaluateAtContinuousIndex(const ContinuousIndexType & index):在连续索引位置对图像进行插值,返回指定索引位置处的插值图像强度,不进行边界检查,假设该点位于图像缓冲区内,子类必须重写此方法
  • EvaluateAtIndex(const IndexType& index):在索引位置插入图像,返回指定索引位置处的图像值,不进行边界检查,假设该点位于图像缓冲区内

1、itkNearestNeighborInterpolateImageFunction 最近点插值

该类是标量图像的最近邻像素点插值。

通过复制最近领域的强度来在非整数像素位置插值图像强度,此类根据输入图像类型和坐标表示类型(例如 float 或 double)进行模板化。

该差补法较简单。

模板设置:

typedef itk::NearestNeighborInterpolateImageFunction<InputImageType, double> InterpolatorType ;

2、itkLinearInterpolateImageFunction 线性插值

该类在指定位置线性插值图像。

在非整数像素位置线性插值图像强度,此类根据输入图像类型和坐标表示类型(例如 float 或 double)进行模板化。它的插值亮度是连续的,但是亮度梯度在网格点上是不连续的。

此函数适用于标量和矢量像素类型的图像以及 VectorImage 类型的图像。

模板设置:

typedef  itk::LinearInterpolateImageFunction<InputImageType, double> InterpolatorType ;

3、itkBSplineInterpolateImageFunction B样条插值

该类评估图像的B样条插值。

样条阶数范围是0~5,0:表示几乎和最近插补相同,1:表示和线性插补相同,>1:插补值和它的微分是空间连续的。

B-Spline的系数用递归滤波器BSplineDecompositionImageFilter计算,非网格位置的亮度值 = 亮度*已经改变了B-Spline kernels的系数来计算。

限制:样条线阶数必须在设置图像之前设置样条线阶数,使用镜像边界条件, 每个尺寸都需要相同的样条线顺序,样条线是在所有尺寸中确定的,不能选择性地选择尺寸来计算样条线。

注意:插补值肯定会超出输入图像亮度范围。在处理unsigned的数据时,插补值可能是负的。

  • SetInputImage():设置输入图像
  • Set/GetSplineOrder():获取/设置样条线阶数,0~5之间, 默认为3阶样条
  • Set/GetUseImageDirection():UseImageDirection标志确定是相对于图像网格还是相对于物理空间来计算图像导数;当该标志为 ON 时,将相对于物理空间坐标系计算导数,区别在于是否考虑图像方向,On将考虑图像方向,与Off时执行的计算量相比,将导致额外的矩阵乘法;默认值为“开”
  • SetInterpolationWeights():确定值 x 插值的权重
  • SetDerivativeWeights():确定值 x 的导数部分的权重

模板设置:

typedef itk::BSplineInterpolateImageFunction<InputImageType, double>InterpolatorType ;

4、itkWindowedSincInterpolateImageFunction 窗口化Sinc插值

该类使用加窗 sinc 函数进行插值。

与线性插值相比,该函数旨在提供具有最小混叠伪影的插值函数,根据采样理论,无限支持 sinc 滤波器(其傅里叶变换是盒式滤波器)对于函数重采样是最佳的,实际上,无限支持 sinc 滤波器是使用有限支持“窗口”sinc 滤波器来近似的。

在二维中,位置 (x,y) 处的插值由以下表达式给出:
在这里插入图片描述
其中 m 是窗口的“半径”(3,4 是合理的数字),K(t) 是核函数,由 sinc 函数和几个可能的窗口函数之一组成:
在这里插入图片描述
itk::Function 命名空间中提供了几个窗口函数。 参考论文的结论建议在 m = 4,5 时使用 Welch、Cosine、Kaiser 和 Lanczos 窗,这些是基于旋转医学图像的误差线性插值法,在某些情况下,结果的准确性提高了 20 倍。
能用interpolaterwindows包括:

  • Cosinus windo
    在这里插入图片描述

  • Hamming window
    在这里插入图片描述

  • Welch window
    在这里插入图片描述

  • Lancos window
    在这里插入图片描述

  • Blackman window
    在这里插入图片描述

这种方法可以通过窗函数控制插值结果的平滑程度,可以获得比线性插值更平滑的插值结果,但是计算速度较慢,且窗函数的选择可能会影响插值结果。

在设置模板类型时:itk::WindowedSincInterpolateImageFunction< TInputImage, VRadius, TWindowFunction, TBoundaryCondition, TCoordRep >
其中:

  • TInputImage:是图像类型,这是标准的。
  • VRadius:为kernel半径,例如上面公式中的m;
  • TWindowFunction:是window的函数对象,根据上述五中不同函数选择,默认为Hamming window,根据引用的论文,它很常用,但不是最佳的;
  • TBoundaryCondition:确定落在图像边缘的像素值boundary condition class
typedef itk::ConstantBoundaryCondition<InputImageType> BoundaryConditionType ;
constexpr unsigned int WindowRadius = 5;
typedef itk::Function::HammingWindowFunction<WindowRadius> WindowFunctionType ;
typedef itk::WindowedSincInterpolateImageFunction<InputImageType,
                                              WindowRadius,
                                              WindowFunctionType,
                                              BoundaryConditionType,
                                              double> InterpolatorType;
                                              

5、itkRayCastInterpolateImageFunction 投射插值

在指定位置对图像进行投影插值,它在图像中的光线路径上进行插值。

RayCastInterpolateImageFunction 通过 3 维图像投射光线,并使用双线性插值来整合所遍历的每个体素平面。

这种方法可以模拟投影像素在图像中的路径,从而产生更精确的插值结果。但是计算速度较慢。

警告
该插值器仅适用于 3 维图像。

  • SetTransform():设置连接变换,此变换用于计算新的焦点位置
  • GetModifiableTransform():获取连接变换,此变换用于计算新的焦点位置
  • Set/GetThreshold():设置/获取阈值,高于该阈值,沿射线路径的体素将被积分
  • SetInterpolator():连接插补器
  • GetModifiableInterpolator():获取指向插值器的指针
  • Set/GetFocalPoint():设置/获取射线源的焦点或位置
  • IsInsideBuffer():检查图像缓冲区内是否有连续索引 或 检查索引是否位于图像缓冲区内,考虑到每个体素的中心位于整数坐标并延伸到下一个整数坐标的一半

模板设置:

typedef itk::RayCastInterpolateImageFunction<InputImageType, double> RayCastInterpolateFunctionType;

6、itkGaussianInterpolateImageFunction 高斯插值

该类为图像的高斯插值。

此类使用 vnl 误差函数定义 N 维高斯插值函数,与该函数相关的两个参数是:

  • Sigma:大小为 ImageDimension 的标量数组,确定插值函数的宽度。
  • Alpha:指定计算函数的截止距离的标量。

该类对噪声具有平滑作用,插值结果更接近真实图像,但计算复杂度较高。

  • Set/GetSigma():设置/获取Sigma值
  • Set/GetAlpha():设置/获取Alpha值
  • SetParameters(RealType* sigma, RealType alpha ):设置/获取Sigma和Alpha值
  • SetCutOffDistance():设置/获取截止距离
  • SetBoundingBoxStart():设置/获取边界框起点
  • SetBoundingBoxEnd():设置/获取边界框终点
typedef itkGaussianInterpolateImageFunction<InputImageType, double>

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

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

相关文章

阿里云ECS配置IPv6后,如果无法访问该服务器上的网站,可检查如下配置

1、域名解析到这个IPv6地址,同一个子域名可以同时解析到IPv4和IPv6两个地址&#xff0c;这样就可以给网站配置ip4和ipv6双栈&#xff1b; 2、在安全组规则开通端口可访问&#xff0c;设定端口后注意授权对象要特殊设置“源:::/0” 3、到服务器nginx配置处&#xff0c;增加端口…

虾皮跨境电商的收款方式及选择指南

虾皮&#xff08;Shopee&#xff09;作为一家知名的跨境电商平台&#xff0c;为卖家提供了多种收款方式&#xff0c;以满足不同卖家的需求。本文将介绍虾皮跨境电商平台的主要收款方式&#xff0c;并提供选择指南&#xff0c;帮助卖家根据自身需求和目标市场选择最合适的收款方…

AutoEncoder个人记录

原理 最常见的降维算法有主成分分析法PCA&#xff0c;通过对协方差矩阵进行特征分解而得到数据的主要成分&#xff0c;但是 PCA 本质上是一种线性变换&#xff0c;提取特征的能力极为有限。 AutoEncoder把长度为d_in输入特征向量变换到长度为d_out的输出向量&#xff0c;借助于…

深圳鼎信|输电线路防山火视频监控预警装置:森林火灾来袭,安全不留白!

受线路走廊制约和环保要求影响&#xff0c;输电线路大多建立在高山上&#xff0c;不仅可以减少地面障碍物和人类活动的干扰&#xff0c;还能提高线路的抗灾能力和可靠性。但同时也会面临其它的难题&#xff0c;例如森林火灾预防。今天&#xff0c;深圳鼎信智慧将从不同角度分析…

福FLUKE禄克8808A数字多用表

福禄克8808A&#xff0c;用于制造、研发、维修等应用的多功能数字表&#xff0c;FLUKE 8808A 5.5位数字多用表可以完成当今众多常用的测量工作。无论是功能测 展开 福禄克8808A&#xff0c;用于制造、研发、维修等应用的多功能数字表&#xff0c;FLUKE 8808A 5.5位数字多用表可…

NiNNet

目录 一、网络介绍 1、全连接层存在的问题 2、NiN的解决方案(NiN块) 3、NiN架构 4、总结 二、代码实现 1、定义NiN卷积块 2、NiN模型 3、训练模型 一、网络介绍 NiN&#xff08;Network in Network&#xff09;是一种用于图像识别任务的卷积神经网络模型。它由谷歌研究…

node-red:使用node-red-contrib-amqp节点,实现与RabbitMQ服务器(AMQP)的消息传递

node-red-contrib-amqp节点使用 一、简介1.1 什么是AMQP协议?1.2 什么是RabbitMQ? -> 开源的AMQP协议实现1.3 RabbitMQ的WEB管理界面介绍1.3 如何实现RabbitMQ的数据采集? -> node-red 二、node-red-contrib-amqp节点安装与使用教程2.1 节点安装2.2 节点使用2.2.1 amq…

tsconfig.app.json文件报红:Option ‘importsNotUsedAsValues‘ is deprecated...

在创建vue3 vite ts项目时的 tsconfig.json&#xff08;或者tsconfig.app.json&#xff09; 配置文件经常会报一个这样的错误&#xff1a; 爆红&#xff1a; Option ‘importsNotUsedAsValues’ is deprecated and will stop functioning in TypeScript 5.5. Specify compi…

干货:教你如何在JMeter中调用Python代码N种方法!

在性能测试领域&#xff0c;Jmeter已经成为测试专业人士的首选工具&#xff0c;用于模拟用户行为、测量响应时间、评估系统性能。而现在大部分接口都会涉及到验签、签名、加密等操作&#xff0c;为了满足特定需求&#xff0c;我们需要更多的灵活性&#xff0c;比如引入Python来…

推荐算法架构7:特征工程(吊打面试官,史上最全!)

系列文章&#xff0c;请多关注 推荐算法架构1&#xff1a;召回 推荐算法架构2&#xff1a;粗排 推荐算法架构3&#xff1a;精排 推荐算法架构4&#xff1a;重排 推荐算法架构5&#xff1a;全链路专项优化 推荐算法架构6&#xff1a;数据样本 推荐算法架构7&#xff1a;特…

QTNet:Query-based Temporal Fusion with Explicit Motion for 3D Object Detection

参考代码&#xff1a;QTNet 动机和出发点 自动驾驶中时序信息对感知性能具有较大影响&#xff0c;如在感知稳定性维度上。对于常见的时序融合多是在feature的维度上做&#xff0c;这个维度的融合主要分为如下两个方案&#xff1a; 1&#xff09;BEV-based方案&#xff1a;将之…

信号与线性系统翻转课堂笔记7——信号正交与傅里叶级数

信号与线性系统翻转课堂笔记7——信号正交与傅里叶级数 The Flipped Classroom7 of Signals and Linear Systems 对应教材&#xff1a;《信号与线性系统分析&#xff08;第五版&#xff09;》高等教育出版社&#xff0c;吴大正著 一、要点 &#xff08;1&#xff0c;重点&a…

2023年京东各行业年度数据报告-2023全年度空调十大热门品牌销量(销额)榜单

空调市场如今已经进入存量时代&#xff0c;加之消费市场的低迷&#xff0c;因此&#xff0c;2023年空调市场的整体销售下滑。 根据鲸参谋的统计数据&#xff0c;2023年度&#xff0c;京东平台上空调市场的总销量将近1400万&#xff0c;同比下滑约17%&#xff1b;销售额为410亿&…

CVE-2023-46604 Apache ActiveMQ RCE漏洞

一、Apache ActiveMQ简介 Apache ActiveMQ是一个开源的、功能强大的消息代理&#xff08;Message Broker&#xff09;&#xff0c;由 Apache Software Foundation 所提供。ActiveMQ 支持 Java Message Service&#xff08;JMS&#xff09;1.1 和 2.0规范&#xff0c;提供了一个…

金蝶云星空打开应用报错‘D:\WorkSpace\XXXX\XXXX_k3Cloud‘ is already locked.

文章目录 金蝶云星空打开应用报错D:\WorkSpace\XXXX\XXXX_k3Cloud is already locked.报错界面报错内容原因分析解决方案工作空间下清除项目Clean up应用下-清除SVN锁定 重新打开应用就可以了 金蝶云星空打开应用报错’D:\WorkSpace\XXXX\XXXX_k3Cloud’ is already locked. 报…

多相机系统通用视觉 SLAM 框架的设计与评估

Design and Evaluation of a Generic Visual SLAM Framework for Multi-Camera Systems PDF https://arxiv.org/abs/2210.07315 Code https://github.com/neufieldrobotics/MultiCamSLAM Data https://tinyurl.com/mwfkrj8k 程序设置 主要目标是开发一个与摄像头系统配置无关…

渲染控制之条件渲染

目录 1、使用规则 2、更新机制 3、使用if进行条件渲染 4、if ... else ...语句和子组件状态 5、嵌套if语句 ArkTS提供了渲染控制的能力。条件渲染可根据应用的不同状态&#xff0c;使用if、else和else if渲染对应状态下的UI内容。 1、使用规则 支持if、else和else if语句…

网络技术基础与计算思维实验教程_2.3_单交换机VLAN配置实验

2.3.1 实验内容 2.3.2实验目的 实验的目的一是验证交换机 VLAN 配置过程; 二是验证属于同一 VLAN的终端之间的通信过程; 三是验证每一个 VLAN 为独立的广播域; 四是验证属于不同 VLAN的两个终端之间不能通信; 五是验证转发项和 VLAN的对应关系。 2.3.3实验原理 默认情况下,交换…

Spring IoCDI

文章目录 前言什么是Spring1. 什么是 IoC 容器1.1 什么是容器1.2 什么是 IoC 2. 什么是DI IoC & DI 的使用IoC详解Bean的存储Controller注解如何获取Bean1. 根据Bean的名称获取Bean2. 根据Bean类型获取Bean3. 根据Bean名和Bean类型获取Bean Service注解Repository注解Compo…

less 查看文本时,提示may be a binary file.See it anyway?

解决办法 首先使用echo $LESSCHARSET查看less的编码 看情况设置less的编码格式(我的服务器上使用utf-8查看中文) 还要特别注意一下&#xff0c;Linux中存在的文本文件的编码一定要是utf - 8;&#xff08;这一步很关键&#xff09; 例如&#xff1a;要保证windows上传到Linux的…