I have an algorithm to find the main product image from an e-commerce product page. Next step is: Given a set of images found in the page, I would like to be able to find out the similarity between those images and the product image that I already have.
So basically, my question would be:
How can use ImageMagick in order to find how similar two images are? I am not really interested in if they look similar on the color, but on the shape and how similar the aspect ratio is between those:
So, for example, on this page: http://www.tactics.com/adidas/busenitz- ... hite-black, the main product image would be:
http://www.tactics.com/a/52ce/2/2.jpg
And similar images would be:
http://w.p.mybuys.com//imgcache/TACTICS ... p90223.jpg
http://w.p.mybuys.com//imgcache/TACTICS ... p93568.jpg
Right now I am just focusing on finding a way to compare the aspect ratios of the images. Since I need to score those images in regards of how close their aspect ratio is to the main image, I would like that value to be between 0 and 1.
So, if I have a main image that is 100x50, and another one that is 200x100, the score should be high, because their aspect ratio is the same. However, if I have 100x50 and 50x100, the score should be low.
Anyway to find these kind of aspect ratio comparisons in ImageMagick?
Similarity between images
- fmw42
- Posts: 25562
- Joined: 2007-07-02T17:14:51-07:00
- Authentication code: 1152
- Location: Sunnyvale, California, USA
Re: Similarity between images
Use -fx calculations.
ratio1=`convert image1 -format "%[fx:w/h]" info:`
ratio2=`convert image2 -format "%[fx:w/h]" info:`
ratiocompare=`convert xc: -format "%[fx:$ratio2/$ratio1]" info:`
the closer to 1 the closer the two ratios are the same.
see
http://www.imagemagick.org/Usage/transform/#fx_escapes
http://www.imagemagick.org/script/fx.php
With regard to the shape, you should convert to grayscale and compare the Image moments between two images. This is new to IM 6.8.8.2.
identify -verbose -moments image1
identify -verbose -moments image1
There is new feature for the upcoming IM 6.8.8.3 that will do that comparison for you. I am testing it right now mostly for color images. But you should be able to compare two grayscale images as well, though it may be less robust. I have not yet started to test on grayscale as the algorithm is still in a bit of flux.
compare -metric phash image1 image2 null:
This does a perceptual hash comparison between two image that can be different sizes. It uses the Image Moments described above.
This is available in IM 6.8.8.2, but I think the algorithm has some bugs. So I would wait for IM 6.8.8.3.
I am in the process of making a document graphing my test results for eight different color images that should be available by early next week.
ratio1=`convert image1 -format "%[fx:w/h]" info:`
ratio2=`convert image2 -format "%[fx:w/h]" info:`
ratiocompare=`convert xc: -format "%[fx:$ratio2/$ratio1]" info:`
the closer to 1 the closer the two ratios are the same.
see
http://www.imagemagick.org/Usage/transform/#fx_escapes
http://www.imagemagick.org/script/fx.php
With regard to the shape, you should convert to grayscale and compare the Image moments between two images. This is new to IM 6.8.8.2.
identify -verbose -moments image1
identify -verbose -moments image1
There is new feature for the upcoming IM 6.8.8.3 that will do that comparison for you. I am testing it right now mostly for color images. But you should be able to compare two grayscale images as well, though it may be less robust. I have not yet started to test on grayscale as the algorithm is still in a bit of flux.
compare -metric phash image1 image2 null:
This does a perceptual hash comparison between two image that can be different sizes. It uses the Image Moments described above.
This is available in IM 6.8.8.2, but I think the algorithm has some bugs. So I would wait for IM 6.8.8.3.
I am in the process of making a document graphing my test results for eight different color images that should be available by early next week.