Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Image comparison with php + gd

What's the best approach to comparing two images with php and the Graphic Draw (GD) Library?

This is the scenario:

alt text

I have an image, and I want to find which image of a given set is the most similar to it. The most similar image is in fact the same image, not pixel perfect match but the same image. I've dramatised the difference between the two images with the number one on the example just to ease the understanding of what I meant.

Even though it brought no consistent results, my approach was to reduce the images to 1px using the imagecopyresampled function and see how close the RGB values where between images.

The sum of the values of deducting each red, green and blue decimal equivalent value from the red, green and blue decimal equivalent value of the possible match gave me a dissimilarity index that, even though it didn't work as expected since not always the most RGB similar image was the target image, I could use to select an image from the available targets.

Here's a sample of the output when comparing 4 images against a target image, in this case the apple logo, that matches one of them but is not exactly the same:

Original image:

Red:222 Green:226 Blue:232

Compared against:

http://a1.twimg.com/profile_images/571171388/logo-twitter_normal.png Red:183 Green:212 Blue:212 and an index of similarity of 56

Red:117 Green:028 Blue:028 and an index of dissimilarity 530

Red:218 Green:221 Blue:221 and an index of dissimilarity 13 Matched Correctly.

Red:061 Green:063 Blue:063 and an index of dissimilarity 491

May not even be doable better with better results than what I'm already getting and I'm wasting my time here but since there seems to be a lot of experienced php programmers I guess you can point me in the right directions on how to improve this.

I'm open to other image libraries such as iMagick, Gmagick or Cairo for php but I'd prefer to avoid using other languages than php.

Thanks in advance.

like image 646
johnnyArt Avatar asked Jan 10 '10 14:01

johnnyArt


People also ask

What is a GD image?

GD is an open source code library for the dynamic creation of images. GD is used for creating PNG, JPEG and GIF images and is commonly used to generate charts, graphics, thumbnails on the fly. While not restricted to use on the web, the most common applications of GD involve web site development.

What is PHP's GD extension?

Before you can start generating images with PHP, you need to check that you actually have image-generation capabilities in your PHP installation. In this chapter we'll discuss using the GD extension, which allows PHP to use the open source GD graphics library available from http://www.boutell.com/gd/.

What is image comparison?

An image comparison system that identifies differences utilizing AI image recognition. This is a system that compares two different data sets such as documents, drawings and photos and extracts any image differences between them.


1 Answers

I'd have thought your approach seems reasonable, but reducing an entire image to 1x1 pixel in size is probably a step too far.

However, if you converted each image to the same size and then computed the average colour in each 16x16 (or 32x32, 64x64, etc. depending on how much processing time/power you wish to use) cell you should be able to form some kind of sensible(-ish) comparison.

like image 163
John Parker Avatar answered Oct 08 '22 01:10

John Parker