135 lines
3.7 KiB
Python
135 lines
3.7 KiB
Python
|
import itk
|
||
|
|
||
|
def default_image_type():
|
||
|
return itk.Image[itk.UC, 3]
|
||
|
|
||
|
def image_type_2d():
|
||
|
return itk.Image[itk.UC, 2]
|
||
|
|
||
|
def read_image(path, image_type):
|
||
|
|
||
|
"""
|
||
|
Read the image from file
|
||
|
"""
|
||
|
|
||
|
reader = itk.ImageFileReader[image_type].New()
|
||
|
reader.SetFileName(path)
|
||
|
reader.Update()
|
||
|
return reader
|
||
|
|
||
|
def write_image(path, image_type, image_container):
|
||
|
|
||
|
"""
|
||
|
Write the image to file
|
||
|
"""
|
||
|
|
||
|
writer = itk.ImageFileWriter[image_type].New()
|
||
|
writer.SetInput(image_container.GetOutput())
|
||
|
writer.SetFileName(path)
|
||
|
writer.Update()
|
||
|
|
||
|
def convert_vtk(image_container, image_type):
|
||
|
|
||
|
itk_vtk_converter = itk.ImageToVTKImageFilter[image_type].New()
|
||
|
itk_vtk_converter.SetInput(image_container.GetOutput())
|
||
|
itk_vtk_converter.Update()
|
||
|
return itk_vtk_converter
|
||
|
|
||
|
def merge_tiles(image_containers, image_type, num_x):
|
||
|
|
||
|
tiler = itk.TileImageFilter[image_type,image_type].New()
|
||
|
layout = [num_x, num_x, 0]
|
||
|
tiler.SetLayout(layout)
|
||
|
for idx, eachContainer in enumerate(image_containers):
|
||
|
tiler.SetInput(idx, eachContainer.GetOutput())
|
||
|
|
||
|
tiler.Update()
|
||
|
return tiler
|
||
|
|
||
|
def median_filter(image_container, image_type, radius):
|
||
|
|
||
|
median_filter = itk.MedianImageFilter[image_type, image_type].New()
|
||
|
median_filter.SetInput(image_container.GetOutput())
|
||
|
median_filter.SetRadius(radius)
|
||
|
median_filter.Update()
|
||
|
|
||
|
return median_filter
|
||
|
|
||
|
def correct_spacing(image_container, image_type, z_spacing):
|
||
|
|
||
|
correct = itk.ChangeInformationImageFilter[image_type].New()
|
||
|
correct.SetInput(image_container.GetOutput())
|
||
|
spacing = image_container.GetOutput().GetSpacing()
|
||
|
spacing[2] = z_spacing
|
||
|
correct.SetOutputSpacing(spacing)
|
||
|
correct.ChangeSpacingOn()
|
||
|
correct.Update()
|
||
|
|
||
|
return correct
|
||
|
|
||
|
def sum_projection(image_container, image_type):
|
||
|
output_type = itk.Image[itk.UC, 2]
|
||
|
|
||
|
sum_projection = itk.SumProjectionImageFilter[image_type, output_type].New()
|
||
|
sum_projection.SetInput(image_container.GetOutput())
|
||
|
|
||
|
sum_projection.Update()
|
||
|
return sum_projection
|
||
|
|
||
|
def shrink_image(image_type, image_container, factors = [2,2,2]):
|
||
|
|
||
|
"""
|
||
|
Reduce the size of the image in each dimension by the specified factors
|
||
|
"""
|
||
|
|
||
|
shrink = itk.ShrinkImageFilter[image_type, image_type].New()
|
||
|
shrink.SetInput(image_container.GetOutput())
|
||
|
shrink.SetShrinkFactor(0, factors[0])
|
||
|
shrink.SetShrinkFactor(1, factors[1])
|
||
|
shrink.SetShrinkFactor(2, factors[2])
|
||
|
shrink.Update()
|
||
|
return shrink
|
||
|
|
||
|
def get_roi(image_type, image_container, start = [0,0,0], size = [200, 200, 10]):
|
||
|
|
||
|
"""
|
||
|
Select a region of interest in the image
|
||
|
"""
|
||
|
|
||
|
roi = itk.RegionOfInterestImageFilter[image_type, image_type].New()
|
||
|
roi.SetInput(image_container.GetOutput())
|
||
|
|
||
|
region = itk.ImageRegion[3]()
|
||
|
region.SetIndex(start)
|
||
|
region.SetSize(size)
|
||
|
|
||
|
roi.SetRegionOfInterest(region)
|
||
|
roi.Update()
|
||
|
return roi
|
||
|
|
||
|
def threshold_image(image_type, image_container, lower = 195, upper = 200):
|
||
|
|
||
|
"""
|
||
|
Do a binary thresholding
|
||
|
"""
|
||
|
|
||
|
threshold = itk.BinaryThresholdImageFilter[image_type,image_type].New()
|
||
|
threshold.SetInput(image_container.GetOutput())
|
||
|
threshold.SetLowerThreshold(lower)
|
||
|
threshold.SetUpperThreshold(upper)
|
||
|
threshold.Update()
|
||
|
return threshold
|
||
|
|
||
|
def get_intensity_histogram(image_type, image_container):
|
||
|
|
||
|
"""
|
||
|
Write an intensity histogram
|
||
|
"""
|
||
|
|
||
|
histogram = itk.ImageToHistogramFilter[image_type].New()
|
||
|
histogram.SetInput(image_container.GetOutput())
|
||
|
histogram.Update()
|
||
|
|
||
|
for idx in range(histogram.GetOutput().GetSize()[0]):
|
||
|
print "Hist Intensity: ", idx, " Frequency: ", histogram.GetOutput().GetFrequency(idx)
|
||
|
|