[Image-SIG] quick pixelwise euclidean difference

Lauri Love (nsh) lauri.love at gmail.com
Sun Dec 6 00:47:16 CET 2009


Ok, I found a reasonable solution using the ImageStat module to get the sum
of pixels of the difference image. This gives the manhattan distance when
divided by the pixel count and averaged over RGB.

In [151]: def idiff(im1,im2):
    return
array(ImageStat.Stat(ImageChops.difference(im1,im2)).sum).mean()/(im1.size[0]
* im1.size[1])
   .....:

In [153]: timeit("idiff(anna,f37)",20)
Out[153]: 0.023978149890899657

Let me know if there is any faster solution short of coding in some distance
functions to the C modules (which I did consider, before be reminded of my
pitiful ignorance...)

Yours,

-nsh

On Sat, Dec 5, 2009 at 7:56 PM, Lauri Love (nsh) <lauri.love at gmail.com>wrote:

> i'm coding a project which requires quick comparison of two images per
> pixel by colorspace (distance is the sum of the squares of the differences
> of RGB values over the pixels of the images), as a fitness function (i am
> trying to recreate/extend roger alsing's genetic mona lisa code in python).
>
> creating an absolute difference image takes about 1/100th of a second on my
> (eeepc) hardware, but i can't figure out a way to reduce the difference
> image to an integer of float value quickly. it takes about the order of 5
> seconds to iterate through all the pixels and sum the RGB values to get the
> manhattan distance. "manually" calculating the manhattan or euclidean
> distances between the two images is even slower.
>
> can anyone suggest a way to quickly get either distance from two images?
>
> sincerely and gratefully,
>
> -nsh
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/image-sig/attachments/20091205/9b3581d8/attachment-0001.htm>


More information about the Image-SIG mailing list