Image testing framework in vtkTesting has a new opt-in backend#
Overview#
The VTK image testing framework has been enhanced to incorporate the Structural Similarity Index (SSIM) metric on the Lab color space. This contribution provides an opt-in feature to ensure that projects dependent on VTK do not encounter broken tests when updating.
SSIM Metric#
Definition#
The Structural Similarity Index (SSIM) is a metric introduced in the paper titled “Image Quality Assessment: From Error Visibility to Structural Similarity” by Wang et al. It measures the “structural correlation” between two images, providing a comprehensive evaluation of their similarity.
Computation#
In this implementation, SSIM is computed per pixel around a patch in the Lab color space. The Lab color space is chosen for its perceptual uniformity, ensuring that differences in color are consistent with human perception.
The SSIM metric produces a value between 0 and 1, where 1 indicates perfect structural similarity between the images, and 0 indicates no similarity. Domain of Output
The output of SSIM metric ranges from 0 to 1, where 1 indicates perfect similarity, and 0 indicates no similarity.
Integration#
Users can enable this feature by defining the CMake variable DEFAULT_USE_SSIM_IMAGE_COMP as true. When turned on, SSIM will be used by default.
Configuration
There are three ways to use the SSIM metric when setting a test:
TIGHT_VALID (Default)#
Uses Euclidean metrics (L2 and 2-Wasserstein) on each channel. Computes the maximum discrepancy (from 0 to 1). Recommended for images sensitive to outliers. Default threshold is around 0.05.
LOOSE_VALID#
Uses both Manhattan distance and Earth-mover’s distance on each channel. Less sensitive to outliers. Suitable for images dependent on graphics drivers or containing text. Default threshold is recommended.
LEGACY_VALID#
Uses the old metric (not recommended). For compatibility with previous testing methods.
Example:#
vtk_add_test_cxx(myModuleCxxTests tests
Test1.cxx, LOOSE_VALID
Test2.cxx # TIGHT_VALID by default
Test3.cxx, LEGACY_VALID)
Manual Configuration#
Tests added without using vtk_add_test* functions can still change the metric using set_tests_properties:
Use set_tests_properties to set the environment variables.
Set VTK_TESTING_IMAGE_COMPARE_METHOD to one of the following values: TIGHT_VALID, LOOSE_VALID, or LEGACY_VALID.
Example:#
set_tests_properties(Test1 PROPERTIES ENVIRONMENT "VTK_TESTING=1;VTK_TESTING_IMAGE_COMPARE_METHOD=LOOSE_VALID")
Migration
It is advised to migrate to the new SSIM metric within a reasonable time frame. The new metric is more selective and results in fewer false negatives compared to the legacy method.