From: cristy Date: Fri, 15 Mar 2013 14:26:17 +0000 (+0000) Subject: (no commit message) X-Git-Tag: 7.0.1-0~4080 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=62e5218241b488917159dc361d02fa0810dbddd5;p=imagemagick --- diff --git a/MagickCore/compare.c b/MagickCore/compare.c index 746dc48b3..05d934c1b 100644 --- a/MagickCore/compare.c +++ b/MagickCore/compare.c @@ -1499,8 +1499,8 @@ MagickExport MagickBooleanType IsImagesEqual(Image *image, % The format of the SimilarityImageImage method is: % % Image *SimilarityImage(const Image *image,const Image *reference, -% const MetricType metric,RectangleInfo *offset,double *similarity, -% ExceptionInfo *exception) +% const MetricType metric,const double similarity_threshold, +% RectangleInfo *offset,double *similarity,ExceptionInfo *exception) % % A description of each parameter follows: % @@ -1510,7 +1510,9 @@ MagickExport MagickBooleanType IsImagesEqual(Image *image, % % o metric: the metric. % -% o the best match offset of the reference image within the image. +% o similarity_threshold: minimum distortion for (sub)image match. +% +% o offset: the best match offset of the reference image within the image. % % o similarity: the computed similarity between the images. % @@ -1550,8 +1552,8 @@ static double GetSimilarityMetric(const Image *image,const Image *reference, } MagickExport Image *SimilarityImage(Image *image,const Image *reference, - const MetricType metric,RectangleInfo *offset,double *similarity_metric, - ExceptionInfo *exception) + const MetricType metric,const double similarity_threshold, + RectangleInfo *offset,double *similarity_metric,ExceptionInfo *exception) { #define SimilarityImageTag "Similarity/Image" diff --git a/MagickCore/compare.h b/MagickCore/compare.h index bc5a35d15..8528f6047 100644 --- a/MagickCore/compare.h +++ b/MagickCore/compare.h @@ -44,8 +44,8 @@ extern MagickExport double extern MagickExport Image *CompareImages(Image *,const Image *,const MetricType,double *, ExceptionInfo *), - *SimilarityImage(Image *,const Image *,const MetricType,RectangleInfo *, - double *,ExceptionInfo *); + *SimilarityImage(Image *,const Image *,const MetricType,const double, + RectangleInfo *,double *,ExceptionInfo *); extern MagickExport MagickBooleanType GetImageDistortion(Image *,const Image *,const MetricType,double *, diff --git a/MagickCore/option.c b/MagickCore/option.c index 5c1a59666..c185270e6 100644 --- a/MagickCore/option.c +++ b/MagickCore/option.c @@ -651,6 +651,8 @@ static const OptionInfo { "-sigmoidal-contrast", 1L, SimpleOperatorFlag, MagickFalse }, { "+silent", 0L, NonMagickOptionFlag, MagickFalse }, { "-silent", 1L, NonMagickOptionFlag, MagickFalse }, + { "+similarity-threshold", 0L, NonMagickOptionFlag | ImageInfoOptionFlag, MagickFalse }, + { "-similarity-threshold", 1L, NonMagickOptionFlag | ImageInfoOptionFlag, MagickFalse }, { "+size", 0L, ImageInfoOptionFlag, MagickFalse }, { "-size", 1L, ImageInfoOptionFlag, MagickFalse }, { "+sketch", 1L, DeprecateOptionFlag, MagickTrue }, diff --git a/MagickWand/compare.c b/MagickWand/compare.c index 5f5e243bf..44d49fe96 100644 --- a/MagickWand/compare.c +++ b/MagickWand/compare.c @@ -175,6 +175,7 @@ WandExport MagickBooleanType CompareImagesCommand(ImageInfo *image_info, int argc,char **argv,char **metadata,ExceptionInfo *exception) { #define DefaultDissimilarityThreshold 0.31830988618379067154 +#define DefaultSimilarityThreshold 0.0 #define DestroyCompare() \ { \ if (similarity_image != (Image *) NULL) \ @@ -268,6 +269,7 @@ WandExport MagickBooleanType CompareImagesCommand(ImageInfo *image_info, difference_image=NewImageList(); similarity_image=NewImageList(); dissimilarity_threshold=DefaultDissimilarityThreshold; + similarity_threshold=DefaultSimilarityThreshold; distortion=0.0; format=(char *) NULL; j=1; @@ -814,6 +816,21 @@ WandExport MagickBooleanType CompareImagesCommand(ImageInfo *image_info, ThrowCompareException(OptionError,"MissingArgument",option); break; } + if (LocaleCompare("similarity-threshold",option+1) == 0) + { + if (*option == '+') + break; + i++; + if (i == (ssize_t) argc) + ThrowCompareException(OptionError,"MissingArgument",option); + if (IsGeometry(argv[i]) == MagickFalse) + ThrowCompareInvalidArgumentException(option,argv[i]); + if (*option == '+') + similarity_threshold=DefaultSimilarityThreshold; + else + similarity_threshold=StringToDouble(argv[i],(char **) NULL); + break; + } if (LocaleCompare("size",option+1) == 0) { if (*option == '+') @@ -922,8 +939,8 @@ WandExport MagickBooleanType CompareImagesCommand(ImageInfo *image_info, reconstruct_image=GetImageFromList(image,1); if (subimage_search != MagickFalse) { - similarity_image=SimilarityImage(image,reconstruct_image,metric,&offset, - &similarity_metric,exception); + similarity_image=SimilarityImage(image,reconstruct_image,metric, + similarity_threshold,&offset,&similarity_metric,exception); if (similarity_metric > dissimilarity_threshold) ThrowCompareException(ImageError,"ImagesTooDissimilar",image->filename); }