stack-3d/image/processing.py

135 lines
3.7 KiB
Python
Raw Normal View History

2017-02-16 15:26:55 +00:00
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)