Bridging ITK image data with NumPy array#
This example illustrates interfacing ITK Image data with NumPy array.
[1]:
import os
import numpy as np
from urllib.request import urlretrieve
import matplotlib.pyplot as plt
%matplotlib inline
import itk
from itkwidgets import view
[2]:
input_image_path = "Slicer.png"
if not os.path.exists(input_image_path):
url = "https://data.kitware.com/api/v1/file/602c10a22fa25629b97d2896/download"
urlretrieve(url, input_image_path)
[3]:
PixelType = itk.ctype("unsigned char")
ImageType = itk.Image[itk.UC, 2]
itk_image = itk.imread(input_image_path, PixelType)
OriginalRegion = itk_image.GetLargestPossibleRegion()
OriginalSize = OriginalRegion.GetSize()
print (f'ITK image size = {OriginalSize}')
view(itk_image, ui_collapsed=True)
ITK image size = itkSize2 ([221, 257])
[3]:
<itkwidgets.viewer.Viewer at 0x7f897c05e460>
[4]:
array = itk.GetArrayFromImage(itk_image, ttype=ImageType)
print(f'Array size = {array.shape}')
plt.gray()
plt.imshow(array)
plt.axis('off')
Array size = (257, 221)
[4]:
(-0.5, 220.5, 256.5, -0.5)
[5]:
itk_image_convert = itk.GetImageFromArray(np.ascontiguousarray(array))
region = itk_image_convert.GetLargestPossibleRegion()
size = region.GetSize()
print(f'Size = {size}')
Size = itkSize2 ([221, 257])
[ ]: