How to use Minimum Distance to Recognize the Image?
How to use minimum distance to recognize the image?¶
Introduction
If you want to compare how many images to match. You can try the minimum distance to help you measure similar degree. If high similar will get low result value. Opposite, if low similar will get high result value.
Equipment
Operation System: Microsoft Windows 7 (64 bit)
Development Utility: Microsoft Visual Studio 2010
Usage
// The height of the image. for ( int iY = 0; iY < imageA->DibInfo->bmiHeader.biHeight; iY++ ) { // The width of the image. for ( int iX = 0; iX < imageA->DibInfo->bmiHeader.biWidth; iX++ ) { // The index of the first image. lIDXA = ( iX * 3 ) + ( iY * imageA->DibInfo->bmiHeader.biWidth * 3 ); // Get the pixel of the blue channel. byteRGB_BA = imageA->DibArry[lIDXA+0]; // Get the pixel of the green channel. byteRGB_GA = imageA->DibArry[lIDXA+1]; // Get the pixel of the red channel. byteRGB_RA = imageA->DibArry[lIDXA+2]; // Transform an RGB color space to gray scale. dobYUV_YA = (0.299 * byteRGB_RA + 0.587 * byteRGB_GA + 0.114 * byteRGB_BA); // The index of the second image. lIDXB = ( iX * 3 ) + ( iY * imageB->DibInfo->bmiHeader.biWidth * 3 ); // Get the pixel of the blue channel. byteRGB_BB = imageB->DibArry[lIDXB+0]; // Get the pixel of the green channel. byteRGB_GB = imageB->DibArry[lIDXB+1]; // Get the pixel of the red channel. byteRGB_RB = imageB->DibArry[lIDXB+2]; // Transform an RGB color space to gray scale. dobYUV_YB = (0.299 * byteRGB_RB + 0.587 * byteRGB_GB + 0.114 * byteRGB_BB); // The index of the third image. lIDXC = ( iX * 3 ) + ( iY * imageC->DibInfo->bmiHeader.biWidth * 3 ); // Get the pixel of the blue channel. byteRGB_BC = imageC->DibArry[lIDXC+0]; // Get the pixel of the green channel. byteRGB_GC = imageC->DibArry[lIDXC+1]; // Get the pixel of the red channel. byteRGB_RC = imageC->DibArry[lIDXC+2]; // Transform an RGB color space to gray scale. dobYUV_YC = (0.299 * byteRGB_RC + 0.587 * byteRGB_GC + 0.114 * byteRGB_BC); // The first image compare second image. dobCountT1 += abs( dobYUV_YA - dobYUV_YB ); // The first image compare third image. dobCountT2 += abs( dobYUV_YA - dobYUV_YC ); } // The closing "The height of the image". } // The closing "The width of the image".
You can download source code and binary code.
https://drive.google.com/file/d/0BzHb_OyLyVZlWm4zZVVMNlNNbjA/view?usp=sharing
Exception
There is a notice, if your bit depth of bitmap file are not 24 bits, you should change your bitmap files to adapt this program, or you could rewrite this source code to fit your bitmap format.
You have to install Microsoft SDK v7.1, because I include windowscodes.lib.
#pragma comment(lib, "windowscodecs.lib")
Reference
[1] Gary Bradski and Adrian Kaehler, “Learning OpenCV: Computer Vision with the OpenCV Library,” O’REILLY, September 2008, ISBN:978-0-596-51613-0
Acknowledge
Thank you (Microsoft Visual Studio 2010) very much for this great development utility.