九、ITK-VTK混合編程--將序列dcm圖像通過ITK讀去並通過VTK顯示出來


一、初步介紹

  上一個博客里面我記錄了VTK的安裝,以及相關的工程代碼的構建,但是實際上上一個博客測試的代碼的例子僅僅只是VTK程序的例子。而我實際上希望能夠實現的是VTK和ITK混合編程。

  在這里還是要簡單的說下,ITK只是擁有對於圖像處理的算是,但是始終都不能夠直接的顯示出來,沒有直觀性。

  所以這里我們需要借助VTK去觀察,這也是我們需要VTK的關鍵所在。

  但是VTK本身並不是為了這個而存在的,它也可以服務於其他的可視化的程序,只是我們在這里需要的是它服務於ITK而已。

  下面的記錄按照時間為順序。先后記錄我們的遇到的問題。

  版本介紹: VS2019

        cmake 3.16

        ITK:5.0.1

        VTK:8.2.0

二、工程構建

 1-代碼來源

  main.cpp里面的代碼來自如下:https://blog.csdn.net/qq_35007834/article/details/88569821

  代碼功能參考這個博客,它主要是讀取一系列的dcm圖像然后三維重建,通過VTK顯示出來。

  具體的函數功能我還不是很了解。

  2-建立工程

  <1>建立一個空項目

  <2>新建main.cpp, 將上面博客里面的代碼復制進去。

  <3>我們注意到,代碼里面已經包含了下面兩個函數初始化

  

   但是我們還是需要添加一個頭函數:

#include "vtkAutoInit.h" 

  具體原因參見這個博客:https://blog.csdn.net/kaspar1992/article/details/57080724

  <4>添加項目屬性表

  之前在博客一ITK的安裝,與博客八VTK的安裝里面,我們構建新的工程的時候,已經新建了兩個關於ITK和VTK的項目屬性表。

  這個時候我們可以把這兩個項目屬性表復制到本工程所在的文件夾。(注意我在編譯所有工程的時候一直使用的是同一個模式,也就是Release X64)

  然后打開屬性管理器,添加這兩個項目屬性表:

  

 

   這個時候我的工程設置也是Release X64的模式:

  

   5-修改配置屬性

  與之前構建工程的時候一樣,這個時候我們需要在項目的配置屬性里面添加.dll文件所在的位置。

  只不過與之前不一樣的是,我們之前需要添加一個文件夾,現在需要添加兩個文件夾(ITK和VTK的)

  打開配置屬性:

  

   

   這個時候我們在環境變量里面添加如下的句子:

path=%path%;D:\FilesSetup\ITK\itk_out\bin\;D:\FilesSetup\VTK\VTK-prefix\bin\

  如果你有看過我之前的博客就知道,這里面的:

   D:\FilesSetup\ITK\itk_out\bin\;

  指的是我在安裝ITK的時候,運行INSTALL工程之后得到的四個文件夾里面的一個,也是包含了所有的.dll文件

  同樣的

  D:\FilesSetup\VTK\VTK-prefix\bin\

   表示的是我在安裝VTK的過程中,INSTALL工程運行之后得到的四個文件夾之一。

  這個時候看起來我們似乎已經把所有的工作都完成了,可以嘗試運行一下程序。

三、問題

  1-Error:cannot open source file "itkImageToVTKImageFilter.h"

  這個頭文件打不開,參考了如下鏈接:

  https://blog.csdn.net/webzhuce/article/details/70552816?utm_source=blogxgwz7

  解決辦法:

  按照鏈接里面的方法,重新編譯ITK

  這個時候還是按照博客一的過程編譯,但是cmake編譯中有幾個選項需要修改:

  1-選擇下面的模塊Module:

  

   勾選框中選項:

  

   2-然后找到下面的選項:

  

   在VTK_DIR里面添加VTK通過cmake編譯之后得到的文件夾,里面需要有VTK-CONFIG.cmake或者是vtk-config.cmake文件

  這個時候按照博客一里面的內容重新來一遍。

  2-錯誤

  將程序里面的文件夾更改為dcm序列圖像所在的文件夾。

  然后點擊運行。

  運行之后得到如下的錯誤:

  

 

   這個時候由於在新版本里面的sprintf函數(ITK和VTK使用的,已經逐漸的不符合VS的規定)

  這個時候我們在程序開頭添加如下的代碼,以忽略上述錯誤(這個代碼的作用就是無視上面的那個錯誤):

#pragma warning(disable:4996)

四、運行程序

  我輸入的圖像是一個人體脊椎的CT圖像,所以得到的結果如圖:

  

 

   這個證明了我們構建工程的思路是沒有錯的,所以ITK和VTK的混合編程已經可以實現了。

  注意:這里非常的消耗電腦內存,我第一次輸入了160張圖片,然后電腦處理了很久,我幾乎以為是程序出現了問題。

  然后第二次將輸入的數據減少為7張,這個時候等待了大概十幾秒就出來結果了,所以程序沒有問題以后,如果不能夠運行出結果,這個時候我們要考慮一下是不是我們輸入的圖片的數目太多,導致電腦處理的時間太長。

五、參考鏈接

  1-VTK編譯中出現 no override found for vtkpolydatamapper 解決方法

  解決博客:https://blog.csdn.net/kaspar1992/article/details/57080724

  2-代碼來源博客:https://blog.csdn.net/qq_35007834/article/details/88569821

  3-博客一-ITK的安裝和例子構建過程:博客一

  4-博客二-VTK的安裝和例子構建過程:博客二

  

  


免責聲明!

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



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