tags:

views:

370

answers:

5

I am thinking about creating a database system for images where they are stored with compact signatures and then matched against a "query image" that could be a resized, cropped, brightened, rotated or a flipped version of the stored one. Note that I am not talking about image similarity algorithms but rather strictly about duplicate detection. This would make things a lot simpler. The system wouldn't care if two images have an elephant on them, it would only be important to detect if the two images are in fact the same image.

Histogram comparisons simply won't work for cropped query images. The only viable way to go I see is shape/edge detection. Images would first be somehow discretized, every pixel being converted to an 8-level grayscale for example. The discretized image will contain vast regions in the same colour which would help indicate shapes. These shapes then could be described with coefficients and their relative position could be remembered. Compact signatures would be produced out of that. This process will be carried out over each image being stored and over each query image when a comparison has to be performed. Does that sound like an efficient and realisable algorithm? To illustrate this idea:

alt text

I know this is an immature research area, I have read Wikipedia on the subject and I would ask you to propose your ideas about such an algorithm.

+1  A: 

Check out tineye.com They have a good system that's always improving. I'm sure you can find research papers from them on the subject.

glasnt
I rather prefer to read and sum up different ideas here. I have seen Tineye before.
Blagovest Buyukliev
+1  A: 

How about converting this python codes to C back?

S.Mark
The code you refer is based on histogram fetching. It would work fine if the query image isn't possibly cropped. A cropped sub-image would yield a completely different histogram than the whole image, therefore is inapplicable in this case.
Blagovest Buyukliev
+1  A: 

The article you might be referring to on Wikipedia on feature detection.

If you are running on Intel/AMD processor, you could use the Intel Integrated Performance Primitives to get access to a library of image processing functions. Or beyond that, there is the OpenCV project, again another library of image processing functions for you. The advantage of a using library is that you can try various algorithms, already implemented, to see what will work for your situation.

Chris O
Trying out different processing functions isn't the point. I would be interested if you have a particular idea, even a very sparse one to achieve the task.
Blagovest Buyukliev
Can you take the frequency components from both the target and query images, and do "some sort of comparison"? Yup, this is very sparse, it's been awhile. Doing this is computational intensive ;-)
Chris O
+2  A: 

If you want to do a feature detection driven model, you could perhaps take the singular value decomposition of the images (you'd probably have to do a SVD for each color) and use the first few columns of the U and V matrices along with the corresponding singular values to judge how similar the images are.

Very similar to the SVD method is one called principle component analysis which I think will be easier to use to compare between images. The PCA method is pretty close to just taking the SVD and getting rid of the singular values by factoring them into the U and V matrices. If you follow the PCA path, you might also want to look into correspondence analysis. By the way, the PCA method was a common method used in the Netflix Prize for extracting features.

Justin Peel
I tried to make it clear that the query image will be a variation of the original, not an exact copy.I have to investigate about SVD.
Blagovest Buyukliev
Yes, I edited my solution. I took out the checksum info, and put more related to the SVD.
Justin Peel
+1  A: 

SURF should do its job.

http://en.wikipedia.org/wiki/SURF

It is fast an robust, it is invariant on rotations and scaling and also on blure and contrast/lightning (but not so strongly).
There is example of automatic panorama stitching.

Check article on SIFT first
http://en.wikipedia.org/wiki/Scale-invariant_feature_transform

ralu