介紹如何在 Python 中以 ITK 轉換影像的資料型別,將 unsigned short
的灰階影像轉換為 unsigned char
。
安裝 Python 的 ITK 模組
透過 pip3
安裝 Python 的 itk
模組:
# 安裝 Python ITK 模組
pip3 install itk
轉換影像類型
以下是使用 ITK 將 unsigned short
的灰階影像轉換為 unsigned char
灰階影像的 Python 指令稿:
#!/usr/bin/env python import itk import sys if len(sys.argv) != 3: print("Usage: " + sys.argv[0] + " <inputImage> <outputImage> ") sys.exit(1) # 輸入與輸出檔案名稱 inputImage = sys.argv[1] outputImage = sys.argv[2] # 影像維度 Dimension = 3 # 輸入與輸出影像資料型別 InputPixelType = itk.US OutputPixelType = itk.UC # 定義輸入影像 InputImageType = itk.Image[InputPixelType, Dimension] OutputImageType = itk.Image[OutputPixelType, Dimension] # 輸入影像 Reader reader = itk.ImageFileReader[InputImageType].New() reader.SetFileName(inputImage) # 轉換影像數值 rescaler = itk.RescaleIntensityImageFilter[ InputImageType, InputImageType].New() rescaler.SetInput(reader.GetOutput()) rescaler.SetOutputMinimum(0) outputPixelTypeMaximum = itk.NumericTraits[OutputPixelType].max() rescaler.SetOutputMaximum(outputPixelTypeMaximum) # 轉換影像型別 castImageFilter = itk.CastImageFilter[InputImageType, OutputImageType].New() castImageFilter.SetInput(rescaler.GetOutput()) # 輸出影像檔案 writer = itk.ImageFileWriter[OutputImageType].New() writer.SetFileName(outputImage) writer.SetInput(castImageFilter.GetOutput()) # 實際執行 writer.Update()
這裡的輸入與輸出影像資料型別可以自由調整,常用的型別有:
C++ 型別 | Python 型別 |
---|---|
float |
itk.F |
double |
itk.D |
unsigned int |
itk.UI |
unsigned short |
itk.US |
unsigned char |
itk.UC |
signed int |
itk.SI |
signed short |
itk.SS |
signed char |
itk.SC |
影像資料型別除了以上的方式之外,亦可使用 itk.ctype('float')
的方式指定。
將上面的指令稿儲存為 convert.py
,接著即可使用這個指令稿進行影像資料型別的轉換:
# 轉換影像資料型別
python3 convert.py input.vtk output.vtk
ITK 支援的輸入與輸出檔案格式非常多,它會自動依據副檔名判斷檔案格式。
參考資料:ITK