diff --git a/src/Cxx/Images/RGBToYIQ.cxx b/src/Cxx/Images/RGBToYIQ.cxx
index afd499cbeea000c0529d5e37f924051dedbd094c..ae1d08c811178cbdf3b5d975875fad87d88aa5e8 100644
--- a/src/Cxx/Images/RGBToYIQ.cxx
+++ b/src/Cxx/Images/RGBToYIQ.cxx
@@ -1,5 +1,6 @@
 #include <vtkCamera.h>
 #include <vtkImageActor.h>
+#include <vtkImageCast.h>
 #include <vtkImageExtractComponents.h>
 #include <vtkImageMapper3D.h>
 #include <vtkImageRGBToYIQ.h>
@@ -30,8 +31,13 @@ int main(int argc, char* argv[])
   reader.TakeReference(readerFactory->CreateImageReader2(argv[1]));
   reader->SetFileName(argv[1]);
 
+  //  Convert data to float for conversion (YIQ is signed).
+  vtkNew<vtkImageCast> cast;
+  cast->SetInputConnection(reader->GetOutputPort());
+  cast->SetOutputScalarTypeToFloat();
+
   vtkNew<vtkImageRGBToYIQ> yiqFilter;
-  yiqFilter->SetInputConnection(reader->GetOutputPort());
+  yiqFilter->SetInputConnection(cast->GetOutputPort());
 
   vtkNew<vtkImageExtractComponents> extractYFilter;
   extractYFilter->SetInputConnection(yiqFilter->GetOutputPort());
