Ask Your Question

Revision history [back]

Compare Camera captured images with computer generated images

I am making an app which compare camera captured image with computer generated images and these images are stored in database. I am using Opencv for image comparison but it only compare computer generated images correctly.When i capture same image with camera and compare that image with computer generated image then it does not match them acuurately.Is there any way where i can compare camera images also;

Here is my code

public static void main(String[] args) { // Set image path String path = System.getProperty("user.dir"); String filename1 = path+"/images/266.jpg"; String filename2 = path+"/images/20160805_121529.jpg";

int ret; ret = compareFeature(filename1, filename2); if (ret > 0) { System.out.println("Two images are same."); } else {
System.out.println("Two images are different."); } }

/** * Compare that two images is similar using feature mapping * @param filename1 - the first image * @param filename2 - the second image
* @return integer - count that has the similarity within images */ public static int compareFeature(String filename1, String filename2) { int retVal = 0; long startTime = System.currentTimeMillis(); System.loadLibrary(Core.NATIVE_LIBRARY_NAME); // Load images to compare Mat img1 = Imgcodecs.imread(filename1, Imgcodecs.CV_LOAD_IMAGE_COLOR); Mat img2 = Imgcodecs.imread(filename2, Imgcodecs.CV_LOAD_IMAGE_COLOR);

// Declare key point of images
MatOfKeyPoint keypoints1 = new MatOfKeyPoint(); MatOfKeyPoint keypoints2 = new MatOfKeyPoint();
Mat descriptors1 = new Mat(); Mat descriptors2 = new Mat();

// Definition of ORB key point detector and descriptor extractors
FeatureDetector detector = FeatureDetector.create(FeatureDetector.ORB); DescriptorExtractor extractor = DescriptorExtractor.create(DescriptorExtractor.ORB);

// Detect key points
detector.detect(img1, keypoints1);
detector.detect(img2, keypoints2); // Extract descriptors extractor.compute(img1, keypoints1, descriptors1);
extractor.compute(img2, keypoints2, descriptors2);

// Definition of descriptor matcher DescriptorMatcher matcher = DescriptorMatcher.create(DescriptorMatcher.BRUTEFORCE_HAMMING);

// Match points of two images
MatOfDMatch matches = new MatOfDMatch(); // System.out.println("Type of Image1= " + descriptors1.type() + ", Type of Image2= " + descriptors2.type()); // System.out.println("Cols of Image1= " + descriptors1.cols() + ", Cols of Image2= " + descriptors2.cols()); // Avoid to assertion failed // Assertion failed (type == src2.type() && src1.cols == src2.cols && (type == CV_32F || type == CV_8U) if (descriptors2.cols() == descriptors1.cols()) {
matcher.match(descriptors1, descriptors2 ,matches); // Check matches of key points DMatch[] match = matches.toArray();
double max_dist = 0; double min_dist = 100; for (int i = 0; i < descriptors1.rows(); i++) { double dist = match[i].distance; if( dist < min_dist ) min_dist = dist; if( dist > max_dist ) max_dist = dist; } System.out.println("max_dist=" + max_dist + ", min_dist=" + min_dist);

  // Extract good images (distances are under 10)    for (int i

= 0; i < descriptors1.rows(); i++) { if (match[i].distance <= 10) { retVal++; } } System.out.println("matching count=" + retVal); } l

ong estimatedTime = System.currentTimeMillis() - startTime;
System.out.println("estimatedTime=" + estimatedTime + "ms");

 return retVal;  }

Thanks in Advance

Compare Camera captured images with computer generated images

I am making an app which compare camera captured image with computer generated images and these images are stored in database. I am using Opencv for image comparison but it only compare computer generated images correctly.When i capture same image with camera and compare that image with computer generated image then it does not match them acuurately.Is there any way where i can compare camera images also;

Here is my code

 public static void main(String[]
 args) { // Set image path String
 path = System.getProperty("user.dir");
  String filename1 =
 path+"/images/266.jpg"; String
 filename2 =
 path+"/images/20160805_121529.jpg";

path+"/images/20160805_121529.jpg"; int ret; ret = compareFeature(filename1, filename2); if (ret > 0) { System.out.println("Two images are same."); } else {
System.out.println("Two images are different."); } }

} /** * Compare that two images is similar using feature mapping * @param filename1 - the first image * @param filename2 - the second image
* @return integer - count that has the similarity within images */ public static int compareFeature(String filename1, String filename2) { int retVal = 0; long startTime = System.currentTimeMillis(); System.loadLibrary(Core.NATIVE_LIBRARY_NAME); // Load images to compare Mat img1 = Imgcodecs.imread(filename1, Imgcodecs.CV_LOAD_IMAGE_COLOR); Mat img2 = Imgcodecs.imread(filename2, Imgcodecs.CV_LOAD_IMAGE_COLOR);

Imgcodecs.CV_LOAD_IMAGE_COLOR); // Declare key point of images
MatOfKeyPoint keypoints1 = new MatOfKeyPoint(); MatOfKeyPoint keypoints2 = new MatOfKeyPoint();
Mat descriptors1 = new Mat(); Mat descriptors2 = new Mat();

Mat(); // Definition of ORB key point detector and descriptor extractors
FeatureDetector detector = FeatureDetector.create(FeatureDetector.ORB); DescriptorExtractor extractor = DescriptorExtractor.create(DescriptorExtractor.ORB);

DescriptorExtractor.create(DescriptorExtractor.ORB); // Detect key points
detector.detect(img1, keypoints1);
detector.detect(img2, keypoints2); // Extract descriptors extractor.compute(img1, keypoints1, descriptors1);
extractor.compute(img2, keypoints2, descriptors2);

descriptors2); // Definition of descriptor matcher DescriptorMatcher matcher = DescriptorMatcher.create(DescriptorMatcher.BRUTEFORCE_HAMMING);

DescriptorMatcher.create(DescriptorMatcher.BRUTEFORCE_HAMMING); // Match points of two images
MatOfDMatch matches = new MatOfDMatch(); // System.out.println("Type of Image1= " + descriptors1.type() + ", Type of Image2= " + descriptors2.type()); // System.out.println("Cols of Image1= " + descriptors1.cols() + ", Cols of Image2= " + descriptors2.cols()); // Avoid to assertion failed // Assertion failed (type == src2.type() && src1.cols == src2.cols && (type == CV_32F || type == CV_8U) if (descriptors2.cols() == descriptors1.cols()) {
matcher.match(descriptors1, descriptors2 ,matches); // Check matches of key points DMatch[] match = matches.toArray();
double max_dist = 0; double min_dist = 100; for (int i = 0; i < descriptors1.rows(); i++) { double dist = match[i].distance; if( dist < min_dist ) min_dist = dist; if( dist > max_dist ) max_dist = dist; } System.out.println("max_dist=" + max_dist + ", min_dist=" + min_dist);

min_dist);
 // Extract good images (distances are under 10) for (int i

= 0; i < descriptors1.rows(); i++) { if (match[i].distance <= 10) { retVal++; } } System.out.println("matching count=" + retVal); } l

l ong estimatedTime = System.currentTimeMillis() - startTime;
> System.out.println("estimatedTime=" + estimatedTime + "ms");

"ms");
 return retVal; }

Thanks in Advance