2.基于ITK库的3D医学图像配准-1_itk3d配准-程序员宅基地

技术标签: 图像配准  

1.基于ITK库的3D医学图像配准: 

配准的过程主要包括四个模块,即:变换,插值,准则,优化。配准过程实际上可以认为是一个优化过程。

  • 待配准图像变换到参考图像的坐标系。
  • 插值:解决变换引起的位置、亮度值等的差异,如线性插值,邻域插值等等。
  • metric(准则),如均方差,互信息准则等等。用于将变化后图像的差异数学化,它的输入包括:参考图像和待配准图像,变换函数和interpolator(插值器)。用准则对数据进行计算后的值将用优化器进行优化,优化后的参数将返回迭代再进行配准,一直到达到要求。
  • 优化器有两种类型:1.singalvalue,即优化器返回单值的cost function,2.返回多值的,即muti-value。
    • 配准是基于上述四个部分,针对不同的图形情况,如单模,多模,去用不同的准则,变换,优化器和插值方法。
    • 不同部分的参数设置是难点。
    • 不同的优化器,往往参数设置不同,这个就需要了解优化器和配准方法的算法。

 2.配准步骤:

  • 设置待配准图像和参考图像的像素类型,维数。
  • 实例化上述四个部分,并将其组合到registration中,设置各部分的参数,并触发配准开始。(实例化往往先定义——tyoedef,再指向智能指针,然后通过指针调用set*()函数设置参数。)
  • 通过最终得到的参数重采样带配准图像,得到配准结果。
  • 比较配准前后和配准过程后的差异。
  • 配准过程中,有时会根据具体情况先用*filter对图像进行处理。如在配准中对精度要求高的话,先用cast*filter将图像转化为float型,配准后再转化为char,或int型存储。如果图像噪声比较明显,也可以先用*filter除噪在配准。有的也用filter保留边缘,在配准。
  • ITK的参数输入是在工程的属性dubug中输入,如:配准图像的文件名称,优化器的某些参数,变化后图像配准区域外的亮度,输出图像的名字等等。具体代码较多这里不附上,只要理解上述过程,代码是比较好看的。

3.配准框架:

       配准框架的基本成员:两个输入图像、一个变换、一个路径选择、一个校对机和一个优化器。

过程:

  • 待配准图像通过 变换函数(T(x)) 到参考图像的映射过程。
  • 传递函数 T(X)表示从参考图像上的点到待配准图像上的点的空间映射关系。
  • 校对机被用来评估待配准图像在非网格位置的程度。
  • 成员路径选择 S(f, m×T)提供了一种参考图像被待配准图像配准的程度。

4.配准方法:两个输入的图像、转换函数、度量、校对机和优化器(配准方法中的成分的每种类型都应该首先被实例化)。

  • 1.两个输入的图像
    • const unsigned int Dimension = 2;//图像数据类型参数,维度
    • typedef float PixelType;//图像数据类型参数,像素类型
    • 输入数据的类型通过下面几行表达:
    • typedef itk::Image< PixelType, Dimension > FixedImageType;
    • typedef itk::Image< PixelType, Dimension > MovingImageType;
  • 2.图像转换
    • 把参考图像空间映射到待配准图像空间的转换如下:
    • typedef itk::TranslationTransform< double, Dimension > TransformType;//转换类型
  • 3.度量
    • 衡量标准为比较两幅图像的搭配质量。衡量标准通常已经参数化,例如说下面对图像类型的声明:
    • typedef itk::MeanSquaresImageToImageMetric<FixedImageType,MovingImageType > MetricType;
  • 4.选择校对机的类型
    • typedef itk:: LinearInterpolateImageFunction<MovingImageType,double > InterpolatorType;//选择插值类型
  • 5.配准方法
    • 配准方法的类型是通过参考和待配准图像的类型来表示的。
      • typedef itk::ImageRegistrationMethod<FixedImageType,MovingImageType > RegistrationType;
    • 配准的要素:转换,度量,校对机,优化方法。
    • 以下为要素:
    • 每一个配准要素都是通过它的New( )创建的,并且通过各自的itk::SmartPointer赋值。
      • MetricType::Pointer metric = MetricType::New( );
      • TransformType::Pointer transform = TransformType::New( );
      • 优化器Type::Pointer 优化器 = 优化器Type::New( );
      • InterpolatorType::Pointer interpolator = InterpolatorType::New( );
      • RegistrationType::Pointer registration = RegistrationType::New( );
    • 每一个要素被连接到配准方法的程序中:
      • registration->SetMetric( metric );
      • registration->SetOptimitor( optimitor);
      • registration->SetTransform( transform );
      • registration->SetInterpolator( interpolator );
    • 配准需要的输入图像读取示例:
      • 参考和待配准图像从文件里读取。 这就需要itk::ImageRegistrationMethod从readers的输出中获得它的输入数据。
      • registration->SetFixedImage( fixedImageReader->GetOutput( ) );
      • registration->SetMovingImage( movingImageReader->GetOutput( ) );
    • 需要配准的图像可能只是图像中的部分区域,以下为设置指定区域操作:
      • 这样的区域通过参考图像的BufferedRegion定义。注意,在这个区域首先要调用它的Update( )方法:
      • fixedImageReader->Update( );
      • registration->SetFixedImageRegion(fixedImageReader->GetOutput( )->GetBufferedRegion( ) );
    • 变换参数设置示例(平移):用于变换的参数队列由沿着每一维的方向的平移值构成。设置参数值到零以便将变换初始成恒等变换。
      • typedef RegistrationType::ParametersType//变换类型
      • ParametersType;ParametersTypeinitialParameters(transform->GetNumberOfParameters( ) );
      • initialParameters[0] = 0.0; // Initial offset in mm along X
      • initialParameters[1] = 0.0; // Initial offset in mm along Y
      • registration->SetInitialTransformParameters( initialParameters );//变换参数设置
    • 准备执行配准方法。优化器用来驱动配准的执行。然而, ImageRegistrationMethod类协调整体以确保在传递给优化器之前一切都到位了。优化器用于收敛得到配准的参数,需要设置。

 

