ShizukaSM
ShizukaSM

Reputation: 333

Image comparison with a database

I would like to know if what I'm trying to do is even possible, or if I'm just trying to do the impossible/ solve an unsolvable problem up to know.

My goal is to compare images (They`re going to have noise, all of them with very similar noise, though) with a database of images, and tell me if it finds a match. For instance:img1 img2

I would like to point out that I already searched, but side from theorical discussions I never found an actual application, and I failed to understand how to apply some of these ideas so far (Histogram comparison flat out fails in this case, I couldn't implement data trees, phash also fails).

How would I even tell they're both similar? Are there algorithms I can implement to tell me that?

I suppose I should use some sort of noise reduction/edge detection first (I already tried some and had success with edge detection, actually). So, assuming I have a decent edge detection, how could I compare them?

I understand this is not an easy topic, but I would like to know if I'm fighting a lost battle and should just accept that and give up.

Upvotes: 1

Views: 2262

Answers (1)

bjou
bjou

Reputation: 1107

This is a long-standing research challenge in computer vision and pattern recognition, and as @AndrewMao said, there are many PhD theses and academic publications devoted to this topic. A fundamental question is what kind of output you want: (1) a single "matching" image from your database, or (2) a ranked list of database images with decreasing confidence of match. (1) is typically known as "Image Near-Duplicate Detection" and (2) is more broadly known as "Content-based Image Retrieval".

Today, the popular approach to both of these problems is some variant of (A) extracting low-level descriptors, e.g. most notably SIFT, at detected feature points, e.g. blob regions recognized by MSER ,(B) applying some geometric verification, e.g. RANSAC, (C) measuring the distance between the remaining descriptors from pairs of images, e.g. via Euclidean distance, (D) thresholding to keep matched descriptors, and (E) counting the number of matches from the query image to each image in the database.

Visualized, for images like the following: http://www.vlfeat.org/demo/sift_match_1.jpg.pagespeed.ce.Ch9_KgDq8u.jpg

Matching would yield (SIFT points in green and matches in blue): http://www.vlfeat.org/demo/sift_match_2.jpg.pagespeed.ce.JvQxRCluzm.jpg

Upvotes: 1

Related Questions