一、说明

  医疗图像配准是ITK的一个重要内容,而我们今天想要说的一个程序则相当于是其中的HelloWorld程序。

  程序源码位置:

InsightToolkit-5.0.\Examples\RegistrationITKv4\\ImageRegistration1.cxx

二、ITK的配准框架

  

三、程序的主要思路

  程序的主要思路可以用如下的框图来表示:

  

  其中我们需要输入输出的文件如下:

  

  但是在这里,为了便于程序阅读,这个时候我把所有的参数全部都写在了程序里面。

四、工程构建

 1-构建工程

  按照之前的方法,利用已经有的源文件构建一个工程,并且添加属性表和动态链接库文件。

 2-程序修改

  源码程序这个时候不是能用的,需要稍作修改

  2.1将每一个argv参数的位置直接修改为文件名

  参数含义如下:

参数 内容
argv[1] 参考图片
argv[2] 待配准图片
argv[3] 输出待配准图片(以参考图片格式输出)
argv[4] 两个输入图片配准之后的差值图片
argv[5] 两个输入图片未配准的时候的差值图片

  实际程序里面修改:

//参考图片位置
fixedImageReader->SetFileName("D:\\FilesSetup\\ITK\\InsightToolkit-5.0.1\\Examples\\Data\\BrainProtonDensitySliceBorder20.png");
//待配准图片位置
movingImageReader->SetFileName("D:\\FilesSetup\\ITK\\InsightToolkit-5.0.1\\Examples\\Data\\BrainProtonDensitySliceShifted13x17y.png");
//文件写入位置,这三张图片全部都写入到本工程目录下
writer->SetFileName("D:\\Files\\ITKFiles\\ITK_6_Registration\\Data\OutputData\\Moving13x17yInputType.png");
writer2->SetFileName("D:\Files\ITKFiles\ITK_6_Registration\Data\OutputData\Moving13x17yInputType.png");
writer2->SetFileName("D:\\Files\\ITKFiles\\ITK_6_Registration\\Data\\OutputData\\DifferenceBeforeRegistration.png");

  2.2添加头文件

  因为要阅读png文件,所以需要添加png文件的IOFactory

#include "itkPNGImageIOFactory.h"

  初始化IOFactory:

itk::PNGImageIOFactory::RegisterOneFactory();

  2.3添加命令行参数

  因为程序里面有对输入参数的判断,当我们修改以后,还是要满足输入参数的个数(虽然我们已经不用这个参数了,但是这个判断条件是程序运行的触发条件)

  打开调试-属性:

  

   在调试-命令参数里面输入六个随意数字,以空格间隔:

 

五、运行结果

  得到的几张图片与参考书吻合:

  

控制台输出如下:

  

可以看到,一共经过了36次迭代,最后计算出来的测度函数值为0.0007,然后得到的偏移量是(13,17),和图片的真实偏移量是符合的

六、参考

  InsightSoftwareGuide-Book2-5.0.1 Page189(书籍页码)

七、问题

  今天出了一个糗事,我在构建工程的时候,由于偷懒,直接复制的另外一个工程,然后程序都已经修改好了,不论怎么运行,都没有输出。

  还以为是函数复制出了问题,但是这个时候我才发现,我根本没有把这个main.cpp文件添加到工程里面。

  害的我特地对比了一下是不是函数复制的时候出了问题。

  ......

  不注重细节害死人啊。

