From: cristy Date: Sat, 8 Feb 2014 19:39:34 +0000 (+0000) Subject: (no commit message) X-Git-Tag: 7.0.1-0~2692 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a4a66017ba760ac162710af42d46463bf001f6f8;p=imagemagick --- diff --git a/MagickCore/compare.c b/MagickCore/compare.c index 36a6a4415..7322ad1b4 100644 --- a/MagickCore/compare.c +++ b/MagickCore/compare.c @@ -1141,19 +1141,14 @@ static MagickBooleanType GetPerceptualHashDistortion(const Image *image, *image_moments, *reconstruct_moments; - double - alpha, - beta, - difference; - Image *phash_image; MagickBooleanType grayscale; - register ssize_t - i; + ssize_t + channel; /* Compute perceptual hash in the native image colorspace. @@ -1179,22 +1174,36 @@ static MagickBooleanType GetPerceptualHashDistortion(const Image *image, image_moments=(ChannelMoments *) RelinquishMagickMemory(image_moments); return(MagickFalse); } - for (i=0; i < 7; i++) + /* + Compute sum of moment differences squared. + */ +#if defined(MAGICKCORE_OPENMP_SUPPORT) + #pragma omp parallel for schedule(static,4) +#endif + for (channel=0; channel < MaxPixelChannels; channel++) { - ssize_t - channel; + double + difference; - /* - Compute sum of moment differences squared. - */ - for (channel=0; channel < MaxPixelChannels; channel++) + register ssize_t + i; + + difference=0.0; + for (i=0; i < 7; i++) { + double + alpha, + beta; + alpha=MagickLog10(image_moments[channel].I[i]); beta=MagickLog10(reconstruct_moments[channel].I[i]); - difference=beta-alpha; - distortion[channel]+=difference*difference; - distortion[CompositePixelChannel]+=difference*difference; + difference+=(beta-alpha)*(beta-alpha); } + distortion[channel]+=difference; +#if defined(MAGICKCORE_OPENMP_SUPPORT) + #pragma omp critical (MagickCore_GetPerceptualHashDistortion) +#endif + distortion[CompositePixelChannel]+=difference; } image_moments=(ChannelMoments *) RelinquishMagickMemory(image_moments); reconstruct_moments=(ChannelMoments *) RelinquishMagickMemory( @@ -1227,22 +1236,36 @@ static MagickBooleanType GetPerceptualHashDistortion(const Image *image, image_moments=(ChannelMoments *) RelinquishMagickMemory(image_moments); return(MagickFalse); } - for (i=0; i < 7; i++) + /* + Compute sum of moment differences squared. + */ +#if defined(MAGICKCORE_OPENMP_SUPPORT) + #pragma omp parallel for schedule(static,4) +#endif + for (channel=0; channel < MaxPixelChannels; channel++) { - ssize_t - channel; + double + difference; - /* - Compute sum of moment differences squared. - */ - for (channel=0; channel < MaxPixelChannels; channel++) + register ssize_t + i; + + difference=0.0; + for (i=0; i < 7; i++) { + double + alpha, + beta; + alpha=MagickLog10(image_moments[channel].I[i]); beta=MagickLog10(reconstruct_moments[channel].I[i]); - difference=beta-alpha; - distortion[channel]+=difference*difference; - distortion[CompositePixelChannel]+=difference*difference; + difference+=(beta-alpha)*(beta-alpha); } + distortion[channel]+=difference; +#if defined(MAGICKCORE_OPENMP_SUPPORT) + #pragma omp critical (MagickCore_GetPerceptualHashDistortion) +#endif + distortion[CompositePixelChannel]+=difference; } image_moments=(ChannelMoments *) RelinquishMagickMemory(image_moments); reconstruct_moments=(ChannelMoments *) RelinquishMagickMemory(