1

I am working on dorsal hand vein recognition system. I have already binarised and pre-processed the image followed by feature extraction (white pixels coordinates) of the thinned vein patterns as shown below in the figure (Image 1). These steps were repeated for 10 images and having their coordinates stored in .txt file.

zsthin0073hv1.png

Now, let's say I have a query image (Image 2) as below where all the mentioned above steps have been applied and coordinates were retrieved.

zsthin0059hv1.png

For the matching purpose, I want to adapt this paper matching strategy which stated that "An algorithm that, somehow, does the exact same thing is implemented in order to do a similarity matching between binary images. The matching is a two way process. In the first step, the algorithm scans through the query image and takes every foreground pixel (background pixels can also be taken) value and compares this with the pixel value in the database image at the corresponding location. If it finds the same value at the same position in the database image, this will be taken as a hit count. Otherwise, it will be taken as a miss count and finally the difference of the hit and the miss count is divided by the total number of foreground pixels in the query image. The result of this division gives a number that indicates how Similar the Query image is to the Database image (SQD). In the second step, the database image is scanned and its foreground pixel elements are compared against the query image as is done in the first step. This will give us a result that indicates how Similar the Database image is to the Query image (SDQ). Then the average of the SQD and the SDQ, Average Similarity Measure (ASM), is taken as a ranking measure for the retrieval process."

Thank You.

user2265058
  • 15
  • 1
  • 6

2 Answers2

0

Pixel-by-pixel is easy, you just hash the image and store the has, then hash the new image and compare the hashes. But that is going to fail if images are scaled, or in case of lossy compressions, re-saved.

That's going to essentially match if somebody uploads the same file twice. This may or may not be what you are after.

If not, you need some sort of image similarity algorithm. There is a question about that already, here. Image comparison - fast algorithm

Community
  • 1
  • 1
Lennart Regebro
  • 167,292
  • 41
  • 224
  • 251
  • Sounds interesting but will I be able to generate a matching score with the hash technique? – user2265058 Apr 27 '13 at 21:29
  • 2
    @user2265058 as Lennart said. His suggestion will only work if the images are exactly the same, and it will only give you a true/false result. – denver Apr 28 '13 at 02:53
  • Oh! Then the solution does not suit my problem. Other alternatives are most welcomed that can adapt to matching phase after having thinned the vein patterns. – user2265058 Apr 29 '13 at 18:06
  • Then it's a duplicate: http://stackoverflow.com/questions/843972/image-comparison-fast-algorithm – Lennart Regebro Apr 29 '13 at 19:45
0

That is a very challenging problem. When you skeletonize the image you are potentially throwing away information that might be helpful. If you have to work with the skeletonized images, I would extract features of interest and then try to match on them. For example, you could identify all intersections of the veins to get a set of points. You could then do a best fit between the points in two different images to provide a metric of how similar they are.

denver
  • 2,863
  • 2
  • 31
  • 45
  • Ok, but how do I go about checking how far the images are similar. – user2265058 Apr 29 '13 at 18:07
  • Depends on the feature. For the intersection of vein points you could do a best fit between images, and then use some a metric of fit (perhaps average distance between the intersection in one image and the nearest in the other). As you develop further you can accumulate different features and corresponding metrics. – denver Apr 30 '13 at 01:02