转自:http://blog.sina.com.cn/s/blog_62ccbb810100hven.htmlhttps://blog.csdn.net/zhimingf/article/details/70142427

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_37806107/article/details/105376066

智能推荐

c# 调用c++ lib静态库_c#调用lib-程序员宅基地

文章浏览阅读2w次,点赞7次,收藏51次。四个步骤1.创建C++ Win32项目动态库dll 2.在Win32项目动态库中添加 外部依赖项 lib头文件和lib库3.导出C接口4.c#调用c++动态库开始你的表演...①创建一个空白的解决方案,在解决方案中添加 Visual C++ , Win32 项目空白解决方案的创建:添加Visual C++ , Win32 项目这......_c#调用lib

deepin/ubuntu安装苹方字体-程序员宅基地

文章浏览阅读4.6k次。苹方字体是苹果系统上的黑体,挺好看的。注重颜值的网站都会使用,例如知乎:font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, W..._ubuntu pingfang

html表单常见操作汇总_html表单的处理程序有那些-程序员宅基地

文章浏览阅读159次。表单表单概述表单标签表单域按钮控件demo表单标签表单标签基本语法结构<form action="处理数据程序的url地址“ method=”get|post“ name="表单名称”></form><!--action,当提交表单时,向何处发送表单中的数据,地址可以是相对地址也可以是绝对地址--><!--method将表单中的数据传送给服务器处理,get方式直接显示在url地址中,数据可以被缓存,且长度有限制;而post方式数据隐藏传输,_html表单的处理程序有那些

PHP设置谷歌验证器(Google Authenticator)实现操作二步验证_php otp 验证器-程序员宅基地

文章浏览阅读1.2k次。使用说明:开启Google的登陆二步验证(即Google Authenticator服务)后用户登陆时需要输入额外由手机客户端生成的一次性密码。实现Google Authenticator功能需要服务器端和客户端的支持。服务器端负责密钥的生成、验证一次性密码是否正确。客户端记录密钥后生成一次性密码。下载谷歌验证类库文件放到项目合适位置(我这边放在项目Vender下面)https://github.com/PHPGangsta/GoogleAuthenticatorPHP代码示例://引入谷_php otp 验证器

【Python】matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距-程序员宅基地

文章浏览阅读4.3k次,点赞5次,收藏11次。matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距

docker — 容器存储_docker 保存容器-程序员宅基地

文章浏览阅读2.2k次。①Storage driver 处理各镜像层及容器层的处理细节,实现了多层数据的堆叠,为用户 提供了多层数据合并后的统一视图②所有 Storage driver 都使用可堆叠图像层和写时复制(CoW)策略③docker info 命令可查看当系统上的 storage driver主要用于测试目的,不建议用于生成环境。_docker 保存容器

随便推点

网络拓扑结构_网络拓扑csdn-程序员宅基地

文章浏览阅读834次,点赞27次,收藏13次。网络拓扑结构是指计算机网络中各组件(如计算机、服务器、打印机、路由器、交换机等设备)及其连接线路在物理布局或逻辑构型上的排列形式。这种布局不仅描述了设备间的实际物理连接方式,也决定了数据在网络中流动的路径和方式。不同的网络拓扑结构影响着网络的性能、可靠性、可扩展性及管理维护的难易程度。_网络拓扑csdn

JS重写Date函数,兼容IOS系统_date.prototype 将所有 ios-程序员宅基地

文章浏览阅读1.8k次,点赞5次,收藏8次。IOS系统Date的坑要创建一个指定时间的new Date对象时,通常的做法是:new Date("2020-09-21 11:11:00")这行代码在 PC 端和安卓端都是正常的,而在 iOS 端则会提示 Invalid Date 无效日期。在IOS年月日中间的横岗许换成斜杠,也就是new Date("2020/09/21 11:11:00")通常为了兼容IOS的这个坑,需要做一些额外的特殊处理,笔者在开发的时候经常会忘了兼容IOS系统。所以就想试着重写Date函数,一劳永逸,避免每次ne_date.prototype 将所有 ios

如何将EXCEL表导入plsql数据库中-程序员宅基地

文章浏览阅读5.3k次。方法一:用PLSQL Developer工具。 1 在PLSQL Developer的sql window里输入select * from test for update; 2 按F8执行 3 打开锁, 再按一下加号. 鼠标点到第一列的列头,使全列成选中状态,然后粘贴,最后commit提交即可。(前提..._excel导入pl/sql

Git常用命令速查手册-程序员宅基地

文章浏览阅读83次。Git常用命令速查手册1、初始化仓库git init2、将文件添加到仓库git add 文件名 # 将工作区的某个文件添加到暂存区 git add -u # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,不处理untracked的文件git add -A # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,包括untracked的文件...

分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120-程序员宅基地

文章浏览阅读202次。分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120

【C++缺省函数】 空类默认产生的6个类成员函数_空类默认产生哪些类成员函数-程序员宅基地

文章浏览阅读1.8k次。版权声明:转载请注明出处 http://blog.csdn.net/irean_lau。目录(?)[+]1、缺省构造函数。2、缺省拷贝构造函数。3、 缺省析构函数。4、缺省赋值运算符。5、缺省取址运算符。6、 缺省取址运算符 const。[cpp] view plain copy_空类默认产生哪些类成员函数

推荐文章

热门文章

相关标签