Open CASCADE Technology 7.8.2.dev
|
This class compares two images pixel-by-pixel. It uses the following methods to ignore the difference between images: More...
#include <Image_Diff.hxx>
Public Member Functions | |
Image_Diff () | |
An empty constructor. Init() should be called for initialization. | |
virtual | ~Image_Diff () |
Destructor. | |
Standard_Boolean | Init (const Handle< Image_PixMap > &theImageRef, const Handle< Image_PixMap > &theImageNew, const Standard_Boolean theToBlackWhite=Standard_False) |
Initialize algorithm by two images. | |
Standard_Boolean | Init (const TCollection_AsciiString &theImgPathRef, const TCollection_AsciiString &theImgPathNew, const Standard_Boolean theToBlackWhite=Standard_False) |
Initialize algorithm by two images (will be loaded from files). | |
void | SetColorTolerance (const Standard_Real theTolerance) |
Color tolerance for equality check. Should be within range 0..1: Corresponds to a difference between white and black colors (maximum difference). By default, the tolerance is equal to 0 thus equality check will return false for any different colors. | |
Standard_Real | ColorTolerance () const |
Color tolerance for equality check. | |
void | SetBorderFilterOn (const Standard_Boolean theToIgnore) |
Sets taking into account (ignoring) a "border effect" on comparison of images. The border effect is caused by a border of shaded shapes in the viewer 3d. Triangles of this area are located at about 0 or 90 degrees to the user. Therefore, they deflect light differently according to implementation of a video card driver. This flag allows to detect such a "border" area and skip it from comparison of images. Filter turned OFF by default. | |
Standard_Boolean | IsBorderFilterOn () const |
Returns a flag of taking into account (ignoring) a border effect in comparison of images. | |
Standard_Integer | Compare () |
Compares two images. It returns a number of different pixels (or groups of pixels). It returns -1 if algorithm not initialized before. | |
Standard_Boolean | SaveDiffImage (Image_PixMap &theDiffImage) const |
Saves a difference between two images as white pixels on black background. | |
Standard_Boolean | SaveDiffImage (const TCollection_AsciiString &theDiffPath) const |
Saves a difference between two images as white pixels on black background. | |
Public Member Functions inherited from Standard_Transient | |
Standard_Transient () | |
Empty constructor. | |
Standard_Transient (const Standard_Transient &) | |
Copy constructor – does nothing. | |
Standard_Transient & | operator= (const Standard_Transient &) |
Assignment operator, needed to avoid copying reference counter. | |
virtual | ~Standard_Transient () |
Destructor must be virtual. | |
virtual const opencascade::handle< Standard_Type > & | DynamicType () const |
Returns a type descriptor about this object. | |
Standard_Boolean | IsInstance (const opencascade::handle< Standard_Type > &theType) const |
Returns a true value if this is an instance of Type. | |
Standard_Boolean | IsInstance (const Standard_CString theTypeName) const |
Returns a true value if this is an instance of TypeName. | |
Standard_Boolean | IsKind (const opencascade::handle< Standard_Type > &theType) const |
Returns true if this is an instance of Type or an instance of any class that inherits from Type. Note that multiple inheritance is not supported by OCCT RTTI mechanism. | |
Standard_Boolean | IsKind (const Standard_CString theTypeName) const |
Returns true if this is an instance of TypeName or an instance of any class that inherits from TypeName. Note that multiple inheritance is not supported by OCCT RTTI mechanism. | |
Standard_Transient * | This () const |
Returns non-const pointer to this object (like const_cast). For protection against creating handle to objects allocated in stack or call from constructor, it will raise exception Standard_ProgramError if reference counter is zero. | |
Standard_Integer | GetRefCount () const noexcept |
Get the reference counter of this object. | |
void | IncrementRefCounter () noexcept |
Increments the reference counter of this object. | |
Standard_Integer | DecrementRefCounter () noexcept |
Decrements the reference counter of this object; returns the decremented value. | |
virtual void | Delete () const |
Memory deallocator for transient classes. | |
Protected Member Functions | |
Standard_Integer | ignoreBorderEffect () |
Perform border filter algorithm. | |
void | releaseGroupsOfDiffPixels () |
Release dynamically allocated memory. | |
Static Protected Member Functions | |
static Standard_Integer | PackXY (uint16_t theX, uint16_t theY) |
Map two pixel coordinates to 32-bit integer. | |
static uint16_t | UnpackX (Standard_Integer theXY) |
Get pixel X coordinate from 32-bit packed integer. | |
static uint16_t | UnpackY (Standard_Integer theXY) |
Get pixel Y coordinate from 32-bit packed integer. | |
Protected Attributes | |
Handle< Image_PixMap > | myImageRef |
reference image to compare (from) | |
Handle< Image_PixMap > | myImageNew |
new image to compare (to) | |
Standard_Real | myColorTolerance |
tolerance for equality check (0..1, 0 - any not equal, 1 - opposite colors) | |
Standard_Boolean | myIsBorderFilterOn |
perform algorithm with border effect filter | |
NCollection_Vector< Standard_Integer > | myDiffPixels |
coordinates of different pixels, packed in one int using 16-bit integers to save memory | |
TColStd_PackedMapOfInteger | myLinearGroups |
NCollection_List< Handle< TColStd_HPackedMapOfInteger > > | myGroupsOfDiffPixels |
Additional Inherited Members | |
Public Types inherited from Standard_Transient | |
typedef void | base_type |
Returns a type descriptor about this object. | |
Static Public Member Functions inherited from Standard_Transient | |
static constexpr const char * | get_type_name () |
Returns a type descriptor about this object. | |
static const opencascade::handle< Standard_Type > & | get_type_descriptor () |
Returns type descriptor of Standard_Transient class. | |
This class compares two images pixel-by-pixel. It uses the following methods to ignore the difference between images:
Border filter ignores a difference in implementation of anti-aliasing and other effects on boundary of a shape. The triangles of a boundary zone are usually located so that their normals point aside the user (about 90 degree between the normal and the direction to the user's eye). Deflection of the light for such a triangle depends on implementation of the video driver. In order to skip this difference the following algorithm is used: a) "Different" pixels are grouped and checked on "one-pixel width line". indeed, the pixels may represent not a line, but any curve. But the width of this curve should be not more than a pixel. This group of pixels become a candidate to be ignored because of boundary effect. b) The group of pixels is checked on belonging to a "shape". Neighbour pixels are checked from the reference image. This test confirms a fact that the group of pixels belongs to a shape and represent a boundary of the shape. In this case the whole group of pixels is ignored (considered as same). Otherwise, the group of pixels may represent a geometrical curve in the viewer 3D and should be considered as "different".
References:
Image_Diff::Image_Diff | ( | ) |
An empty constructor. Init() should be called for initialization.
|
virtual |
Destructor.
|
inline |
Color tolerance for equality check.
Standard_Integer Image_Diff::Compare | ( | ) |
Compares two images. It returns a number of different pixels (or groups of pixels). It returns -1 if algorithm not initialized before.
|
protected |
Perform border filter algorithm.
Standard_Boolean Image_Diff::Init | ( | const Handle< Image_PixMap > & | theImageRef, |
const Handle< Image_PixMap > & | theImageNew, | ||
const Standard_Boolean | theToBlackWhite = Standard_False ) |
Initialize algorithm by two images.
Standard_Boolean Image_Diff::Init | ( | const TCollection_AsciiString & | theImgPathRef, |
const TCollection_AsciiString & | theImgPathNew, | ||
const Standard_Boolean | theToBlackWhite = Standard_False ) |
Initialize algorithm by two images (will be loaded from files).
|
inline |
Returns a flag of taking into account (ignoring) a border effect in comparison of images.
|
inlinestaticprotected |
Map two pixel coordinates to 32-bit integer.
|
protected |
Release dynamically allocated memory.
Standard_Boolean Image_Diff::SaveDiffImage | ( | const TCollection_AsciiString & | theDiffPath | ) | const |
Saves a difference between two images as white pixels on black background.
Standard_Boolean Image_Diff::SaveDiffImage | ( | Image_PixMap & | theDiffImage | ) | const |
Saves a difference between two images as white pixels on black background.
|
inline |
Sets taking into account (ignoring) a "border effect" on comparison of images. The border effect is caused by a border of shaded shapes in the viewer 3d. Triangles of this area are located at about 0 or 90 degrees to the user. Therefore, they deflect light differently according to implementation of a video card driver. This flag allows to detect such a "border" area and skip it from comparison of images. Filter turned OFF by default.
|
inline |
Color tolerance for equality check. Should be within range 0..1: Corresponds to a difference between white and black colors (maximum difference). By default, the tolerance is equal to 0 thus equality check will return false for any different colors.
|
inlinestaticprotected |
Get pixel X coordinate from 32-bit packed integer.
|
inlinestaticprotected |
Get pixel Y coordinate from 32-bit packed integer.
|
protected |
tolerance for equality check (0..1, 0 - any not equal, 1 - opposite colors)
|
protected |
coordinates of different pixels, packed in one int using 16-bit integers to save memory
|
protected |
|
protected |
new image to compare (to)
|
protected |
reference image to compare (from)
|
protected |
perform algorithm with border effect filter
|
protected |