¿Cómo comprobar si dos imágenes son similares o no usando openCV en java?

Tengo que comprobar si dos imágenes son similares o no en java con OpenCV, estoy usando OpenCV para eso y usando ORB

Esta es mi clase principal

System.out.println("Welcome to OpenCV " + Core.VERSION); System.loadLibrary(Core.NATIVE_LIBRARY_NAME);()); System.out.println(System.getProperty("user.dir")); File f1 = new File(System.getProperty("user.dir") + "\\test.jpg"); File f2 = new File(System.getProperty("user.dir") + "\\test2.jpg"); MatchingDemo2 m = new MatchingDemo2(); m.mth(f1.getAbsolutePath(), f2.getAbsolutePath()); 

Y aquí está mi archivo MatchingDemo2.java

 public class MatchingDemo2 { public void mth(String inFile, String templateFile){ FeatureDetector detector = FeatureDetector.create(FeatureDetector.ORB); //Create descriptors //first image // generate descriptors //second image // generate descriptors System.out.println("size " + matches.size()); //HOW DO I KNOW IF IMAGES MATCHED OR NOT ???? //THIS CODE IS FOR CONNECTIONS BUT I AM NOT ABLE TO DO IT //feature and connection colors Scalar RED = new Scalar(255,0,0); Scalar GREEN = new Scalar(0,255,0); //output image Mat outputImg = new Mat(); MatOfByte drawnMatches = new MatOfByte(); //this will draw all matches, works fine Features2d.drawMatches(img1, keypoints1, img2, keypoints2, matches, outputImg, GREEN, RED, drawnMatches, Features2d.NOT_DRAW_SINGLE_POINTS); int DIST_LIMIT = 80; List<DMatch> matchList = matches.toList(); List<DMatch> matches_final = new ArrayList<DMatch>(); for(int i=0; i<matchList.size(); i++){ if(matchList.get(i).distance <= DIST_LIMIT){ matches_final.add(matches.toList().get(i)); } } MatOfDMatch matches_final_mat = new MatOfDMatch(); matches_final_mat.fromList(matches_final); for(int i=0; i< matches_final.size(); i++){ System.out.println("Good Matchs "+ matches_final.get(i)); } } } 

Pero cuando compruebo los partidos buenos consigo esto

  size 1x328 Good Matchs DMatch [queryIdx=0, trainIdx=93, imgIdx=0, distance=52.0] Good Matchs DMatch [queryIdx=1, trainIdx=173, imgIdx=0, distance=57.0] Good Matchs DMatch [queryIdx=2, trainIdx=92, imgIdx=0, distance=53.0] Good Matchs DMatch [queryIdx=3, trainIdx=80, imgIdx=0, distance=26.0] Good Matchs DMatch [queryIdx=5, trainIdx=164, imgIdx=0, distance=40.0] Good Matchs DMatch [queryIdx=6, trainIdx=228, imgIdx=0, distance=53.0] Good Matchs DMatch [queryIdx=7, trainIdx=179, imgIdx=0, distance=14.0] Good Matchs DMatch [queryIdx=8, trainIdx=78, imgIdx=0, distance=61.0] Good Matchs DMatch [queryIdx=9, trainIdx=166, imgIdx=0, distance=69.0] Good Matchs DMatch [queryIdx=10, trainIdx=74, imgIdx=0, distance=65.0] Good Matchs DMatch [queryIdx=11, trainIdx=245, imgIdx=0, distance=38.0] Good Matchs DMatch [queryIdx=12, trainIdx=120, imgIdx=0, distance=66.0] Good Matchs DMatch [queryIdx=13, trainIdx=244, imgIdx=0, distance=41.0] Good Matchs DMatch [queryIdx=14, trainIdx=67, imgIdx=0, distance=50.0] Good Matchs DMatch [queryIdx=15, trainIdx=185, imgIdx=0, distance=55.0] Good Matchs DMatch [queryIdx=16, trainIdx=97, imgIdx=0, distance=21.0] Good Matchs DMatch [queryIdx=17, trainIdx=172, imgIdx=0, distance=67.0] Good Matchs DMatch [queryIdx=18, trainIdx=354, imgIdx=0, distance=67.0] Good Matchs DMatch [queryIdx=19, trainIdx=302, imgIdx=0, distance=53.0] Good Matchs DMatch [queryIdx=20, trainIdx=176, imgIdx=0, distance=59.0] Good Matchs DMatch [queryIdx=21, trainIdx=60, imgIdx=0, distance=66.0] Good Matchs DMatch [queryIdx=22, trainIdx=72, imgIdx=0, distance=62.0] Good Matchs DMatch [queryIdx=23, trainIdx=63, imgIdx=0, distance=54.0] Good Matchs DMatch [queryIdx=24, trainIdx=176, imgIdx=0, distance=63.0] Good Matchs DMatch [queryIdx=25, trainIdx=49, imgIdx=0, distance=58.0] Good Matchs DMatch [queryIdx=26, trainIdx=77, imgIdx=0, distance=52.0] Good Matchs DMatch [queryIdx=27, trainIdx=302, imgIdx=0, distance=59.0] Good Matchs DMatch [queryIdx=28, trainIdx=265, imgIdx=0, distance=71.0] Good Matchs DMatch [queryIdx=29, trainIdx=67, imgIdx=0, distance=49.0] Good Matchs DMatch [queryIdx=30, trainIdx=302, imgIdx=0, distance=64.0] Good Matchs DMatch [queryIdx=31, trainIdx=265, imgIdx=0, distance=65.0] Good Matchs DMatch [queryIdx=32, trainIdx=73, imgIdx=0, distance=73.0] Good Matchs DMatch [queryIdx=33, trainIdx=67, imgIdx=0, distance=55.0] Good Matchs DMatch [queryIdx=34, trainIdx=283, imgIdx=0, distance=63.0] Good Matchs DMatch [queryIdx=35, trainIdx=145, imgIdx=0, distance=60.0] Good Matchs DMatch [queryIdx=36, trainIdx=71, imgIdx=0, distance=54.0] Good Matchs DMatch [queryIdx=37, trainIdx=167, imgIdx=0, distance=67.0] Good Matchs DMatch [queryIdx=38, trainIdx=94, imgIdx=0, distance=60.0] Good Matchs DMatch [queryIdx=39, trainIdx=88, imgIdx=0, distance=68.0] Good Matchs DMatch [queryIdx=40, trainIdx=88, imgIdx=0, distance=69.0] Good Matchs DMatch [queryIdx=41, trainIdx=179, imgIdx=0, distance=28.0] Good Matchs DMatch [queryIdx=42, trainIdx=64, imgIdx=0, distance=61.0] Good Matchs DMatch [queryIdx=43, trainIdx=223, imgIdx=0, distance=71.0] Good Matchs DMatch [queryIdx=44, trainIdx=80, imgIdx=0, distance=30.0] Good Matchs DMatch [queryIdx=45, trainIdx=196, imgIdx=0, distance=59.0] Good Matchs DMatch [queryIdx=46, trainIdx=52, imgIdx=0, distance=65.0] Good Matchs DMatch [queryIdx=47, trainIdx=93, imgIdx=0, distance=60.0] Good Matchs DMatch [queryIdx=48, trainIdx=187, imgIdx=0, distance=49.0] Good Matchs DMatch [queryIdx=49, trainIdx=179, imgIdx=0, distance=50.0] Good Matchs DMatch [queryIdx=50, trainIdx=283, imgIdx=0, distance=59.0] Good Matchs DMatch [queryIdx=51, trainIdx=171, imgIdx=0, distance=61.0] Good Matchs DMatch [queryIdx=52, trainIdx=302, imgIdx=0, distance=60.0] Good Matchs DMatch [queryIdx=53, trainIdx=67, imgIdx=0, distance=59.0] Good Matchs DMatch [queryIdx=54, trainIdx=15, imgIdx=0, distance=59.0] Good Matchs DMatch [queryIdx=55, trainIdx=173, imgIdx=0, distance=66.0] Good Matchs DMatch [queryIdx=56, trainIdx=302, imgIdx=0, distance=56.0] Good Matchs DMatch [queryIdx=57, trainIdx=47, imgIdx=0, distance=56.0] Good Matchs DMatch [queryIdx=58, trainIdx=187, imgIdx=0, distance=58.0] Good Matchs DMatch [queryIdx=59, trainIdx=344, imgIdx=0, distance=64.0] Good Matchs DMatch [queryIdx=60, trainIdx=164, imgIdx=0, distance=65.0] Good Matchs DMatch [queryIdx=61, trainIdx=125, imgIdx=0, distance=50.0] Good Matchs DMatch [queryIdx=62, trainIdx=77, imgIdx=0, distance=72.0] Good Matchs DMatch [queryIdx=63, trainIdx=22, imgIdx=0, distance=79.0] Good Matchs DMatch [queryIdx=64, trainIdx=82, imgIdx=0, distance=69.0] Good Matchs DMatch [queryIdx=65, trainIdx=93, imgIdx=0, distance=63.0] Good Matchs DMatch [queryIdx=66, trainIdx=241, imgIdx=0, distance=35.0] Good Matchs DMatch [queryIdx=67, trainIdx=80, imgIdx=0, distance=18.0] Good Matchs DMatch [queryIdx=68, trainIdx=179, imgIdx=0, distance=20.0] Good Matchs DMatch [queryIdx=69, trainIdx=242, imgIdx=0, distance=50.0] Good Matchs DMatch [queryIdx=70, trainIdx=80, imgIdx=0, distance=22.0] Good Matchs DMatch [queryIdx=71, trainIdx=179, imgIdx=0, distance=19.0] Good Matchs DMatch [queryIdx=72, trainIdx=92, imgIdx=0, distance=59.0] Good Matchs DMatch [queryIdx=73, trainIdx=94, imgIdx=0, distance=56.0] Good Matchs DMatch [queryIdx=74, trainIdx=173, imgIdx=0, distance=49.0] Good Matchs DMatch [queryIdx=75, trainIdx=94, imgIdx=0, distance=59.0] Good Matchs DMatch [queryIdx=76, trainIdx=94, imgIdx=0, distance=48.0] Good Matchs DMatch [queryIdx=77, trainIdx=92, imgIdx=0, distance=52.0] Good Matchs DMatch [queryIdx=78, trainIdx=80, imgIdx=0, distance=20.0] Good Matchs DMatch [queryIdx=80, trainIdx=119, imgIdx=0, distance=61.0] Good Matchs DMatch [queryIdx=81, trainIdx=228, imgIdx=0, distance=47.0] Good Matchs DMatch [queryIdx=82, trainIdx=179, imgIdx=0, distance=14.0] Good Matchs DMatch [queryIdx=83, trainIdx=227, imgIdx=0, distance=52.0] Good Matchs DMatch [queryIdx=84, trainIdx=84, imgIdx=0, distance=57.0] Good Matchs DMatch [queryIdx=85, trainIdx=245, imgIdx=0, distance=40.0] Good Matchs DMatch [queryIdx=86, trainIdx=58, imgIdx=0, distance=64.0] Good Matchs DMatch [queryIdx=87, trainIdx=14, imgIdx=0, distance=62.0] Good Matchs DMatch [queryIdx=88, trainIdx=187, imgIdx=0, distance=61.0] Good Matchs DMatch [queryIdx=89, trainIdx=185, imgIdx=0, distance=57.0] Good Matchs DMatch [queryIdx=90, trainIdx=178, imgIdx=0, distance=25.0] Good Matchs DMatch [queryIdx=91, trainIdx=220, imgIdx=0, distance=56.0] Good Matchs DMatch [queryIdx=92, trainIdx=205, imgIdx=0, distance=59.0] Good Matchs DMatch [queryIdx=93, trainIdx=60, imgIdx=0, distance=61.0] Good Matchs DMatch [queryIdx=94, trainIdx=44, imgIdx=0, distance=59.0] Good Matchs DMatch [queryIdx=95, trainIdx=16, imgIdx=0, distance=72.0] Good Matchs DMatch [queryIdx=96, trainIdx=157, imgIdx=0, distance=63.0] Good Matchs DMatch [queryIdx=97, trainIdx=135, imgIdx=0, distance=52.0] Good Matchs DMatch [queryIdx=98, trainIdx=60, imgIdx=0, distance=61.0] Good Matchs DMatch [queryIdx=99, trainIdx=344, imgIdx=0, distance=60.0] Good Matchs DMatch [queryIdx=100, trainIdx=77, imgIdx=0, distance=67.0] Good Matchs DMatch [queryIdx=101, trainIdx=95, imgIdx=0, distance=76.0] Good Matchs DMatch [queryIdx=102, trainIdx=72, imgIdx=0, distance=45.0] Good Matchs DMatch [queryIdx=103, trainIdx=134, imgIdx=0, distance=70.0] Good Matchs DMatch [queryIdx=104, trainIdx=154, imgIdx=0, distance=54.0] Good Matchs DMatch [queryIdx=105, trainIdx=208, imgIdx=0, distance=77.0] Good Matchs DMatch [queryIdx=106, trainIdx=73, imgIdx=0, distance=79.0] Good Matchs DMatch [queryIdx=107, trainIdx=72, imgIdx=0, distance=61.0] Good Matchs DMatch [queryIdx=108, trainIdx=64, imgIdx=0, distance=73.0] Good Matchs DMatch [queryIdx=109, trainIdx=72, imgIdx=0, distance=63.0] Good Matchs DMatch [queryIdx=110, trainIdx=365, imgIdx=0, distance=66.0] Good Matchs DMatch [queryIdx=111, trainIdx=148, imgIdx=0, distance=64.0] Good Matchs DMatch [queryIdx=112, trainIdx=81, imgIdx=0, distance=42.0] Good Matchs DMatch [queryIdx=113, trainIdx=56, imgIdx=0, distance=62.0] Good Matchs DMatch [queryIdx=114, trainIdx=162, imgIdx=0, distance=48.0] Good Matchs DMatch [queryIdx=115, trainIdx=56, imgIdx=0, distance=56.0] Good Matchs DMatch [queryIdx=116, trainIdx=120, imgIdx=0, distance=58.0] Good Matchs DMatch [queryIdx=117, trainIdx=72, imgIdx=0, distance=59.0] Good Matchs DMatch [queryIdx=118, trainIdx=92, imgIdx=0, distance=63.0] Good Matchs DMatch [queryIdx=119, trainIdx=131, imgIdx=0, distance=59.0] Good Matchs DMatch [queryIdx=120, trainIdx=72, imgIdx=0, distance=46.0] Good Matchs DMatch [queryIdx=121, trainIdx=74, imgIdx=0, distance=78.0] Good Matchs DMatch [queryIdx=122, trainIdx=94, imgIdx=0, distance=56.0] Good Matchs DMatch [queryIdx=123, trainIdx=72, imgIdx=0, distance=52.0] Good Matchs DMatch [queryIdx=124, trainIdx=134, imgIdx=0, distance=71.0] Good Matchs DMatch [queryIdx=125, trainIdx=72, imgIdx=0, distance=46.0] Good Matchs DMatch [queryIdx=126, trainIdx=15, imgIdx=0, distance=73.0] Good Matchs DMatch [queryIdx=127, trainIdx=72, imgIdx=0, distance=50.0] Good Matchs DMatch [queryIdx=128, trainIdx=93, imgIdx=0, distance=56.0] Good Matchs DMatch [queryIdx=129, trainIdx=68, imgIdx=0, distance=46.0] Good Matchs DMatch [queryIdx=130, trainIdx=205, imgIdx=0, distance=65.0] Good Matchs DMatch [queryIdx=131, trainIdx=187, imgIdx=0, distance=59.0] Good Matchs DMatch [queryIdx=132, trainIdx=72, imgIdx=0, distance=47.0] Good Matchs DMatch [queryIdx=133, trainIdx=220, imgIdx=0, distance=57.0] Good Matchs DMatch [queryIdx=134, trainIdx=289, imgIdx=0, distance=60.0] Good Matchs DMatch [queryIdx=135, trainIdx=82, imgIdx=0, distance=65.0] Good Matchs DMatch [queryIdx=136, trainIdx=93, imgIdx=0, distance=53.0] Good Matchs DMatch [queryIdx=137, trainIdx=244, imgIdx=0, distance=18.0] Good Matchs DMatch [queryIdx=138, trainIdx=244, imgIdx=0, distance=25.0] Good Matchs DMatch [queryIdx=139, trainIdx=92, imgIdx=0, distance=66.0] Good Matchs DMatch [queryIdx=140, trainIdx=244, imgIdx=0, distance=20.0] Good Matchs DMatch [queryIdx=141, trainIdx=93, imgIdx=0, distance=45.0] Good Matchs DMatch [queryIdx=142, trainIdx=93, imgIdx=0, distance=51.0] Good Matchs DMatch [queryIdx=143, trainIdx=94, imgIdx=0, distance=51.0] Good Matchs DMatch [queryIdx=144, trainIdx=94, imgIdx=0, distance=40.0] Good Matchs DMatch [queryIdx=145, trainIdx=93, imgIdx=0, distance=47.0] Good Matchs DMatch [queryIdx=146, trainIdx=244, imgIdx=0, distance=28.0] Good Matchs DMatch [queryIdx=147, trainIdx=172, imgIdx=0, distance=77.0] Good Matchs DMatch [queryIdx=148, trainIdx=170, imgIdx=0, distance=72.0] Good Matchs DMatch [queryIdx=149, trainIdx=261, imgIdx=0, distance=72.0] Good Matchs DMatch [queryIdx=150, trainIdx=228, imgIdx=0, distance=55.0] Good Matchs DMatch [queryIdx=151, trainIdx=179, imgIdx=0, distance=19.0] Good Matchs DMatch [queryIdx=152, trainIdx=227, imgIdx=0, distance=60.0] Good Matchs DMatch [queryIdx=153, trainIdx=107, imgIdx=0, distance=56.0] Good Matchs DMatch [queryIdx=154, trainIdx=174, imgIdx=0, distance=41.0] Good Matchs DMatch [queryIdx=155, trainIdx=283, imgIdx=0, distance=76.0] Good Matchs DMatch [queryIdx=156, trainIdx=254, imgIdx=0, distance=59.0] Good Matchs DMatch [queryIdx=157, trainIdx=185, imgIdx=0, distance=51.0] Good Matchs DMatch [queryIdx=158, trainIdx=178, imgIdx=0, distance=30.0] Good Matchs DMatch [queryIdx=159, trainIdx=278, imgIdx=0, distance=53.0] Good Matchs DMatch [queryIdx=160, trainIdx=91, imgIdx=0, distance=62.0] Good Matchs DMatch [queryIdx=161, trainIdx=148, imgIdx=0, distance=59.0] Good Matchs DMatch [queryIdx=162, trainIdx=157, imgIdx=0, distance=63.0] Good Matchs DMatch [queryIdx=163, trainIdx=373, imgIdx=0, distance=73.0] Good Matchs DMatch [queryIdx=164, trainIdx=226, imgIdx=0, distance=48.0] Good Matchs DMatch [queryIdx=165, trainIdx=278, imgIdx=0, distance=64.0] Good Matchs DMatch [queryIdx=166, trainIdx=283, imgIdx=0, distance=62.0] Good Matchs DMatch [queryIdx=167, trainIdx=196, imgIdx=0, distance=64.0] Good Matchs DMatch [queryIdx=168, trainIdx=344, imgIdx=0, distance=59.0] Good Matchs DMatch [queryIdx=169, trainIdx=157, imgIdx=0, distance=53.0] Good Matchs DMatch [queryIdx=170, trainIdx=144, imgIdx=0, distance=79.0] Good Matchs DMatch [queryIdx=171, trainIdx=154, imgIdx=0, distance=61.0] Good Matchs DMatch [queryIdx=172, trainIdx=211, imgIdx=0, distance=75.0] Good Matchs DMatch [queryIdx=173, trainIdx=279, imgIdx=0, distance=64.0] Good Matchs DMatch [queryIdx=174, trainIdx=211, imgIdx=0, distance=79.0] Good Matchs DMatch [queryIdx=175, trainIdx=220, imgIdx=0, distance=68.0] Good Matchs DMatch [queryIdx=176, trainIdx=218, imgIdx=0, distance=45.0] Good Matchs DMatch [queryIdx=177, trainIdx=289, imgIdx=0, distance=75.0] Good Matchs DMatch [queryIdx=178, trainIdx=223, imgIdx=0, distance=63.0] Good Matchs DMatch [queryIdx=179, trainIdx=57, imgIdx=0, distance=65.0] Good Matchs DMatch [queryIdx=180, trainIdx=36, imgIdx=0, distance=73.0] Good Matchs DMatch [queryIdx=181, trainIdx=111, imgIdx=0, distance=72.0] Good Matchs DMatch [queryIdx=182, trainIdx=93, imgIdx=0, distance=65.0] Good Matchs DMatch [queryIdx=183, trainIdx=137, imgIdx=0, distance=63.0] Good Matchs DMatch [queryIdx=184, trainIdx=157, imgIdx=0, distance=60.0] Good Matchs DMatch [queryIdx=185, trainIdx=72, imgIdx=0, distance=61.0] Good Matchs DMatch [queryIdx=186, trainIdx=172, imgIdx=0, distance=47.0] Good Matchs DMatch [queryIdx=187, trainIdx=279, imgIdx=0, distance=69.0] Good Matchs DMatch [queryIdx=188, trainIdx=72, imgIdx=0, distance=55.0] Good Matchs DMatch [queryIdx=189, trainIdx=96, imgIdx=0, distance=61.0] Good Matchs DMatch [queryIdx=190, trainIdx=220, imgIdx=0, distance=68.0] Good Matchs DMatch [queryIdx=191, trainIdx=93, imgIdx=0, distance=48.0] Good Matchs DMatch [queryIdx=192, trainIdx=279, imgIdx=0, distance=54.0] Good Matchs DMatch [queryIdx=193, trainIdx=157, imgIdx=0, distance=54.0] Good Matchs DMatch [queryIdx=194, trainIdx=91, imgIdx=0, distance=65.0] Good Matchs DMatch [queryIdx=195, trainIdx=278, imgIdx=0, distance=66.0] Good Matchs DMatch [queryIdx=196, trainIdx=220, imgIdx=0, distance=57.0] Good Matchs DMatch [queryIdx=197, trainIdx=74, imgIdx=0, distance=63.0] Good Matchs DMatch [queryIdx=198, trainIdx=93, imgIdx=0, distance=34.0] Good Matchs DMatch [queryIdx=199, trainIdx=81, imgIdx=0, distance=53.0] Good Matchs DMatch [queryIdx=200, trainIdx=93, imgIdx=0, distance=45.0] Good Matchs DMatch [queryIdx=201, trainIdx=90, imgIdx=0, distance=52.0] Good Matchs DMatch [queryIdx=202, trainIdx=93, imgIdx=0, distance=52.0] Good Matchs DMatch [queryIdx=203, trainIdx=94, imgIdx=0, distance=42.0] Good Matchs DMatch [queryIdx=204, trainIdx=93, imgIdx=0, distance=35.0] Good Matchs DMatch [queryIdx=205, trainIdx=94, imgIdx=0, distance=44.0] Good Matchs DMatch [queryIdx=206, trainIdx=90, imgIdx=0, distance=72.0] Good Matchs DMatch [queryIdx=207, trainIdx=179, imgIdx=0, distance=54.0] Good Matchs DMatch [queryIdx=208, trainIdx=92, imgIdx=0, distance=48.0] Good Matchs DMatch [queryIdx=209, trainIdx=91, imgIdx=0, distance=61.0] Good Matchs DMatch [queryIdx=210, trainIdx=119, imgIdx=0, distance=77.0] Good Matchs DMatch [queryIdx=211, trainIdx=227, imgIdx=0, distance=66.0] Good Matchs DMatch [queryIdx=212, trainIdx=186, imgIdx=0, distance=56.0] Good Matchs DMatch [queryIdx=213, trainIdx=96, imgIdx=0, distance=69.0] Good Matchs DMatch [queryIdx=214, trainIdx=77, imgIdx=0, distance=52.0] Good Matchs DMatch [queryIdx=215, trainIdx=372, imgIdx=0, distance=67.0] Good Matchs DMatch [queryIdx=216, trainIdx=334, imgIdx=0, distance=69.0] Good Matchs DMatch [queryIdx=217, trainIdx=278, imgIdx=0, distance=67.0] Good Matchs DMatch [queryIdx=218, trainIdx=325, imgIdx=0, distance=61.0] Good Matchs DMatch [queryIdx=219, trainIdx=188, imgIdx=0, distance=60.0] Good Matchs DMatch [queryIdx=220, trainIdx=340, imgIdx=0, distance=56.0] Good Matchs DMatch [queryIdx=221, trainIdx=72, imgIdx=0, distance=64.0] Good Matchs DMatch [queryIdx=222, trainIdx=278, imgIdx=0, distance=69.0] Good Matchs DMatch [queryIdx=223, trainIdx=221, imgIdx=0, distance=72.0] Good Matchs DMatch [queryIdx=224, trainIdx=339, imgIdx=0, distance=74.0] Good Matchs DMatch [queryIdx=225, trainIdx=155, imgIdx=0, distance=66.0] Good Matchs DMatch [queryIdx=226, trainIdx=278, imgIdx=0, distance=56.0] Good Matchs DMatch [queryIdx=227, trainIdx=165, imgIdx=0, distance=78.0] Good Matchs DMatch [queryIdx=228, trainIdx=279, imgIdx=0, distance=71.0] Good Matchs DMatch [queryIdx=229, trainIdx=355, imgIdx=0, distance=65.0] Good Matchs DMatch [queryIdx=231, trainIdx=69, imgIdx=0, distance=80.0] Good Matchs DMatch [queryIdx=232, trainIdx=278, imgIdx=0, distance=65.0] Good Matchs DMatch [queryIdx=233, trainIdx=65, imgIdx=0, distance=71.0] Good Matchs DMatch [queryIdx=234, trainIdx=93, imgIdx=0, distance=79.0] Good Matchs DMatch [queryIdx=235, trainIdx=203, imgIdx=0, distance=78.0] Good Matchs DMatch [queryIdx=236, trainIdx=159, imgIdx=0, distance=70.0] Good Matchs DMatch [queryIdx=237, trainIdx=93, imgIdx=0, distance=45.0] Good Matchs DMatch [queryIdx=238, trainIdx=172, imgIdx=0, distance=58.0] Good Matchs DMatch [queryIdx=239, trainIdx=374, imgIdx=0, distance=67.0] Good Matchs DMatch [queryIdx=240, trainIdx=278, imgIdx=0, distance=59.0] Good Matchs DMatch [queryIdx=241, trainIdx=223, imgIdx=0, distance=55.0] Good Matchs DMatch [queryIdx=242, trainIdx=365, imgIdx=0, distance=58.0] Good Matchs DMatch [queryIdx=243, trainIdx=91, imgIdx=0, distance=62.0] Good Matchs DMatch [queryIdx=244, trainIdx=238, imgIdx=0, distance=57.0] Good Matchs DMatch [queryIdx=245, trainIdx=299, imgIdx=0, distance=62.0] Good Matchs DMatch [queryIdx=246, trainIdx=289, imgIdx=0, distance=63.0] Good Matchs DMatch [queryIdx=247, trainIdx=93, imgIdx=0, distance=41.0] Good Matchs DMatch [queryIdx=249, trainIdx=5, imgIdx=0, distance=56.0] Good Matchs DMatch [queryIdx=250, trainIdx=93, imgIdx=0, distance=53.0] Good Matchs DMatch [queryIdx=251, trainIdx=93, imgIdx=0, distance=34.0] Good Matchs DMatch [queryIdx=252, trainIdx=97, imgIdx=0, distance=34.0] Good Matchs DMatch [queryIdx=253, trainIdx=93, imgIdx=0, distance=37.0] Good Matchs DMatch [queryIdx=254, trainIdx=174, imgIdx=0, distance=55.0] Good Matchs DMatch [queryIdx=255, trainIdx=91, imgIdx=0, distance=72.0] Good Matchs DMatch [queryIdx=256, trainIdx=81, imgIdx=0, distance=59.0] Good Matchs DMatch [queryIdx=257, trainIdx=92, imgIdx=0, distance=57.0] Good Matchs DMatch [queryIdx=258, trainIdx=212, imgIdx=0, distance=76.0] Good Matchs DMatch [queryIdx=259, trainIdx=119, imgIdx=0, distance=67.0] Good Matchs DMatch [queryIdx=260, trainIdx=228, imgIdx=0, distance=73.0] Good Matchs DMatch [queryIdx=261, trainIdx=119, imgIdx=0, distance=68.0] Good Matchs DMatch [queryIdx=263, trainIdx=266, imgIdx=0, distance=74.0] Good Matchs DMatch [queryIdx=264, trainIdx=319, imgIdx=0, distance=72.0] Good Matchs DMatch [queryIdx=265, trainIdx=157, imgIdx=0, distance=76.0] Good Matchs DMatch [queryIdx=266, trainIdx=365, imgIdx=0, distance=65.0] Good Matchs DMatch [queryIdx=267, trainIdx=341, imgIdx=0, distance=76.0] Good Matchs DMatch [queryIdx=268, trainIdx=303, imgIdx=0, distance=63.0] Good Matchs DMatch [queryIdx=269, trainIdx=313, imgIdx=0, distance=69.0] Good Matchs DMatch [queryIdx=271, trainIdx=350, imgIdx=0, distance=62.0] Good Matchs DMatch [queryIdx=272, trainIdx=313, imgIdx=0, distance=68.0] Good Matchs DMatch [queryIdx=278, trainIdx=267, imgIdx=0, distance=69.0] Good Matchs DMatch [queryIdx=280, trainIdx=223, imgIdx=0, distance=71.0] Good Matchs DMatch [queryIdx=281, trainIdx=267, imgIdx=0, distance=71.0] Good Matchs DMatch [queryIdx=283, trainIdx=334, imgIdx=0, distance=72.0] Good Matchs DMatch [queryIdx=284, trainIdx=313, imgIdx=0, distance=63.0] Good Matchs DMatch [queryIdx=285, trainIdx=78, imgIdx=0, distance=76.0] Good Matchs DMatch [queryIdx=286, trainIdx=312, imgIdx=0, distance=73.0] Good Matchs DMatch [queryIdx=287, trainIdx=271, imgIdx=0, distance=68.0] Good Matchs DMatch [queryIdx=288, trainIdx=170, imgIdx=0, distance=64.0] Good Matchs DMatch [queryIdx=289, trainIdx=278, imgIdx=0, distance=64.0] Good Matchs DMatch [queryIdx=290, trainIdx=282, imgIdx=0, distance=70.0] Good Matchs DMatch [queryIdx=291, trainIdx=91, imgIdx=0, distance=65.0] Good Matchs DMatch [queryIdx=292, trainIdx=334, imgIdx=0, distance=67.0] Good Matchs DMatch [queryIdx=293, trainIdx=80, imgIdx=0, distance=72.0] Good Matchs DMatch [queryIdx=294, trainIdx=92, imgIdx=0, distance=47.0] Good Matchs DMatch [queryIdx=295, trainIdx=301, imgIdx=0, distance=44.0] Good Matchs DMatch [queryIdx=297, trainIdx=220, imgIdx=0, distance=78.0] Good Matchs DMatch [queryIdx=298, trainIdx=374, imgIdx=0, distance=76.0] Good Matchs DMatch [queryIdx=300, trainIdx=329, imgIdx=0, distance=74.0] Good Matchs DMatch [queryIdx=302, trainIdx=285, imgIdx=0, distance=77.0] Good Matchs DMatch [queryIdx=305, trainIdx=271, imgIdx=0, distance=80.0] Good Matchs DMatch [queryIdx=307, trainIdx=350, imgIdx=0, distance=76.0] Good Matchs DMatch [queryIdx=308, trainIdx=320, imgIdx=0, distance=71.0] Good Matchs DMatch [queryIdx=309, trainIdx=163, imgIdx=0, distance=76.0] Good Matchs DMatch [queryIdx=310, trainIdx=170, imgIdx=0, distance=73.0] Good Matchs DMatch [queryIdx=311, trainIdx=357, imgIdx=0, distance=65.0] Good Matchs DMatch [queryIdx=312, trainIdx=320, imgIdx=0, distance=62.0] Good Matchs DMatch [queryIdx=314, trainIdx=342, imgIdx=0, distance=75.0] Good Matchs DMatch [queryIdx=315, trainIdx=162, imgIdx=0, distance=72.0] Good Matchs DMatch [queryIdx=316, trainIdx=239, imgIdx=0, distance=74.0] Good Matchs DMatch [queryIdx=317, trainIdx=171, imgIdx=0, distance=56.0] Good Matchs DMatch [queryIdx=318, trainIdx=244, imgIdx=0, distance=61.0] Good Matchs DMatch [queryIdx=319, trainIdx=369, imgIdx=0, distance=77.0] Good Matchs DMatch [queryIdx=320, trainIdx=346, imgIdx=0, distance=67.0] Good Matchs DMatch [queryIdx=322, trainIdx=158, imgIdx=0, distance=78.0] Good Matchs DMatch [queryIdx=325, trainIdx=92, imgIdx=0, distance=73.0] Good Matchs DMatch [queryIdx=326, trainIdx=236, imgIdx=0, distance=76.0] Good Matchs DMatch [queryIdx=327, trainIdx=162, imgIdx=0, distance=70.0] 

El número de partidos que obtengo es el mismo para la misma imagen, así como para diferentes imágenes Estoy realmente confundido? ¿Puedes explicar cómo comparar dos imágenes y decir si son similares o no usando OpenCV

Aquí es algo que estoy tratando de lograr

Puesto que usted está utilizando matcher BRUTEFORCE siempre obtendrá mejores coincidencias posibles para todos los descriptores de punto clave de su consulta (plantilla) en su tren (imagen que contiene consulta). Es decir: el buscador de BRUTEFORCE siempre encontrará coincidencias de 100% (mejores puntos equivalentes para todos los descriptores de puntos clave de la consulta en descriptores de tren).

Esto significa que debe filtrar los partidos como coincidencias correctas (inliers) y coincidencias incorrectas (outliers).

Puedes hacerlo de dos maneras

1.Cálculo de la distancia

Usando la distancia como mencionó Andrey Smorodov. Puede utilizar este método (pero esto no siempre proporciona resultados correctos)

 List<DMatch> matchesList = matches.toList(); Double max_dist = 0.0; Double min_dist = 100.0; for (int i = 0; i < matchesList.size(); i++) { Double dist = (double) matchesList.get(i).distance; if (dist < min_dist) min_dist = dist; if (dist > max_dist) max_dist = dist; } LinkedList<DMatch> good_matches = new LinkedList<DMatch>(); for (int i = 0; i < matchesList.size(); i++) { if (matchesList.get(i).distance <= (3 * min_dist)) // change the limit as you desire good_matches.addLast(matchesList.get(i)); } 

2.Determine Mask

Usted puede utilizar la findHomography para obtener la máscara que le permite encontrar los inliers y outliers claramente (puesto que considera en perspectiva de la cámara de pose de la cámara es casi correcto)

  LinkedList<Point> objList = new LinkedList<Point>(); LinkedList<Point> sceneList = new LinkedList<Point>(); List<KeyPoint> keypoints_RefList = keypointsRef.toList(); List<KeyPoint> keypoints_List = keypoints.toList(); for (int i = 0; i < good_matches.size(); i++) { objList.addLast(keypoints_RefList.get(good_matches.get(i).queryIdx).pt); sceneList.addLast(keypoints_List.get(good_matches.get(i).trainIdx).pt); } MatOfPoint2f obj = new MatOfPoint2f(); MatOfPoint2f scene = new MatOfPoint2f(); obj.fromList(objList); scene.fromList(sceneList); Mat mask = new Mat(); Mat hg = Calib3d.findHomography(obj, scene, 8, 10, mask); 

Ahora la máscara es una salida opcional en findHomography que es una matriz de valor 1 o 0 cada uno para cada coincidencia. El valor de máscara para la coincidencia correspondiente es 1 si es un inlier y 0 si es un outlier.

Usted puede usar esto como un criterio para decidir si tiene casi el 90% de la máscara para ser 1, entonces usted puede tener la salida para ser verdad.

Lo uso en el reconocimiento de objetos específicos de Android marco de cámara java y obtuvo estos resultados de registro

 08-22 01:08:38.929: I/OCVSample::Activity(25799): Keypoints Size: 1x477 KeypointsRef Size : 1x165 08-22 01:08:39.049: I/OCVSample::Activity(25799): descriptor Size: 32x477 descriptorRef Size : 32x165 08-22 01:08:39.129: I/OCVSample::Activity(25799): Matches Size: 1x165 08-22 01:08:39.129: I/OCVSample::Activity(25799): matchesList Size: 165 08-22 01:08:39.139: I/OCVSample::Activity(25799): Max dist : 460.44110107421875 Min dist : 100.0 08-22 01:08:39.139: I/OCVSample::Activity(25799): good matches size: 19 08-22 01:08:39.139: I/OCVSample::Activity(25799): obj size : 1x165 08-22 01:08:39.139: I/OCVSample::Activity(25799): scene size : 1x165 08-22 01:08:40.239: I/OCVSample::Activity(25799): Homography mask size : 1x165 08-22 01:08:40.239: I/OCVSample::Activity(25799): Homography mask : [1; 1; 1; 1; 1; 1; 1; 0; 1; 0; 1; 1; 1; 1; 0; 1; 1; 1; 0; 1; 1; 1; 1; 0; 1; 0; 1; 1; 1; 1; 1; 1; 0; 0; 1; 1; 1; 1; 0; 1; 0; 1; 1; 1; 1; 1; 0; 1; 1; 1; 1; 1; 1; 1; 0; 1; 1; 0; 1; 0; 1; 0; 0; 1; 0; 1; 1; 1; 1; 1; 1; 1; 0; 1; 1; 1; 1; 1; 0; 1; 1; 1; 1; 0; 0; 1; 1; 0; 1; 1; 1; 1; 0; 1; 0; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 0; 1; 1; 1; 1; 0; 0; 0; 1; 0; 1; 1; 1; 1; 0; 0; 1; 1; 1; 1; 1; 0; 1; 0; 1; 1; 0; 1; 0; 1; 1; 1; 1; 1; 1; 0; 1; 1; 0; 1; 1; 1; 1; 0; 1; 1; 1; 1; 1; 1; 1; 0; 1; 1; 0; 0; 1; 1] 

3. Sin embargo, otro enfoque más simple sería comparar el histograma de las dos imágenes para esto se puede utilizar compHist (); Función de openCV como se muestra aquí y también se refieren a documentos openCV.

Varios métodos en el histograma de comparación da rango de salida de 0 a 1 o mayor valor, esta salida depende de la similitud entre los histogramas. Cuidado en algunos métodos 1 es coincidencia positiva del 100% y 0 en algún otro método. "Para el método del chi-cuadrado una puntuación baja representa una mejor coincidencia que una puntuación alta.Una coincidencia perfecta es 0 y un desajuste total no tiene límites (dependiendo del tamaño del histograma)".

Resto: – Dos imágenes completamente diferentes pueden tener exactamente el mismo valor de histograma.

Consejos:

1.Now en relación con knnMatch sólo uso matcher.knnMatch (); Y los tipos de datos apropiados para la salida.

2. También en

  matcher.match(query, train, matches); 

La consulta => descriptores del punto clave para la plantilla, por ejemplo. Una bola y

El tren => descriptor de punto clave para la imagen que contiene la misma pelota en ella. El no del descriptor de la consulta es menos que ningún del descriptor del tren se cerciora de usted conseguir este derecho.

Ahora buena suerte.

Matcher sólo busca el gráfico más cercano del keypoints. Para la diferencia de medida se necesita usar (promedio) la suma (u otra métrica) de las distancias.

  • Error de aserción (scn == 3 || scn == 4) en void cv :: cvtColor (cv :: InputArray Android
  • Reconocimiento de monedas en Android
  • Uso no libre (SIFT, SURF) en android con java
  • Reconocimiento y seguimiento de objetos en movimiento más rápido en Android
  • Cómo ejecutar openCV relacionados con la aplicación, sin utilizar OpenCV manager en android
  • Imagen de limpieza para ayudar a tesseract en Android
  • Visualización de imagen de mapa de bits en Android (OpenCV)
  • OpenCV: detección de puntos / discos circulares de dominó
  • Obtener la longitud focal de la cámara OpenCV Android
  • Cómo obtener GNU C en las preferencias
  • Detecta el movimiento de una persona e identifica sus partes del cuerpo moviéndose hacia la cámara en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.