标签:今天 setfile img mamicode 库文件 调试 程序 shift writer
医疗图像配准是ITK的一个重要内容,而我们今天想要说的一个程序则相当于是其中的HelloWorld程序。
程序源码位置:
InsightToolkit-5.0.1\Examples\RegistrationITKv4\\ImageRegistration1.cxx
程序的主要思路可以用如下的框图来表示:
其中我们需要输入输出的文件如下:
但是在这里,为了便于程序阅读,这个时候我把所有的参数全部都写在了程序里面。
按照之前的方法,利用已经有的源文件构建一个工程,并且添加属性表和动态链接库文件。
源码程序这个时候不是能用的,需要稍作修改
参数含义如下:
参数 | 内容 |
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");
因为要阅读png文件,所以需要添加png文件的IOFactory
#include "itkPNGImageIOFactory.h"
初始化IOFactory:
itk::PNGImageIOFactory::RegisterOneFactory();
因为程序里面有对输入参数的判断,当我们修改以后,还是要满足输入参数的个数(虽然我们已经不用这个参数了,但是这个判断条件是程序运行的触发条件)
打开调试-属性:
在调试-命令参数里面输入六个随意数字,以空格间隔:
得到的几张图片与参考书吻合:
控制台输出如下:
可以看到,一共经过了36次迭代,最后计算出来的测度函数值为0.0007,然后得到的偏移量是(13,17),和图片的真实偏移量是符合的
InsightSoftwareGuide-Book2-5.0.1 Page189(书籍页码)
今天出了一个糗事,我在构建工程的时候,由于偷懒,直接复制的另外一个工程,然后程序都已经修改好了,不论怎么运行,都没有输出。
还以为是函数复制出了问题,但是这个时候我才发现,我根本没有把这个main.cpp文件添加到工程里面。
害的我特地对比了一下是不是函数复制的时候出了问题。
......
不注重细节害死人啊。
标签:今天 setfile img mamicode 库文件 调试 程序 shift writer
原文地址:https://www.cnblogs.com/fantianliang/p/12079316.html