diff --git a/src/PythonicAPI.md b/src/PythonicAPI.md
index 8022658fffa022bc3bfeb88eb844f59330eff4d5..4dacbc575eb6b81c6b9d55565b584ca6ab340dd7 100644
--- a/src/PythonicAPI.md
+++ b/src/PythonicAPI.md
@@ -613,6 +613,7 @@ See [this tutorial](http://www.vtk.org/Wiki/VTK/Tutorials/3DDataTypes) for a bri
 [ImageNonMaximumSuppression](/PythonicAPI/Images/ImageNonMaximumSuppression) | Find peaks in an image using non maximum suppression.
 [ImageOpenClose3D](/PythonicAPI/Images/ImageOpenClose3D) | Open or close (morphologically) an image.
 [ImageOrientation](/PythonicAPI/Images/ImageOrientation) | Reorder the axes of the image.
+[ImageToPolyDataFilter](/PythonicAPI/Images/ImageToPolyDataFilter) | Convert a vtkImageData to a vtkPolyData.
 [MarkKeypoints](/PythonicAPI/Images/MarkKeypoints) | Mark keypoints in an image.
 
 
@@ -641,6 +642,9 @@ See [this tutorial](http://www.vtk.org/Wiki/VTK/Tutorials/3DDataTypes) for a bri
 [MorphologyComparison](/PythonicAPI/ImageProcessing/MorphologyComparison) | This figure demonstrates various binary filters that can alter the shape of segmented regions.
 [ImageWarp](/PythonicAPI/Images/ImageWarp) | Combine the imaging and visualization pipelines to deform an image in the z-direction. The vtkMergeFilter is used to combine the warped surface with the original color data.
 [Pad](/PythonicAPI/ImageProcessing/Pad) | Convolution in frequency space treats the image as a periodic function. A large kernel can pick up features from both sides of the image. The left image has been padded with a constant to eliminate wraparound during convolution. On the right, mirror padding has been used to remove artificial edges introduced by borders.
+[RGBToHSI](/PythonicAPI/Images/RGBToHSI) | Convert RGB to HSI.
+[RGBToHSV](/PythonicAPI/Images/RGBToHSV) | Convert RGB to HSV.
+[RGBToYIQ](/PythonicAPI/Images/RGBToYIQ) | Convert RGB to YIQ.
 [VTKSpectrum](/PythonicAPI/ImageProcessing/VTKSpectrum) | The discrete Fourier transform changes an image from the spatial domain into the frequency domain, where each pixel represents a sinusoidal function. This figure shows an image and its power spectrum displayed using a logarithmic transfer function.
 
 ## Widgets
@@ -662,6 +666,7 @@ See [this tutorial](http://www.vtk.org/Wiki/VTK/Tutorials/3DDataTypes) for a bri
 [ContourWidget](/PythonicAPI/Widgets/ContourWidget) | Draw a contour (line) which can be deformed by the user.
 [DistanceWidget](/PythonicAPI/Widgets/DistanceWidget) |
 [HoverWidget](/PythonicAPI/Widgets/HoverWidget) | How to detect a hover.
+[ImagePlaneWidget](/PythonicAPI/Widgets/ImagePlaneWidget) |
 [ImplicitConeWidget](/PythonicAPI/Widgets/ImplicitConeWidget) | An interactive implicit cone widget.
 [ImplicitPlaneWidget2](/PythonicAPI/Widgets/ImplicitPlaneWidget2) | Clip polydata with an implicit plane.
 [PolygonalSurfacePointPlacer](/PythonicAPI/PolyData/PolygonalSurfacePointPlacer) | Used in conjunction with vtkContourWidget to draw curves on a surface.
diff --git a/src/PythonicAPI/Images/ImageOpenClose3D.py b/src/PythonicAPI/Images/ImageOpenClose3D.py
index 80ca130f3cf070911cba0a01b04cb4aa638611a1..69c2f76152af9b850638fe0849ca96b82b9de224 100755
--- a/src/PythonicAPI/Images/ImageOpenClose3D.py
+++ b/src/PythonicAPI/Images/ImageOpenClose3D.py
@@ -7,9 +7,7 @@ import vtkmodules.vtkInteractionStyle
 # noinspection PyUnresolvedReferences
 import vtkmodules.vtkRenderingOpenGL2
 from vtkmodules.vtkCommonColor import vtkNamedColors
-from vtkmodules.vtkIOImage import vtkImageReader2Factory, vtkPNGReader, vtkJPEGReader
-from vtkmodules.vtkImagingCore import vtkImageCast
-from vtkmodules.vtkImagingGeneral import vtkImageCityBlockDistance
+from vtkmodules.vtkIOImage import vtkImageReader2Factory
 from vtkmodules.vtkImagingMorphological import vtkImageOpenClose3D
 from vtkmodules.vtkInteractionStyle import vtkInteractorStyleImage
 from vtkmodules.vtkRenderingCore import (
@@ -53,7 +51,7 @@ def main():
 
     reader.Update()
 
-    open_close = vtkImageOpenClose3D(open_value = 0,close_value = 255,kernel_size = (5, 5, 3),release_data_flag = False)
+    open_close = vtkImageOpenClose3D(open_value=0, close_value=255, kernel_size=(5, 5, 3), release_data_flag=False)
     reader >> open_close
 
     original_actor = vtkImageActor()
diff --git a/src/PythonicAPI/Images/ImageToPolyDataFilter.py b/src/PythonicAPI/Images/ImageToPolyDataFilter.py
new file mode 100755
index 0000000000000000000000000000000000000000..d8fd0dcb175055f734a63965e05895829689ff57
--- /dev/null
+++ b/src/PythonicAPI/Images/ImageToPolyDataFilter.py
@@ -0,0 +1,86 @@
+#!/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.vtkFiltersCore import vtkTriangleFilter
+from vtkmodules.vtkFiltersHybrid import vtkImageToPolyDataFilter
+from vtkmodules.vtkIOImage import vtkImageReader2Factory
+from vtkmodules.vtkImagingColor import vtkImageQuantizeRGBToIndex
+from vtkmodules.vtkRenderingCore import (
+    vtkActor,
+    vtkPolyDataMapper,
+    vtkRenderer,
+    vtkRenderWindow,
+    vtkRenderWindowInteractor
+)
+
+
+def get_program_parameters():
+    import argparse
+    description = 'ImageToPolyDataFilter.'
+    epilogue = '''
+    '''
+    parser = argparse.ArgumentParser(description=description, epilog=epilogue,
+                                     formatter_class=argparse.RawDescriptionHelpFormatter)
+    parser.add_argument('file_name', 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 = 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
+
+    # Alternatively, use vtkPNGReader.
+    # reader = vtkPNGReader(file_name = fp)
+
+    quant = vtkImageQuantizeRGBToIndex(number_of_colors=16)
+
+    i2pd = vtkImageToPolyDataFilter(lookup_table=quant.lookup_table, error=0,
+                                    decimation=True, decimation_error=0.0,
+                                    sub_image_size=25)
+    i2pd.SetColorModeToLUT()
+    i2pd.SetOutputStyleToPolygonalize()
+
+    # Need a triangle filter because the polygons are complex and concave.
+    tf = vtkTriangleFilter()
+
+    mapper = vtkPolyDataMapper()
+    reader >> quant >> i2pd >> tf >> mapper
+
+    actor = vtkActor(mapper=mapper)
+    actor.property.SetRepresentationToWireframe()
+
+    # Visualize
+    renderer = vtkRenderer(background=colors.GetColor3d('DarkSlateGray'))
+    render_window = vtkRenderWindow(size=(300, 250), window_name='ImageToPolyDataFilter')
+    render_window.AddRenderer(renderer)
+    interactor = vtkRenderWindowInteractor()
+    interactor.render_window = render_window
+
+    renderer.AddActor(actor)
+
+    render_window.Render()
+    interactor.Initialize()
+    interactor.Start()
+
+
+if __name__ == '__main__':
+    main()
diff --git a/src/PythonicAPI/Images/RGBToHSI.md b/src/PythonicAPI/Images/RGBToHSI.md
new file mode 100644
index 0000000000000000000000000000000000000000..d8d3b5f64f4b49dafb24098f1e078291091d42d7
--- /dev/null
+++ b/src/PythonicAPI/Images/RGBToHSI.md
@@ -0,0 +1,6 @@
+### Description
+
+Convert RGB channels to HSI channels. See [this article](https://en.wikipedia.org/wiki/HSL_and_HSV) for a description of the HSI colormodel.
+
+!!! seealso
+    [RGBToYIQ](../RGBToYIQ) and [RGBToHSV](../RGBToHSV)
diff --git a/src/PythonicAPI/Images/RGBToHSI.py b/src/PythonicAPI/Images/RGBToHSI.py
new file mode 100755
index 0000000000000000000000000000000000000000..0a753a3a8ca394c693a328e4c83a547043ff9285
--- /dev/null
+++ b/src/PythonicAPI/Images/RGBToHSI.py
@@ -0,0 +1,127 @@
+#!/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.vtkIOImage import vtkImageReader2Factory
+from vtkmodules.vtkImagingColor import vtkImageRGBToHSI
+from vtkmodules.vtkImagingCore import vtkImageExtractComponents
+from vtkmodules.vtkInteractionStyle import vtkInteractorStyleImage
+from vtkmodules.vtkRenderingCore import (
+    vtkCamera,
+    vtkImageActor,
+    vtkRenderer,
+    vtkRenderWindow,
+    vtkRenderWindowInteractor
+)
+
+
+def get_program_parameters():
+    import argparse
+    description = 'RGBToHSI.'
+    epilogue = '''
+    '''
+    parser = argparse.ArgumentParser(description=description, epilog=epilogue,
+                                     formatter_class=argparse.RawDescriptionHelpFormatter)
+    parser.add_argument('file_name', help='The image file name to use e.g. Gourds2.jpg.')
+    args = parser.parse_args()
+    return args.file_name
+
+
+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
+
+    # Alternatively, use vtkPNGReader.
+    # reader = vtkJPEGReader(file_name = fp)
+
+    hsi_filter = vtkImageRGBToHSI()
+    reader >> hsi_filter
+
+    extract_h_filter = vtkImageExtractComponents(components=0)
+    hsi_filter >> extract_h_filter
+
+    extract_s_filter = vtkImageExtractComponents(components=1)
+    hsi_filter >> extract_s_filter
+
+    extract_i_filter = vtkImageExtractComponents(components=2)
+    hsi_filter >> extract_i_filter
+
+    # Create the actors.
+    input_actor = vtkImageActor()
+    reader >> input_actor.mapper
+
+    h_actor = vtkImageActor()
+    extract_h_filter >> h_actor.mapper
+
+    s_actor = vtkImageActor()
+    extract_s_filter >> s_actor.mapper
+
+    i_actor = vtkImageActor()
+    extract_i_filter >> i_actor.mapper
+
+    # Define the viewport ranges.(x_min, y_min, x_max, y_max).
+    input_viewport = (0.0, 0.0, 0.25, 1.0)
+    h_viewport = (0.25, 0.0, 0.5, 1.0)
+    s_viewport = (0.5, 0.0, 0.75, 1.0)
+    i_viewport = (0.75, 0.0, 1.0, 1.0)
+
+    # Shared camera.
+    shared_camera = vtkCamera()
+
+    # Setup renderers.
+    input_renderer = vtkRenderer(viewport=input_viewport, background=colors.GetColor3d('CornflowerBlue'))
+    input_renderer.AddActor(input_actor)
+    input_renderer.active_camera = shared_camera
+
+    h_renderer = vtkRenderer(viewport=h_viewport, background=colors.GetColor3d('MistyRose'))
+    h_renderer.AddActor(h_actor)
+    h_renderer.active_camera = shared_camera
+
+    s_renderer = vtkRenderer(viewport=s_viewport, background=colors.GetColor3d('LavenderBlush'))
+    s_renderer.AddActor(s_actor)
+    s_renderer.active_camera = shared_camera
+
+    i_renderer = vtkRenderer(viewport=i_viewport, background=colors.GetColor3d('Lavender'))
+    i_renderer.AddActor(i_actor)
+    i_renderer.active_camera = shared_camera
+
+    # Setup render window.
+    render_window = vtkRenderWindow(size=(1000, 250), window_name='RGBToHSI')
+    render_window.AddRenderer(input_renderer)
+    render_window.AddRenderer(h_renderer)
+    render_window.AddRenderer(s_renderer)
+    render_window.AddRenderer(i_renderer)
+    input_renderer.ResetCamera()
+
+    # 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/RGBToHSV.md b/src/PythonicAPI/Images/RGBToHSV.md
new file mode 100644
index 0000000000000000000000000000000000000000..69ad716809d002849e18b2fbbaaf31582b333344
--- /dev/null
+++ b/src/PythonicAPI/Images/RGBToHSV.md
@@ -0,0 +1,6 @@
+### Description
+
+Convert RGB channels to HSV channels. See [this article](https://en.wikipedia.org/wiki/HSL_and_HSV) for a description of the RGB colormodel.
+
+!!! seealso
+    [RGBToYIQ](../RGBToYIQ) and [RGBToHSI](../RGBToHSI)
diff --git a/src/PythonicAPI/Images/RGBToHSV.py b/src/PythonicAPI/Images/RGBToHSV.py
new file mode 100755
index 0000000000000000000000000000000000000000..d5ec06f70fc8234f9a72b3dfa35d5cfddd30c751
--- /dev/null
+++ b/src/PythonicAPI/Images/RGBToHSV.py
@@ -0,0 +1,127 @@
+#!/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.vtkIOImage import vtkImageReader2Factory
+from vtkmodules.vtkImagingColor import vtkImageRGBToHSV
+from vtkmodules.vtkImagingCore import vtkImageExtractComponents
+from vtkmodules.vtkInteractionStyle import vtkInteractorStyleImage
+from vtkmodules.vtkRenderingCore import (
+    vtkCamera,
+    vtkImageActor,
+    vtkRenderer,
+    vtkRenderWindow,
+    vtkRenderWindowInteractor
+)
+
+
+def get_program_parameters():
+    import argparse
+    description = 'RGBToHSV.'
+    epilogue = '''
+    '''
+    parser = argparse.ArgumentParser(description=description, epilog=epilogue,
+                                     formatter_class=argparse.RawDescriptionHelpFormatter)
+    parser.add_argument('file_name', 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 = 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
+
+    # Alternatively, use vtkPNGReader.
+    # reader = vtkPNGReader(file_name = fp)
+
+    hsv_filter = vtkImageRGBToHSV()
+    reader >> hsv_filter
+
+    extract_hue_filter = vtkImageExtractComponents(components=0)
+    hsv_filter >> extract_hue_filter
+
+    extract_saturation_filter = vtkImageExtractComponents(components=1)
+    hsv_filter >> extract_saturation_filter
+
+    extract_value_filter = vtkImageExtractComponents(components=2)
+    hsv_filter >> extract_value_filter
+
+    # Create the actors.
+    input_actor = vtkImageActor()
+    reader >> input_actor.mapper
+
+    h_actor = vtkImageActor()
+    extract_hue_filter >> h_actor.mapper
+
+    s_actor = vtkImageActor()
+    extract_saturation_filter >> s_actor.mapper
+
+    i_actor = vtkImageActor()
+    extract_value_filter >> i_actor.mapper
+
+    # Define the viewport ranges.(x_min, y_min, x_max, y_max).
+    input_viewport = (0.0, 0.0, 0.25, 1.0)
+    h_viewport = (0.25, 0.0, 0.5, 1.0)
+    s_viewport = (0.5, 0.0, 0.75, 1.0)
+    v_viewport = (0.75, 0.0, 1.0, 1.0)
+
+    # Shared camera.
+    shared_camera = vtkCamera()
+
+    # Setup renderers.
+    input_renderer = vtkRenderer(viewport=input_viewport, background=colors.GetColor3d('CornflowerBlue'))
+    input_renderer.AddActor(input_actor)
+    input_renderer.active_camera = shared_camera
+
+    h_renderer = vtkRenderer(viewport=h_viewport, background=colors.GetColor3d('MistyRose'))
+    h_renderer.AddActor(h_actor)
+    h_renderer.active_camera = shared_camera
+
+    v_renderer = vtkRenderer(viewport=s_viewport, background=colors.GetColor3d('LavenderBlush'))
+    v_renderer.AddActor(s_actor)
+    v_renderer.active_camera = shared_camera
+
+    i_renderer = vtkRenderer(viewport=v_viewport, background=colors.GetColor3d('Lavender'))
+    i_renderer.AddActor(i_actor)
+    i_renderer.active_camera = shared_camera
+
+    # Setup render window.
+    render_window = vtkRenderWindow(size=(1000, 250), window_name='RGBToHSV')
+    render_window.AddRenderer(input_renderer)
+    render_window.AddRenderer(h_renderer)
+    render_window.AddRenderer(v_renderer)
+    render_window.AddRenderer(i_renderer)
+    input_renderer.ResetCamera()
+
+    # 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/RGBToYIQ.md b/src/PythonicAPI/Images/RGBToYIQ.md
new file mode 100644
index 0000000000000000000000000000000000000000..7da79252d6fba1114c3399f55cbb04681e5956cd
--- /dev/null
+++ b/src/PythonicAPI/Images/RGBToYIQ.md
@@ -0,0 +1,6 @@
+### Description
+
+Convert RGB channels to YIQ channels. See [this article](https://en.wikipedia.org/wiki/YIQ) for a description of the YIQ colormodel.
+
+!!! seealso
+    [RGBToHSV](../RGBToHSV) and [RGBToHSI](../RGBToHSI)
diff --git a/src/PythonicAPI/Images/RGBToYIQ.py b/src/PythonicAPI/Images/RGBToYIQ.py
new file mode 100755
index 0000000000000000000000000000000000000000..e42c296f02abba9551b63ce27586b2c34ecba5e2
--- /dev/null
+++ b/src/PythonicAPI/Images/RGBToYIQ.py
@@ -0,0 +1,131 @@
+#!/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.vtkIOImage import vtkImageReader2Factory
+from vtkmodules.vtkImagingColor import vtkImageRGBToYIQ
+from vtkmodules.vtkImagingCore import vtkImageExtractComponents, vtkImageCast
+from vtkmodules.vtkInteractionStyle import vtkInteractorStyleImage
+from vtkmodules.vtkRenderingCore import (
+    vtkCamera,
+    vtkImageActor,
+    vtkRenderer,
+    vtkRenderWindow,
+    vtkRenderWindowInteractor
+)
+
+
+def get_program_parameters():
+    import argparse
+    description = 'RGBToYIQ.'
+    epilogue = '''
+    '''
+    parser = argparse.ArgumentParser(description=description, epilog=epilogue,
+                                     formatter_class=argparse.RawDescriptionHelpFormatter)
+    parser.add_argument('file_name', 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 = 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
+
+    # Alternatively, use vtkPNGReader.
+    # reader = vtkPNGReader(file_name = fp)
+
+    # Convert data to float for conversion (YIQ is signed).
+    cast = vtkImageCast()
+    cast.SetOutputScalarTypeToFloat()
+
+    yiq_filter = vtkImageRGBToYIQ()
+    reader >> cast >> yiq_filter
+
+    extract_y_filter = vtkImageExtractComponents(components=0)
+    yiq_filter >> extract_y_filter
+
+    extract_i_filter = vtkImageExtractComponents(components=1)
+    yiq_filter >> extract_i_filter
+
+    extract_q_filter = vtkImageExtractComponents(components=2)
+    yiq_filter >> extract_q_filter
+
+    # Create the actors.
+    input_actor = vtkImageActor()
+    reader >> input_actor.mapper
+
+    y_actor = vtkImageActor()
+    extract_y_filter >> y_actor.mapper
+
+    i_actor = vtkImageActor()
+    extract_i_filter >> i_actor.mapper
+
+    q_actor = vtkImageActor()
+    extract_q_filter >> q_actor.mapper
+
+    # Define the viewport ranges.(x_min, y_min, x_max, y_max).
+    input_viewport = (0.0, 0.0, 0.25, 1.0)
+    y_viewport = (0.25, 0.0, 0.5, 1.0)
+    i_viewport = (0.5, 0.0, 0.75, 1.0)
+    q_viewport = (0.75, 0.0, 1.0, 1.0)
+
+    # Shared camera.
+    shared_camera = vtkCamera()
+
+    # Setup renderers.
+    input_renderer = vtkRenderer(viewport=input_viewport, background=colors.GetColor3d('CornflowerBlue'))
+    input_renderer.AddActor(input_actor)
+    input_renderer.active_camera = shared_camera
+
+    y_renderer = vtkRenderer(viewport=y_viewport, background=colors.GetColor3d('MistyRose'))
+    y_renderer.AddActor(y_actor)
+    y_renderer.active_camera = shared_camera
+
+    i_renderer = vtkRenderer(viewport=i_viewport, background=colors.GetColor3d('LavenderBlush'))
+    i_renderer.AddActor(i_actor)
+    i_renderer.active_camera = shared_camera
+
+    q_renderer = vtkRenderer(viewport=q_viewport, background=colors.GetColor3d('Lavender'))
+    q_renderer.AddActor(q_actor)
+    q_renderer.active_camera = shared_camera
+
+    # Setup render window.
+    render_window = vtkRenderWindow(size=(1000, 250), window_name='RGBToYIQ')
+    render_window.AddRenderer(input_renderer)
+    render_window.AddRenderer(y_renderer)
+    render_window.AddRenderer(i_renderer)
+    render_window.AddRenderer(q_renderer)
+    input_renderer.ResetCamera()
+
+    # 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/Widgets/ImagePlaneWidget.py b/src/PythonicAPI/Widgets/ImagePlaneWidget.py
new file mode 100755
index 0000000000000000000000000000000000000000..400b8572df6cf441fdae3cc5ed570dfd9b9301ee
--- /dev/null
+++ b/src/PythonicAPI/Widgets/ImagePlaneWidget.py
@@ -0,0 +1,72 @@
+#!/usr/bin/env python3
+
+# noinspection PyUnresolvedReferences
+import vtkmodules.vtkInteractionStyle
+# noinspection PyUnresolvedReferences
+import vtkmodules.vtkRenderingFreeType
+# noinspection PyUnresolvedReferences
+import vtkmodules.vtkRenderingOpenGL2
+from vtkmodules.vtkCommonColor import vtkNamedColors
+from vtkmodules.vtkFiltersSources import vtkSphereSource
+from vtkmodules.vtkInteractionStyle import vtkInteractorStyleTrackballCamera
+from vtkmodules.vtkInteractionWidgets import vtkImagePlaneWidget
+from vtkmodules.vtkRenderingCore import (
+    vtkActor,
+    vtkPolyDataMapper,
+    vtkRenderer,
+    vtkRenderWindow,
+    vtkRenderWindowInteractor,
+)
+
+
+def main():
+    colors = vtkNamedColors()
+
+    sphere_source = vtkSphereSource()
+
+    # Create a mapper and actor.
+    mapper = vtkPolyDataMapper()
+    sphere_source >> mapper
+    actor = vtkActor(mapper=mapper)
+    actor.property.color = colors.GetColor3d('MistyRose')
+
+    # A renderer and render window.
+    renderer = vtkRenderer(background=colors.GetColor3d('SlateGray'))
+    render_window = vtkRenderWindow(window_name='ImagePlaneWidget')
+    render_window.AddRenderer(renderer)
+
+    renderer.AddActor(actor)
+
+    # An interactor.
+    render_window_interactor = vtkRenderWindowInteractor()
+    render_window_interactor.render_window = render_window
+
+    # style = vtkInteractorStyleTrackballActor()
+    style = vtkInteractorStyleTrackballCamera()
+
+    render_window_interactor.interactor_style = style
+
+    plane_widget = vtkImagePlaneWidget()
+    plane_widget.interactor = render_window_interactor
+    plane_widget.TextureVisibilityOff()
+
+    origin = (0, 1, 0)
+    plane_widget.origin = origin
+    plane_widget.UpdatePlacement()
+
+    # Render
+    render_window.Render()
+
+    renderer.active_camera.Azimuth(-45)
+    renderer.active_camera.Zoom(0.85)
+
+    render_window_interactor.Initialize()
+    render_window.Render()
+    plane_widget.On()
+
+    # Begin mouse interaction.
+    render_window_interactor.Start()
+
+
+if __name__ == '__main__':
+    main()
diff --git a/src/Testing/Baseline/Cxx/Images/TestImageToPolyDataFilter.png b/src/Testing/Baseline/Cxx/Images/TestImageToPolyDataFilter.png
index 25250fef6f70be35501b25d21cec04d7dbe22cf7..4c4da9a5793fa831e64181cf016a3f4e74434054 100644
--- a/src/Testing/Baseline/Cxx/Images/TestImageToPolyDataFilter.png
+++ b/src/Testing/Baseline/Cxx/Images/TestImageToPolyDataFilter.png
@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
-oid sha256:5ee43b9373f81a109afe431697a66efd7dca89f5f3ebe90d804fd394f7b45a68
-size 59493
+oid sha256:aefa4f67e63fe3d0dbde5851c3edb2cfbb6867843268b45651b4c1cbf608c4c4
+size 59497
diff --git a/src/Testing/Baseline/Cxx/Images/TestRGBToYIQ.png b/src/Testing/Baseline/Cxx/Images/TestRGBToYIQ.png
index a939c1362a83bf789acdfb3c0864a7d87ce2027d..029742d2fbf78b0a06f26411199cf44f67e2287a 100644
--- a/src/Testing/Baseline/Cxx/Images/TestRGBToYIQ.png
+++ b/src/Testing/Baseline/Cxx/Images/TestRGBToYIQ.png
@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
-oid sha256:42be352138181c25eebb80f94e2d4fcd6ab87ab40c6bb11ed2bad8e31fb1d1df
-size 206456
+oid sha256:51cc7a907616c664f5232ae78f08085b7a4b64d85839f6185430ebcec25182ae
+size 159210
diff --git a/src/Testing/Baseline/PythonicAPI/Images/TestImageToPolyDataFilter.png b/src/Testing/Baseline/PythonicAPI/Images/TestImageToPolyDataFilter.png
new file mode 100644
index 0000000000000000000000000000000000000000..4c4da9a5793fa831e64181cf016a3f4e74434054
--- /dev/null
+++ b/src/Testing/Baseline/PythonicAPI/Images/TestImageToPolyDataFilter.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:aefa4f67e63fe3d0dbde5851c3edb2cfbb6867843268b45651b4c1cbf608c4c4
+size 59497
diff --git a/src/Testing/Baseline/PythonicAPI/Images/TestRGBToHSI.png b/src/Testing/Baseline/PythonicAPI/Images/TestRGBToHSI.png
new file mode 100644
index 0000000000000000000000000000000000000000..fef56ee4c29192398f2eeb58dfbc3e332a3778e8
--- /dev/null
+++ b/src/Testing/Baseline/PythonicAPI/Images/TestRGBToHSI.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:64664f65a09538f6ce01c82b5c3b844bc787bdbb70c1c1acfd6af2bf4ed0caaa
+size 232140
diff --git a/src/Testing/Baseline/PythonicAPI/Images/TestRGBToHSV.png b/src/Testing/Baseline/PythonicAPI/Images/TestRGBToHSV.png
new file mode 100644
index 0000000000000000000000000000000000000000..a240ebad33aa58252669329ac5ffa36e43b656bd
--- /dev/null
+++ b/src/Testing/Baseline/PythonicAPI/Images/TestRGBToHSV.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:310ccaf382359edcca0e306fcfa93fcc27ee8cfa6312c0841474da4df73ad07b
+size 236407
diff --git a/src/Testing/Baseline/PythonicAPI/Images/TestRGBToYIQ.png b/src/Testing/Baseline/PythonicAPI/Images/TestRGBToYIQ.png
new file mode 100644
index 0000000000000000000000000000000000000000..029742d2fbf78b0a06f26411199cf44f67e2287a
--- /dev/null
+++ b/src/Testing/Baseline/PythonicAPI/Images/TestRGBToYIQ.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:51cc7a907616c664f5232ae78f08085b7a4b64d85839f6185430ebcec25182ae
+size 159210
diff --git a/src/Testing/Baseline/PythonicAPI/Widgets/TestImagePlaneWidget.png b/src/Testing/Baseline/PythonicAPI/Widgets/TestImagePlaneWidget.png
new file mode 100644
index 0000000000000000000000000000000000000000..2268967003209de4fc936b5df10cc3a81ca86d74
--- /dev/null
+++ b/src/Testing/Baseline/PythonicAPI/Widgets/TestImagePlaneWidget.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f5c1f7544dee8b6d3242f764b919ca7060da44bba46e9a80ea5b67e49f112cbb
+size 16635