十二、ITK例程-医疗图像配准的HelloWorld程序的更多相关文章

  1. 如何在Visual Studio 2017中使用C# 7+语法 构建NetCore应用框架之实战篇(二):BitAdminCore框架定位及架构 构建NetCore应用框架之实战篇系列 构建NetCore应用框架之实战篇(一):什么是框架,如何设计一个框架 NetCore入门篇:(十二)在IIS中部署Net Core程序

    如何在Visual Studio 2017中使用C# 7+语法   前言 之前不知看过哪位前辈的博文有点印象C# 7控制台开始支持执行异步方法,然后闲来无事,搞着,搞着没搞出来,然后就写了这篇博文,不 ...

  2. NetCore入门篇:(十二)在IIS中部署Net Core程序

    一.简介 微软已经为net在iis中的部署提供了良好的支持,在IIS中部署NetCore是一件很容易的事. 二.在IIS中部署Net Core程序 1.微软官方文档有详细说明.进入 2.如果你已经熟悉 ...

  3. SSE图像算法优化系列三十二:Zhang\Guo图像细化算法的C语言以及SIMD指令优化

    二值图像的细化算法也有很多种,比较有名的比如Hilditch细化.Rosenfeld细化.基于索引表的细化.还有Opencv自带的THINNING_ZHANGSUEN.THINNING_GUOHALL ...

  4. Opencv探索之路(二十):制作一个简易手动图像配准工具

    近日在做基于sift特征点的图像配准时遇到匹配失败的情况,失败的原因在于两幅图像分辨率相差有点大,而且这两幅图是不同时间段的同一场景的图片,所以基于sift点的匹配已经找不到匹配点了.然后老师叫我尝试 ...

  5. OpenCV探索之路(二十四)图像拼接和图像融合技术

    图像拼接在实际的应用场景很广,比如无人机航拍,遥感图像等等,图像拼接是进一步做图像理解基础步骤,拼接效果的好坏直接影响接下来的工作,所以一个好的图像拼接算法非常重要. 再举一个身边的例子吧,你用你的手 ...

  6. 从零开始学习PYTHON3讲义(十二)画一颗心送给你

    (内容需要,本讲使用了大量在线公式,如果因为转帖网站不支持公式无法显示的情况,欢迎访问原始博客.) <从零开始PYTHON3>第十二讲 上一节课我们主要讲解了数值计算和符号计算.数值计算的 ...

  7. 【腾讯Bugly干货分享】腾讯验证码的十二年

    本文来自于腾讯bugly开发者社区,未经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/581301b146dfb1456904df8d Dev Club 是一个交流移动 ...

  8. Web 前端开发精华文章推荐(HTML5、CSS3、jQuery)【系列二十二】

    <Web 前端开发精华文章推荐>2014年第一期(总第二十二期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML ...

  9. PRML读书会第十二章 Continuous Latent Variables(PCA,Principal Component Analysis,PPCA,核PCA,Autoencoder,非线性流形)

    主讲人 戴玮 (新浪微博: @戴玮_CASIA) Wilbur_中博(1954123) 20:00:49 我今天讲PRML的第十二章,连续隐变量.既然有连续隐变量,一定也有离散隐变量,那么离散隐变量是 ...

随机推荐

  1. 学习Java必看的Java书籍(高清中文最新版附下载链接)

    今年下半年,我正式系统地学习Java(之前学习C++).最近把学习Java所用到的书籍整理了一下,分享出来,希望对正在学习或准备学习Java的人有一定的帮助. 关于Java的学习路线,和IDE工具In ...

  2. 【CSS】398- 原生JS实现DOM爆炸效果

    爆炸动效分享 前言 此次分享是一次自我组件开发的总结,还是有很多不足之处,望各位大大多提宝贵意见,互相学习交流. 分享内容介绍 通过原生js代码,实现粒子爆炸效果组件 组件开发过程中,使用到了公司内部 ...

  3. 关于页面打印window.print()的样式问题

    当我们打印网页的时候.有时候会发现.打印出来的.跟网页上看到的样式的差别有点大.这其中可能有的问题是.样式问题. 当调用打印(window.print())方法时.打印机会在网页的样式中查找 @med ...

  4. 11条MySQL规范,你知道的有几个?

    一.数据库命令规范 · 所有数据库对象名称必须使用小写字母并用下划线分割 · 所有数据库对象名称禁止使用mysql保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) · 数据库对象的命名 ...

  5. jsonp跨域 封装通用方法

    jsonp跨域 封装通用方法 //用法如下 jsonp({ url:"https://www.xxxx.com", params:{wd:'b'}, callback:'show' ...

  6. Linux系统入门简介<1>

    linux系统入门简介 我们为什么要学习Linux? 在介绍Linux的历史前,我想先针对大家如何对Linux的发音说一下.我发现我身边的朋友对Linux的发音大致有这么几种: "里那克斯& ...

  7. 集群环境下,你不得不注意的ASP.NET Core Data Protection 机制

    引言 最近线上环境遇到一个问题,就是ASP.NET Core Web应用在单个容器使用正常,扩展多个容器无法访问的问题.查看容器日志,发现以下异常: System.Security.Cryptogra ...

  8. BOM对象——Navigator

    BOM对象--Navigator <!DOCTYPE html> <html> <head> <meta charset="utf-8"& ...

  9. 不看好 git ,也看不懂为什么那么多人去使用 git

    上来就亮明观点,符合我的性格.呵呵呵. 为什么不看好 git 呢? 首先,我们来看看 git 产生的背景. git 是 Linus 开发的,最初的目的,是为了管理 Linux 系统的源代码.这是一个分 ...

  10. linux中关于权限的一些事

    权限这个东西对于初学者来说可能会有点陌生,不过不要紧,看完下面的讲解应该会对你有一定的帮助 权限rwx rwxrwxrwx  u     g    o         a r:可读      4 w: ...