Задать вопрос
@gibsonen

Сравнить два изображения, используя orb дескрипторы?

подскажите, пожалуйста, в чем проблема. Нахожу ORB дискрипторы двух картинок, а потом сравниваю их расстояния. Но моя программа работает не правильно .

private static Mat countImage(String path) {
        Mat img1 = Imgcodecs.imread(path, Imgcodecs.CV_LOAD_IMAGE_GRAYSCALE);
        ORB orb = ORB.create();
        MatOfKeyPoint keypoints = new MatOfKeyPoint();
        Mat descriptors = new Mat();
        orb.detectAndCompute(img1, new Mat(), keypoints, descriptors);
        return descriptors;
    }

    private static void compareImages(String path1, String path2) {
        System.out.println(path1 + "-" + path2);

        Mat descriptors1 = countImage(path1);
        Mat descriptors2 = countImage(path2);

        DescriptorMatcher matcher = DescriptorMatcher.create(DescriptorMatcher.BRUTEFORCE_HAMMING);
        MatOfDMatch matches = new MatOfDMatch();
        matcher.match(descriptors1, descriptors2, matches);

        List<DMatch> matchesList = matches.toList();
        Double max_dist = 0.0;
        Double min_dist = 100.0;

        for (DMatch dMatch : matchesList) {
            Double dist = (double) dMatch.distance;
            if (dist < min_dist)
                min_dist = dist;
            if (dist > max_dist)
                max_dist = dist;
        }
        List<DMatch> good_matches = new ArrayList<>();
        for (DMatch aMatchesList : matchesList) {
            if (aMatchesList.distance <= (1.5 * min_dist))
                good_matches.add(aMatchesList);
        }
        good_matches.forEach(System.out::println);

    }


    public static void main(String[] args) {
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        compareImages("C:\\image\\5.jpg", "C:\\image\\6.jpg");
    }
}


Результат (картинки практические одинаковые, отличается только немного цветом):
DMatch [queryIdx=7, trainIdx=467, imgIdx=0, distance=64.0]
DMatch [queryIdx=9, trainIdx=281, imgIdx=0, distance=63.0]
DMatch [queryIdx=10, trainIdx=146, imgIdx=0, distance=64.0]
DMatch [queryIdx=21, trainIdx=487, imgIdx=0, distance=51.0]
DMatch [queryIdx=22, trainIdx=160, imgIdx=0, distance=55.0]
DMatch [queryIdx=24, trainIdx=114, imgIdx=0, distance=66.0]
DMatch [queryIdx=32, trainIdx=105, imgIdx=0, distance=64.0]
DMatch [queryIdx=33, trainIdx=348, imgIdx=0, distance=65.0]
DMatch [queryIdx=36, trainIdx=57, imgIdx=0, distance=66.0]
...]
]

Ниже проверяемые картинки
5cb2231dd2962494115987.jpeg5cb2232ab11c2639083044.jpeg
  • Вопрос задан
  • 148 просмотров
Подписаться 2 Простой 4 комментария
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы