diff --git a/src/Cxx/ImageData/VoxelsOnBoundary.md b/src/Cxx/ImageData/VoxelsOnBoundary.md
index bc785205a4fcbef386517be52c2ef497f47a081e..8ac290acdf193f3e93d53589f256fd8c06ea6bd4 100644
--- a/src/Cxx/ImageData/VoxelsOnBoundary.md
+++ b/src/Cxx/ImageData/VoxelsOnBoundary.md
@@ -2,13 +2,7 @@
 
 This example uses vtkMultiThreshold to extract voxels that are inside an isosurface and on the boundary of the isosurface. The result is a vtkUnstructuredGrid for each set of voxels. Before processing, vtkImageShrink3D reduces the resolution by a factor of 4.
 
-Compare these results with 
-
-!!! example "usage"
-    VoxelsOnBoundary FullHead.mhd
-
-!!! info
-    Compare these results with [MedicalDemo1](../../Medical/MedicalDemo1) that extracts the surface using vtkMarchingCubes to extract an interpolated isosurface.
+Compare these results with [MedicalDemo1](../../Medical/MedicalDemo1) that extracts the surface using vtkFlyingEdges3D or vtkMarchingCubes to extract an interpolated isosurface.
 
 !!! info
     The example uses `src/Testing/Data/FullHead.mhd` which references `src/Testing/Data/FullHead.raw.gz`.
diff --git a/src/PythonicAPI.md b/src/PythonicAPI.md
index 5c432381b8021eb5cbf23db07fef3b212c496386..ea4b939af97ca09edc004b7bff6b2f2390abb371 100644
--- a/src/PythonicAPI.md
+++ b/src/PythonicAPI.md
@@ -555,6 +555,7 @@ See [this tutorial](http://www.vtk.org/Wiki/VTK/Tutorials/3DDataTypes) for a bri
 [StreamlinesWithLineWidget](/PythonicAPI/VisualizationAlgorithms/StreamlinesWithLineWidget) | Using the vtkLineWidget to produce streamlines in the combustor dataset.  The StartInteractionEvent turns the visibility of the streamlines on; the InteractionEvent causes the streamlines to regenerate themselves.
 [TensorEllipsoids](/PythonicAPI/VisualizationAlgorithms/TensorEllipsoids) | Display the scaled and oriented principal axes as tensor ellipsoids representing the stress tensor.
 [TransformActorCollection](/PythonicAPI/Visualization/TransformActorCollection) | Transform an actor collection.
+[VoxelsOnBoundary](/PythonicAPI/ImageData/VoxelsOnBoundary) | Extract voxels on the border of an isosurface.
 [WarpCombustor](/PythonicAPI/VisualizationAlgorithms/WarpCombustor) | Carpet plots of combustor flow energy in a structured grid. Colors and plane displacement represent energy values.
 
 ## Working with ?vtkImageData?
@@ -613,7 +614,10 @@ See [this tutorial](http://www.vtk.org/Wiki/VTK/Tutorials/3DDataTypes) for a bri
 [GaussianSmooth](/PythonicAPI/ImageProcessing/GaussianSmooth) | Low-pass filters can be implemented as convolution with a Gaussian kernel.
 [HybridMedianComparison](/PythonicAPI/ImageProcessing/HybridMedianComparison) | Comparison of median and hybrid-median filters. The hybrid filter preserves corners and thin lines, better than the median filter.
 [IdealHighPass](/PythonicAPI/ImageProcessing/IdealHighPass) | This figure shows two high-pass filters in the frequency domain. The Butterworth high-pass filter has a gradual attenuation that avoids ringing produced by the ideal high-pass filter with an abrupt transition.
-[ImageContinuousDilate3D](/Cxx/PythonicAPI/ImageContinuousDilate3D) | Dilate an image.
+[ImageContinuousDilate3D](/PythonicAPI/Images/ImageContinuousDilate3D) | Dilate an image.
+[ImageContinuousErode3D](/PythonicAPI/Images/ImageContinuousErode3D) | Erode an image.
+[ImageConvolve](/PythonicAPI/Images/ImageConvolve) | Convolve an image with a kernel.
+[ImageCorrelation](/PythonicAPI/Images/ImageCorrelation) | Correlate two images.
 [ImageGradient](/PythonicAPI/VisualizationAlgorithms/ImageGradient) | Create an imaging pipeline to visualize gradient information.
 [IsoSubsample](/PythonicAPI/ImageProcessing/IsoSubsample) | This figure demonstrates aliasing that occurs when a high-frequency signal is subsampled. High frequencies appear as low frequency artifacts. The left image is an isosurface of a skull after subsampling. The right image used a low-pass filter before subsampling to reduce aliasing.
 [MorphologyComparison](/PythonicAPI/ImageProcessing/MorphologyComparison) | This figure demonstrates various binary filters that can alter the shape of segmented regions.
diff --git a/src/PythonicAPI/ImageData/VoxelsOnBoundary.md b/src/PythonicAPI/ImageData/VoxelsOnBoundary.md
new file mode 100644
index 0000000000000000000000000000000000000000..8ac290acdf193f3e93d53589f256fd8c06ea6bd4
--- /dev/null
+++ b/src/PythonicAPI/ImageData/VoxelsOnBoundary.md
@@ -0,0 +1,8 @@
+### Description
+
+This example uses vtkMultiThreshold to extract voxels that are inside an isosurface and on the boundary of the isosurface. The result is a vtkUnstructuredGrid for each set of voxels. Before processing, vtkImageShrink3D reduces the resolution by a factor of 4.
+
+Compare these results with [MedicalDemo1](../../Medical/MedicalDemo1) that extracts the surface using vtkFlyingEdges3D or vtkMarchingCubes to extract an interpolated isosurface.
+
+!!! info
+    The example uses `src/Testing/Data/FullHead.mhd` which references `src/Testing/Data/FullHead.raw.gz`.
diff --git a/src/PythonicAPI/ImageData/VoxelsOnBoundary.py b/src/PythonicAPI/ImageData/VoxelsOnBoundary.py
new file mode 100644
index 0000000000000000000000000000000000000000..b104e5f15c85039c5a44e919defdf7f7e25a7b81
--- /dev/null
+++ b/src/PythonicAPI/ImageData/VoxelsOnBoundary.py
@@ -0,0 +1,136 @@
+# !/usr/bin/env python3
+
+from pathlib import Path
+
+# noinspection PyUnresolvedReferences
+import vtkmodules.vtkInteractionStyle
+# noinspection PyUnresolvedReferences
+import vtkmodules.vtkRenderingOpenGL2
+from vtkmodules.vtkCommonColor import vtkNamedColors
+from vtkmodules.vtkCommonDataModel import (
+    vtkPlane, vtkDataObject
+)
+from vtkmodules.vtkFiltersGeneral import vtkImageDataToPointSet, vtkMultiThreshold
+from vtkmodules.vtkIOImage import vtkImageReader2Factory
+from vtkmodules.vtkImagingCore import vtkImageShrink3D
+from vtkmodules.vtkRenderingCore import (
+    vtkActor,
+    vtkDataSetMapper,
+    vtkRenderer,
+    vtkRenderWindow,
+    vtkRenderWindowInteractor,
+)
+
+
+def get_program_parameters():
+    import argparse
+    description = 'VoxelsOnBoundsry.'
+    epilogue = '''
+    '''
+    parser = argparse.ArgumentParser(description=description, epilog=epilogue,
+                                     formatter_class=argparse.RawDescriptionHelpFormatter)
+    parser.add_argument('filename', help='The file to use e.g. FullHead.mhd.')
+    args = parser.parse_args()
+    return args.filename
+
+
+def main():
+    fn = get_program_parameters()
+    fp = Path(fn)
+    file_check = True
+    if not fp.is_file():
+        print(f'Missing image file: {fp}.')
+        file_check = False
+    if not file_check:
+        return
+
+    colors = vtkNamedColors()
+
+    # Read the image.
+    reader: vtkImageReader2Factory = vtkImageReader2Factory().CreateImageReader2(str(fp))
+    reader.file_name = fp
+    # Can use this instead.
+    # reader = vtkMetaImageReader(file_name=fp)
+    reader.update()
+
+    shrink = vtkImageShrink3D(shrink_factors=(4, 4, 4))
+    reader >> shrink
+    shrink.update()
+
+    # Create a PointSet from the ImageData.
+    image_data_to_point_set = vtkImageDataToPointSet()
+    reader >> image_data_to_point_set
+    shrink >> image_data_to_point_set
+
+    # Extract voxels on the border between the inside and outside.
+    threshold = vtkMultiThreshold(input_data=image_data_to_point_set.update().output)
+    # Inside points have one or more points above the isosurface.
+    inside_id = threshold.AddIntervalSet(501, 20000, vtkMultiThreshold.CLOSED, vtkMultiThreshold.CLOSED,
+                                         vtkDataObject.FIELD_ASSOCIATION_POINTS, 'ImageScalars', 0, 0)
+    # Border points have points that straddle the boundary
+    border_id = threshold.AddIntervalSet(499.9999, 501.0000, vtkMultiThreshold.OPEN, vtkMultiThreshold.OPEN,
+                                         vtkDataObject.FIELD_ASSOCIATION_POINTS, 'ImageScalars', 0, 0)
+
+    # Select the intervals to be output
+    threshold.OutputSet(inside_id)
+    threshold.OutputSet(border_id)
+    threshold.Update()
+
+    # Visualize
+    colors = vtkNamedColors()
+    # outsideColor    = colors.GetColor3d('Crimson')
+    inside_color = colors.GetColor3d('Banana')
+    border_color = colors.GetColor3d('Mint')
+    # surfaceColor    = colors.GetColor3d('Peacock')
+    background_color = colors.GetColor3d('Silver')
+
+    input_data_inside = threshold.output.GetBlock(inside_id).GetBlock(0)
+    input_data_border = threshold.output.GetBlock(border_id).GetBlock(0)
+
+    normal = (1.0, -1.0, -1.0)
+    origin = input_data_inside.GetCenter()
+    plane = vtkPlane(origin=origin, normal=normal)
+
+    # Inside
+    inside_mapper = vtkDataSetMapper(input_data=input_data_inside, scalar_visibility=False)
+
+    inside_actor = vtkActor(mapper=inside_mapper)
+    inside_actor.property.diffuse_color = inside_color
+    inside_actor.property.specular = 0.6
+    inside_actor.property.specular_power = 30
+    inside_actor.property.edge_visibility = True
+
+    # Border
+    border_mapper = vtkDataSetMapper(input_data=input_data_border, scalar_visibility=False)
+
+    border_actor = vtkActor(mapper=border_mapper)
+    border_actor.property.diffuse_color = border_color
+    border_actor.property.specular = 0.6
+    border_actor.property.specular_power = 30
+    border_actor.property.edge_visibility = True
+
+    renderer = vtkRenderer(use_hidden_line_removal=True, background=background_color)
+    render_window = vtkRenderWindow(size=(640, 480), window_name='CellsOnBoundary')
+    render_window.AddRenderer(renderer)
+
+    render_window_interactor = vtkRenderWindowInteractor()
+    render_window_interactor.render_window = render_window
+    renderer.AddActor(inside_actor)
+    renderer.AddActor(border_actor)
+
+    render_window.Render()
+
+    # Set up a good view.
+    renderer.active_camera.view_up = (0, 0, -1)
+    renderer.active_camera.position = (0, -1, 0)
+    renderer.active_camera.focal_point = (0, 0, 0)
+    renderer.active_camera.Azimuth(30.0)
+    renderer.active_camera.Elevation(30.0)
+    renderer.ResetCamera()
+    renderer.active_camera.Dolly(1.5)
+
+    render_window_interactor.Start()
+
+
+if __name__ == '__main__':
+    main()
diff --git a/src/PythonicAPI/Images/ImageContinuousDilate3D.py b/src/PythonicAPI/Images/ImageContinuousDilate3D.py
index e7be1d12050a9f5f2e94c2588c5b1b3e28662881..c064ac8cb38f54dbcefb2704a49bef3aab6a5ff4 100644
--- a/src/PythonicAPI/Images/ImageContinuousDilate3D.py
+++ b/src/PythonicAPI/Images/ImageContinuousDilate3D.py
@@ -52,7 +52,7 @@ def main():
         draw_color1 = colors.GetColor3ub('Black')
         draw_color2 = colors.GetColor3ub('White')
 
-        # Create an image
+        # Create an image.
         source = vtkImageCanvasSource2D(extent=(0, 200, 0, 200, 0, 0))
         source.SetScalarTypeToUnsignedChar()
         source.draw_color = tuple(draw_color1)
diff --git a/src/PythonicAPI/Images/ImageContinuousErode3D.py b/src/PythonicAPI/Images/ImageContinuousErode3D.py
new file mode 100644
index 0000000000000000000000000000000000000000..3d914bccae043aa97432ac79b5052e137d26e121
--- /dev/null
+++ b/src/PythonicAPI/Images/ImageContinuousErode3D.py
@@ -0,0 +1,106 @@
+#!/usr/bin/env python3
+
+from pathlib import Path
+
+# noinspection PyUnresolvedReferences
+import vtkmodules.vtkInteractionStyle
+# noinspection PyUnresolvedReferences
+import vtkmodules.vtkRenderingOpenGL2
+from vtkmodules.vtkCommonColor import vtkNamedColors
+from vtkmodules.vtkCommonDataModel import vtkImageData
+from vtkmodules.vtkIOImage import vtkPNGReader
+from vtkmodules.vtkImagingMorphological import vtkImageContinuousErode3D
+from vtkmodules.vtkImagingSources import vtkImageCanvasSource2D
+from vtkmodules.vtkRenderingCore import (
+    vtkActor,
+    vtkDataSetMapper,
+    vtkRenderer,
+    vtkRenderWindow,
+    vtkRenderWindowInteractor
+)
+
+
+def get_program_parameters():
+    import argparse
+    description = 'ImageContinuousErode3D.'
+    epilogue = '''
+    '''
+    parser = argparse.ArgumentParser(description=description, epilog=epilogue,
+                                     formatter_class=argparse.RawDescriptionHelpFormatter)
+    parser.add_argument('file_name', nargs='?', default=None, help='The image file name to use e.g. Gourds.png.')
+    args = parser.parse_args()
+    return args.file_name
+
+
+def main():
+    fn = get_program_parameters()
+    fp = None
+    if fn:
+        fp = Path(fn)
+        file_check = True
+        if not fp.is_file():
+            print(f'Missing image file: {fp}.')
+            file_check = False
+        if not file_check:
+            return
+
+    colors = vtkNamedColors()
+
+    image = vtkImageData()
+
+    if not fp:
+        draw_color1 = colors.GetColor3ub('Black')
+        draw_color2 = colors.GetColor3ub('White')
+
+        # Create an image.
+        source = vtkImageCanvasSource2D(extent=(0, 200, 0, 200, 0, 0))
+        source.SetScalarTypeToUnsignedChar()
+        source.draw_color = tuple(draw_color1)
+        source.FillBox(0, 200, 0, 200)
+        source.draw_color = tuple(draw_color2)
+        source.FillBox(100, 150, 100, 150)
+        source.update()
+        image.ShallowCopy(source.output)
+    else:
+        reader = vtkPNGReader(file_name=fp)
+        reader.update()
+        image.ShallowCopy(reader.output)
+
+    erode_filter = vtkImageContinuousErode3D(input_data=image, kernel_size=(10, 10, 1))
+
+    original_mapper = vtkDataSetMapper(input_data=image)
+
+    original_actor = vtkActor(mapper=original_mapper)
+
+    eroded_mapper = vtkDataSetMapper()
+    erode_filter >> eroded_mapper
+
+    eroded_actor = vtkActor(mapper=eroded_mapper)
+
+    # Visualize
+    left_viewport = (0.0, 0.0, 0.5, 1.0)
+    right_viewport = (0.5, 0.0, 1.0, 1.0)
+
+    render_window = vtkRenderWindow(size=(600, 300), window_name='ImageContinuousErode3D')
+
+    interactor = vtkRenderWindowInteractor()
+    interactor.render_window = render_window
+
+    left_renderer = vtkRenderer(viewport=left_viewport, background=colors.GetColor3d('Sienna'))
+    render_window.AddRenderer(left_renderer)
+
+    right_renderer = vtkRenderer(viewport=right_viewport, background=colors.GetColor3d('RoyalBlue'))
+    render_window.AddRenderer(right_renderer)
+
+    left_renderer.AddActor(original_actor)
+    right_renderer.AddActor(eroded_actor)
+
+    left_renderer.ResetCamera()
+    right_renderer.active_camera = left_renderer.active_camera
+
+    render_window.Render()
+    interactor.Start()
+
+
+if __name__ == '__main__':
+    main()
diff --git a/src/PythonicAPI/Images/ImageConvolve.py b/src/PythonicAPI/Images/ImageConvolve.py
new file mode 100644
index 0000000000000000000000000000000000000000..745f14ba2f9694e8197e4d86d82ffc9d90e3d6e0
--- /dev/null
+++ b/src/PythonicAPI/Images/ImageConvolve.py
@@ -0,0 +1,72 @@
+#!/usr/bin/env python3
+
+# noinspection PyUnresolvedReferences
+import vtkmodules.vtkInteractionStyle
+# noinspection PyUnresolvedReferences
+import vtkmodules.vtkRenderingOpenGL2
+from vtkmodules.vtkCommonColor import vtkNamedColors
+from vtkmodules.vtkImagingCore import vtkImageCast
+from vtkmodules.vtkImagingGeneral import vtkImageConvolve
+from vtkmodules.vtkImagingSources import vtkImageMandelbrotSource
+from vtkmodules.vtkInteractionStyle import vtkInteractorStyleImage
+from vtkmodules.vtkRenderingCore import (
+    vtkRenderer,
+    vtkRenderWindow,
+    vtkRenderWindowInteractor, vtkImageActor
+)
+
+
+def main():
+    colors = vtkNamedColors()
+
+    # Create an image.
+    source = vtkImageMandelbrotSource()
+
+    original_cast_filter = vtkImageCast()
+    original_cast_filter.SetOutputScalarTypeToUnsignedChar()
+
+    kernel = [1] * 9
+    convolve_filter = vtkImageConvolve(kernel3x3=kernel)
+    convolve_filter.SetKernel3x3(kernel)
+
+    convolved_cast_filter = vtkImageCast()
+    convolved_cast_filter.SetOutputScalarTypeToUnsignedChar()
+
+    # Create an actor
+    original_actor = vtkImageActor()
+    source >> original_cast_filter >> original_actor.mapper
+
+    convolved_actor = vtkImageActor()
+    source >> convolve_filter >> convolved_cast_filter >> convolved_actor.mapper
+
+    # Define viewport ranges (x_min, y_min, x_max, y_max).
+    left_viewport = (0.0, 0.0, 0.5, 1.0)
+    right_viewport = (0.5, 0.0, 1.0, 1.0)
+
+    # Setup renderer
+    original_renderer = vtkRenderer(viewport=left_viewport, background=colors.GetColor3d('Sienna'))
+    original_renderer.AddActor(original_actor)
+
+    convolved_renderer = vtkRenderer(viewport=right_viewport, background=colors.GetColor3d('RoyalBlue'))
+    convolved_renderer.AddActor(convolved_actor)
+
+    # Setup the render window.
+    render_window = vtkRenderWindow(size=(600, 300), window_name='ImageConvolve')
+    render_window.AddRenderer(original_renderer)
+    render_window.AddRenderer(convolved_renderer)
+
+    # Setup the render window interactor.
+    render_window_interactor = vtkRenderWindowInteractor()
+    style = vtkInteractorStyleImage()
+    render_window_interactor.interactor_style = style
+
+    # Render and start the interaction.
+    render_window_interactor.render_window = render_window
+    render_window.Render()
+    render_window_interactor.Initialize()
+
+    render_window_interactor.Start()
+
+
+if __name__ == '__main__':
+    main()
diff --git a/src/PythonicAPI/Images/ImageCorrelation.py b/src/PythonicAPI/Images/ImageCorrelation.py
new file mode 100644
index 0000000000000000000000000000000000000000..6ef849986545e1d87005e84203ad2767235bac4d
--- /dev/null
+++ b/src/PythonicAPI/Images/ImageCorrelation.py
@@ -0,0 +1,112 @@
+#!/usr/bin/env python3
+
+# noinspection PyUnresolvedReferences
+import vtkmodules.vtkInteractionStyle
+# noinspection PyUnresolvedReferences
+import vtkmodules.vtkRenderingOpenGL2
+from vtkmodules.util.execution_model import select_ports
+from vtkmodules.vtkCommonColor import vtkNamedColors
+from vtkmodules.vtkImagingCore import vtkImageCast, vtkImageShiftScale
+from vtkmodules.vtkImagingGeneral import vtkImageCorrelation
+from vtkmodules.vtkImagingSources import vtkImageCanvasSource2D
+from vtkmodules.vtkInteractionStyle import vtkInteractorStyleImage
+from vtkmodules.vtkRenderingCore import (
+    vtkImageActor,
+    vtkRenderer,
+    vtkRenderWindow,
+    vtkRenderWindowInteractor
+)
+
+
+def main():
+    colors = vtkNamedColors()
+
+    # Create an image.
+    draw_color1 = colors.GetColor3ub('Black')
+    draw_color2 = colors.GetColor3ub('Wheat')
+
+    image_source = vtkImageCanvasSource2D(extent=(0, 300, 0, 300, 0, 0), number_of_scalar_components=3)
+    image_source.SetScalarTypeToUnsignedChar()
+    image_source.draw_color = tuple(draw_color1)
+    image_source.FillBox(0, 300, 0, 300)
+    image_source.draw_color = tuple(draw_color2)
+    image_source.FillTriangle(10, 100, 190, 150, 40, 250)
+    image_source.update()
+
+    # Create an actor.
+    original_actor = vtkImageActor()
+    image_source >> original_actor.mapper
+
+    # Create a kernel.
+    kernel_source = vtkImageCanvasSource2D(extent=(0, 30, 0, 30, 0, 0), number_of_scalar_components=3)
+    kernel_source.SetScalarTypeToUnsignedChar()
+    kernel_source.draw_color = tuple(draw_color1)
+    kernel_source.FillBox(0, 30, 0, 30)
+    kernel_source.draw_color = tuple(draw_color2)
+    kernel_source.FillTriangle(10, 1, 25, 10, 1, 5)
+    kernel_source.Update()
+
+    # Create an actor.
+    kernel_actor = vtkImageActor()
+    kernel_source >> kernel_actor.mapper
+
+    # Compute the correlation.
+    correlation_filter = vtkImageCorrelation()
+    image_source >> select_ports(0, correlation_filter)
+    kernel_source >> select_ports(1, correlation_filter)
+    correlation_filter.update()
+
+    # At this point, corr pixels are doubles so, get the scalar range.
+    corr = correlation_filter.output
+    corr_range = corr.point_data.scalars.range
+    scale = 255 / corr_range[1]
+
+    # Rescale the correlation filter output. Note that it implies that
+    # minimum correlation is always zero.
+    image_scale = vtkImageShiftScale(scale=scale)
+    image_scale.SetInputConnection(correlation_filter.GetOutputPort())
+    image_scale.SetOutputScalarTypeToUnsignedChar()
+
+    correlation_cast_filter = vtkImageCast()
+    correlation_cast_filter.SetOutputScalarTypeToUnsignedChar()
+
+    # Create an actor.
+    correlation_actor = vtkImageActor()
+    correlation_filter >> image_scale >> correlation_cast_filter >> correlation_actor.mapper
+
+    # Define viewport ranges (x_min, y_min, x_max, y_max).
+    original_viewport = (0.0, 0.0, 0.33, 1.0)
+    kernel_viewport = (0.33, 0.0, 0.66, 1.0)
+    correlation_viewport = (0.66, 0.0, 1.0, 1.0)
+
+    # Setup the renderers.
+    original_renderer = vtkRenderer(viewport=original_viewport, background=colors.GetColor3d('Mint'))
+    original_renderer.AddActor(original_actor)
+
+    kernel_renderer = vtkRenderer(viewport=kernel_viewport, background=colors.GetColor3d('Mint'))
+    kernel_renderer.AddActor(kernel_actor)
+
+    correlation_renderer = vtkRenderer(viewport=correlation_viewport, background=colors.GetColor3d('Peacock'))
+    correlation_renderer.AddActor(correlation_actor)
+
+    # Set up the render window.
+    render_window = vtkRenderWindow(size=(900, 300), window_name='ImageCorrelation')
+    render_window.AddRenderer(original_renderer)
+    render_window.AddRenderer(kernel_renderer)
+    render_window.AddRenderer(correlation_renderer)
+
+    # Set up the render window interactor.
+    render_window_interactor = vtkRenderWindowInteractor()
+    style = vtkInteractorStyleImage()
+    render_window_interactor.interactor_style = style
+
+    # Render and start the interaction.
+    render_window_interactor.render_window = render_window
+    render_window.Render()
+    render_window_interactor.Initialize()
+
+    render_window_interactor.Start()
+
+
+if __name__ == '__main__':
+    main()
diff --git a/src/Testing/Baseline/PythonicAPI/ImageData/TestVoxelsOnBoundary.png b/src/Testing/Baseline/PythonicAPI/ImageData/TestVoxelsOnBoundary.png
new file mode 100644
index 0000000000000000000000000000000000000000..4b4e8658a1e7b11c363ec0b61eeca400353d3343
--- /dev/null
+++ b/src/Testing/Baseline/PythonicAPI/ImageData/TestVoxelsOnBoundary.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f22daad092c6e5aaa43cc606e6b4de851496967efbcf476184601684883d5fe3
+size 45926
diff --git a/src/Testing/Baseline/PythonicAPI/Images/TestImageContinuousErode3D.png b/src/Testing/Baseline/PythonicAPI/Images/TestImageContinuousErode3D.png
new file mode 100644
index 0000000000000000000000000000000000000000..a2bd30f3b663d7eb8b5ddade6866a0a8c6a84121
--- /dev/null
+++ b/src/Testing/Baseline/PythonicAPI/Images/TestImageContinuousErode3D.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:47943f2b677cb3d71ee06aef6da97f20c4d9c9c8e88b8571d29c64a3e53179ff
+size 160403
diff --git a/src/Testing/Baseline/PythonicAPI/Images/TestImageConvolve.png b/src/Testing/Baseline/PythonicAPI/Images/TestImageConvolve.png
new file mode 100644
index 0000000000000000000000000000000000000000..99dfb404d02602acf36565bdda844672255159ce
--- /dev/null
+++ b/src/Testing/Baseline/PythonicAPI/Images/TestImageConvolve.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:259c10132177604b36dfce7a94a83622f5b47607648280b79ded2343b0bcd535
+size 42764
diff --git a/src/Testing/Baseline/PythonicAPI/Images/TestImageCorrelation.png b/src/Testing/Baseline/PythonicAPI/Images/TestImageCorrelation.png
new file mode 100644
index 0000000000000000000000000000000000000000..585318ee366a3205e9da929ad35eb84da4b1850f
--- /dev/null
+++ b/src/Testing/Baseline/PythonicAPI/Images/TestImageCorrelation.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f0f3daf52941bde667b37cad5bc100367595fde7fbd0e6a7d5c7839878ce4ed5
+size 13647