十二、ITK例程-醫療圖像配准的HelloWorld程序


一、說明

  醫療圖像配准是ITK的一個重要內容,而我們今天想要說的一個程序則相當於是其中的HelloWorld程序。

  程序源碼位置:

InsightToolkit-5.0.1\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文件添加到工程里面。

  害的我特地對比了一下是不是函數復制的時候出了問題。

  ......

  不注重細節害死人啊。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM