介紹如何在 Ubuntu Linux 中建立 ITK 應用程式開發環境,撰寫 ITK 的 hello world 程式。
若要開發基本的 ITK C++ 應用程式,除了安裝 ITK 函式庫之外,還要安裝好 CMake 編譯工具。在 Ubuntu Linux 中,可以使用 apt 安裝:
# 安裝 CMake 與 ITK 函式庫
sudo apt install cmake libinsighttoolkit4-dev
以下是一個 ITK 的 hello world 程式碼,將其儲存為 hello.cpp
:
#include <itkImage.h> #include <iostream> int main() { // 定義影像類型 using ImageType = itk::Image<unsigned char, 3>; // 建立影像指標 ImageType::Pointer image = ImageType::New(); // 影像起始位置 ImageType::IndexType start; start[0] = 0; // X 軸的第一個索引值 start[1] = 0; // Y 軸的第一個索引值 start[2] = 0; // Z 軸的第一個索引值 // 影像尺寸 ImageType::SizeType size; size[0] = 200; // 影像 X 軸長度 size[1] = 200; // 影像 Y 軸長度 size[2] = 200; // 影像 Z 軸長度 // 建立 Region ImageType::RegionType region; region.SetSize(size); region.SetIndex(start); // 設定影像 Region image->SetRegions(region); // 配置記憶體空間 image->Allocate(); // 輸出影像資訊 std::cout << image << std::endl; return EXIT_SUCCESS; }
CMakeLists.txt
設定檔ITK 的應用程式通常都是搭配 CMake 來編譯,編譯之前要先建立一個 CMakeLists.txt
設定檔,基本的內容如下:
cmake_minimum_required(VERSION 3.10.2) # 設定專案名稱 project(Hello) # 尋找並引入 ITK 函式庫 find_package(ITK REQUIRED) include(${ITK_USE_FILE}) # 增加一個執行檔 add_executable(Hello hello.cpp) # 定義執行檔連結方式 target_link_libraries(Hello ${ITK_LIBRARIES})
建立一個編譯用的 build
目錄,進入目錄之後,就按照一般的方式來編譯這個 CMake 專案:
# 建立編譯用目錄 mkdir build # 進入目錄,編譯專案 cd build cmake .. make
編譯完成之後,執行編譯好的程式:
# 執行程式
./Hello
Image (0x558527d6d6f0) RTTI typeinfo: itk::Image<unsigned char, 3u> Reference Count: 2 Modified Time: 4 Debug: Off Object Name: Observers: none Source: (none) Source output name: (none) Release Data: Off Data Released: False Global Release Data: Off PipelineMTime: 0 UpdateMTime: 0 RealTimeStamp: 0 seconds LargestPossibleRegion: Dimension: 3 Index: [0, 0, 0] Size: [200, 200, 200] BufferedRegion: Dimension: 3 Index: [0, 0, 0] Size: [200, 200, 200] RequestedRegion: Dimension: 3 Index: [0, 0, 0] Size: [200, 200, 200] Spacing: [1, 1, 1] Origin: [0, 0, 0] Direction: 1 0 0 0 1 0 0 0 1 IndexToPointMatrix: 1 0 0 0 1 0 0 0 1 PointToIndexMatrix: 1 0 0 0 1 0 0 0 1 Inverse Direction: 1 0 0 0 1 0 0 0 1 PixelContainer: ImportImageContainer (0x558527d6d9b0) RTTI typeinfo: itk::ImportImageContainer<unsigned long, unsigned char> Reference Count: 1 Modified Time: 5 Debug: Off Object Name: Observers: none Pointer: 0x7f817422d010 Container manages memory: true Size: 8000000 Capacity: 8000000