ITK  5.4.0
Insight Toolkit
SphinxExamples/src/Filtering/ImageGrid/ProcessA2DSliceOfA3DImage/Code.py
1 #!/usr/bin/env python
2 
3 # Copyright NumFOCUS
4 #
5 # Licensed under the Apache License, Version 2.0 (the "License");
6 # you may not use this file except in compliance with the License.
7 # You may obtain a copy of the License at
8 #
9 # https://www.apache.org/licenses/LICENSE-2.0.txt
10 #
11 # Unless required by applicable law or agreed to in writing, software
12 # distributed under the License is distributed on an "AS IS" BASIS,
13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 # See the License for the specific language governing permissions and
15 # limitations under the License.
16 
17 import itk
18 import argparse
19 
20 parser = argparse.ArgumentParser(description="Process A 2D Slice Of A 3D Image.")
21 parser.add_argument("input_3D_image")
22 parser.add_argument("output_3D_image")
23 parser.add_argument("slice_number", type=int)
24 args = parser.parse_args()
25 
26 Dimension = 3
27 PixelType = itk.ctype("short")
28 ImageType = itk.Image[PixelType, Dimension]
29 
30 reader = itk.ImageFileReader[ImageType].New()
31 reader.SetFileName(args.input_3D_image)
32 reader.Update()
33 inputImage = reader.GetOutput()
34 
35 extractFilter = itk.ExtractImageFilter.New(inputImage)
36 extractFilter.SetDirectionCollapseToSubmatrix()
37 
38 # set up the extraction region [one slice]
39 inputRegion = inputImage.GetBufferedRegion()
40 size = inputRegion.GetSize()
41 size[2] = 1 # we extract along z direction
42 start = inputRegion.GetIndex()
43 sliceNumber = args.slice_number
44 start[2] = sliceNumber
45 desiredRegion = inputRegion
46 desiredRegion.SetSize(size)
47 desiredRegion.SetIndex(start)
48 
49 extractFilter.SetExtractionRegion(desiredRegion)
50 pasteFilter = itk.PasteImageFilter.New(inputImage)
51 medianFilter = itk.MedianImageFilter.New(extractFilter)
52 pasteFilter.SetSourceImage(medianFilter.GetOutput())
53 pasteFilter.SetDestinationImage(inputImage)
54 pasteFilter.SetDestinationIndex(start)
55 
56 indexRadius = size
57 indexRadius[0] = 1 # radius along x
58 indexRadius[1] = 1 # radius along y
59 indexRadius[2] = 0 # radius along z
60 medianFilter.SetRadius(indexRadius)
61 medianFilter.UpdateLargestPossibleRegion()
62 medianImage = medianFilter.GetOutput()
63 pasteFilter.SetSourceRegion(medianImage.GetBufferedRegion())
64 
65 itk.imwrite(pasteFilter.GetOutput(), args.output_3D_image)
itk::MedianImageFilter::New
static Pointer New()
itk::ImageFileReader
Data source that reads image data from a single file.
Definition: itkImageFileReader.h:75
itk::PasteImageFilter::New
static Pointer New()
itk::ExtractImageFilter::New
static Pointer New()
itk::Image
Templated n-dimensional image class.
Definition: itkImage.h:88
New
static Pointer New()