Compare Camera captured images with computer generated images

asked 2016-08-05 05:07:30 -0600

updated 2016-08-05 05:46:50 -0600

LBerger gravatar image

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

edit retag flag offensive close merge delete

Comments

Thanks to use icon with 101010 to format your code

LBerger gravatar imageLBerger ( 2016-08-05 05:47:40 -0600 )edit

"When i capture same image with camera and compare that image with computer generated image then it does not match" -- without seing the images - why do you expect, they would match ?

berak gravatar imageberak ( 2016-08-05 08:37:19 -0600 )edit

I have downloaded some images and from these images i take picture of on of these downloaded images from camera and then compare with these images.

Hassan Shahbaz gravatar imageHassan Shahbaz ( 2016-08-08 03:14:37 -0600 )edit