介紹如何在 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