Open CASCADE Technology 6.6.0
Public Member Functions | Protected Types | Protected Member Functions | Protected Attributes
Image_Diff Class Reference

This class compares two images pixel-by-pixel. It uses the following methods to ignore the difference between images: More...

#include <Image_Diff.hxx>

Inheritance diagram for Image_Diff:
Inheritance graph
[legend]

Public Member Functions

 Image_Diff ()
 An empty constructor. Init() should be called for initialization.
virtual ~Image_Diff ()
 Desctructor.
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 backgroud.
Standard_Boolean SaveDiffImage (const TCollection_AsciiString &theDiffPath) const
 Saves a difference between two images as white pixels on black backgroud.

Protected Types

typedef NCollection_List
< TColStd_MapOfInteger * > 
ListOfMapOfInteger

Protected Member Functions

Standard_Integer ignoreBorderEffect ()
 Perform border filter algorithm.
void releaseGroupsOfDiffPixels ()
 Release dynamically allocated memory.

Protected Attributes

Handle< Image_PixMapmyImageRef
 reference image to compare (from)
Handle< Image_PixMapmyImageNew
 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
ListOfMapOfInteger myGroupsOfDiffPixels
NCollection_Vector< Standard_SizemyDiffPixels
 different pixels (position packed into integer)
TColStd_MapOfInteger myLinearGroups

Detailed Description

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 groupped 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: 1. http://pdiff.sourceforge.net/ypg01.pdf 2. http://pdiff.sourceforge.net/metric.html 3. http://www.cs.ucf.edu/~sumant/publications/sig99.pdf 4. http://www.worldscientific.com/worldscibooks/10.1142/2641#t=toc (there is a list of articles and books in PDF format)


Member Typedef Documentation


Constructor & Destructor Documentation

Image_Diff::Image_Diff ( )
virtual Image_Diff::~Image_Diff ( ) [virtual]

Member Function Documentation

Standard_Real Image_Diff::ColorTolerance ( ) const
Standard_Integer Image_Diff::Compare ( )
Standard_Integer Image_Diff::ignoreBorderEffect ( ) [protected]
Standard_Boolean Image_Diff::Init ( const TCollection_AsciiString theImgPathRef,
const TCollection_AsciiString theImgPathNew,
const Standard_Boolean  theToBlackWhite = Standard_False 
)
Returns:
false if images couldn't be opened or their format is unsupported.
Standard_Boolean Image_Diff::Init ( const Handle< Image_PixMap > &  theImageRef,
const Handle< Image_PixMap > &  theImageNew,
const Standard_Boolean  theToBlackWhite = Standard_False 
)
Returns:
false if images has different or unsupported pixel format.
Standard_Boolean Image_Diff::IsBorderFilterOn ( ) const
void Image_Diff::releaseGroupsOfDiffPixels ( ) [protected]
Standard_Boolean Image_Diff::SaveDiffImage ( const TCollection_AsciiString theDiffPath) const
Standard_Boolean Image_Diff::SaveDiffImage ( Image_PixMap theDiffImage) const
void Image_Diff::SetBorderFilterOn ( const Standard_Boolean  theToIgnore)
void Image_Diff::SetColorTolerance ( const Standard_Real  theTolerance)

Field Documentation

Handle< Image_PixMap > Image_Diff::myImageNew [protected]
Handle< Image_PixMap > Image_Diff::myImageRef [protected]

The documentation for this class was generated from the following file:
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines