介紹如何在 Ubuntu Linux 中建立 ITK 應用程式開發環境,撰寫 ITK 的 hello world 程式。
開發環境
若要開發基本的 ITK C++ 應用程式,除了安裝 ITK 函式庫之外,還要安裝好 CMake 編譯工具。在 Ubuntu Linux 中,可以使用 apt 安裝:
# 安裝 CMake 與 ITK 函式庫
sudo apt install cmake libinsighttoolkit4-dev
Hello World
以下是一個 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})
編譯 ITK 應用程式
建立一個編譯用的 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

