1. 程式人生 > >醫學影象處理工具包ITK

醫學影象處理工具包ITK

ITK介紹

ITK是一個開放原始碼、面向物件的軟體系統,提供一個醫學影象處理、影象分割與配準的演算法平臺。不過我目前使用不多,只瞭解一些配準的東西,所以就不胡亂介紹了。可以參考:

ITK is an open-source, cross-platform system that provides developers with an extensive suite of software tools for image analysis. Developed through extreme programming methodologies, ITK employs leading-edge algorithms for registering and segmenting multidimensional data.

ITK 是一個開放原始碼的軟體系統,這就意味著ITK 使用者和開發團體就可以方便地對軟體進行開發和改進。使用者和開發者可通過程式錯誤報告、除錯、測試、新類以及其他反饋來對ITK進行應用開發。

ITK編譯配置

ITK需要自己下載原始碼進行編譯。
使用CMake可以使ITK跨平臺工作。CMake是一個跨平臺,開放原始碼的安裝(編譯)工具。可以使用簡單的語言來描述所有平臺的安裝(編譯)過程。CMake的應用是非常廣泛的,它支援要求系統設定、編譯器特徵測試和程式碼繼承的複雜環境。CMake可以輸出UNIX和Cygwin系統下的Makefiles和Windows系統下的VisualStudio工作區(支援像Borland之類的其他編譯器安裝檔案)。CMake的資訊由CMakeList.txt檔案提供。

  • 首先要到ITK網站下載原始碼。Library Source就是ITK原始檔。Documentation是各種說明。可以下載以供學習參考。

  • CMake網站根據自身系統環境下載CMake。下載完成後進行安裝。

  • 將ITK原始檔解壓到任意路徑(如D:\Program\ITK\InsightToolkit-4.7.0),並在ITK資料夾下建立ITK_bin資料夾(ITK_bin資料夾用來存放ITK專案檔案)。
  • 開啟cmake-gui(cmake圖形介面),分別將ITK原始檔目錄以及ITK_bin檔案目錄填入Cmake中。勾選Group和Advanced選項。點選Configure,選擇編譯器,點選Finish。如圖:Cmake設定1
  • 在BUILD組下,可以勾選BUILD_SHARED_LIBS。為了加快編譯速度,可以取消BUILD_EXAMPLES和BUILD_TESTING來取消ITK例子和測試的編譯。在CMAKE組中,CMAKE_INSTALL_PREFIX項更改ITK的INSTALL目錄,例如D:\Program\ITK。其餘可以採用預設選項,如圖:
    CMake設定2
  • 再次點選Configure,如果沒有報錯,點選Generate,如圖:
    CMake設定3
  • 開啟ITK_bin目錄下的ITK.sln,選擇生成選項卡->批生成。勾選Debug和Release,點選生成,開始編譯。這個過程要持續較長一段時間。
  • 編譯完成後,可以選擇INSTALL專案,右鍵->用於專案->僅生成INSTALL。會在CMAKE_INSTALL_PREFIX目錄下生成bin、include、lib、share資料夾。可在Debug和Release情況下分別生成,兩種情況生成略有不過,可分開儲存以備使用。
  • 到此ITK算是已經編譯完成。

ITK測試例子

使用ITK 建立一個新的工程,最簡單的方法就是在你的電腦中建立一個新資料夾,在資料夾中建立兩個檔案:一個是CMakeLists.txt,CMake使該檔案來建立一個Makefile(若你使用UNIX)或一個VisualStudio工作區(若你使用MS-Windows);另一個檔案是真正的呼叫ITK中的類的C++程式檔案。

首先編寫一個測試例子:
你在新工程中要寫的兩個檔案目錄。這兩個檔案可以在ITK原始檔Insight/Examples/
Installation目錄中找到。CMakeLists.txt檔案包括以下內容:

project(HelloWorld)
find_package(ITK REQUIRED)
include(${ITK_USE_FILE})
add_executable(HelloWorld HelloWorld.cxx)
target_link_libraries(HelloWorld ${ITK_LIBRARIES})

第一行定義了在VisualStudio中出現的工程名字(這在UNIX系統下毫無影響)。第二行載入一個帶有尋找ITK的預定義策略的CMake檔案。如果尋找ITK的策略失敗,CMake將會要求你提供ITK的安裝位置。你可以在ITK_BINARY_DIR變數中填入正確的位置資訊。命令列INCLUDE(${ITK_USE_FILE})載入UseITK.cmake檔案來設定所有的ITK配置資訊。命令列ADD_EXECUTABLE定義了一個此工程產生執行結果檔案的名字。ADD_ EXECUTABLE中的保留變數是原始碼編譯和連結的名字。最後一行命令TARGET_LINK_LIBRARIES指出哪些ITK類庫將連結到這個工程中來。
這一節的原始碼可以在Examples/Installation/HelloWorld.cxx中找到。
接下來的程式碼是一段小的應用程式設計執行程式碼,用來測試包括標頭檔案和類庫的連結:

#include "itkImage.h"
#include <iostream>
int main()
{
    typedef itk::Image< unsigned short, 3 > ImageType;
    ImageType::Pointer image = ImageType::New();
    std::cout << "ITK Hello World !" << std::endl;
    return 0;
}

這段程式程式碼是將一個三維影象中的畫素用無符號短字元型別數字代替,然後構造這個影象並指向一個itk::SmartPointer。後面將詳細介紹智慧指標,現在你可以把它看做是對一個物件的例項的操作。到此你已經成功地安裝、運行了ITK,並建立了你的第一個簡單程式。

ITK使用問題

ITK的使用一種方式就是按照上文介紹的,採用CMakeList的方式來生成專案,之後進行使用。這種使用方法需要自己編寫CMakeList。

另外一種ITK的使用方式是網上很多教程採用的。手動建立VS專案,將前文ITK產生的資料夾(bin、include、lib、share)路徑加入到專案屬性中。具體做法是:

  • 將前文產生的include檔案目錄加入到專案屬性包含目錄(Include Directories)中
  • 將lib檔案目錄加入到專案屬性庫目錄(library Direcotories)
  • 將lib目錄下所有檔案的檔名加入聯結器->輸入->附加依賴項(Additional Dependencies)中

ITK無法生成IO物件問題

  typedef itk::PNGImageIO ImageIOType;
  ImageIOType::Pointer pngIO = ImageIOType::New();
  reader->SetImageIO(pngIO);
  writer->SetImageIO(pngIO);

資源分享

我將自己下載的ITK的原始碼以及InsightSoftwareGuide放在了百度雲,方便大家下載。
InsightSoftwareGuide有中文版,但是翻譯不太好,可以參考著看。我當初是在哪兒下的記不清了,如果有侵犯到作者權利,那麼請告訴我,我會及時說明,在此先說抱歉。

Reference