123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- import unittest
- import os
- import sys
- import numpy as np
- import cv2 as cv
- sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__),
- '..', '..')))
- from opencv_stitching.feature_detector import FeatureDetector
- from opencv_stitching.feature_matcher import FeatureMatcher
- from opencv_stitching.subsetter import Subsetter
- class TestImageRegistration(unittest.TestCase):
- def test_feature_detector(self):
- img1 = cv.imread("s1.jpg")
- default_number_of_keypoints = 500
- detector = FeatureDetector("orb")
- features = detector.detect_features(img1)
- self.assertEqual(len(features.getKeypoints()),
- default_number_of_keypoints)
- other_keypoints = 1000
- detector = FeatureDetector("orb", nfeatures=other_keypoints)
- features = detector.detect_features(img1)
- self.assertEqual(len(features.getKeypoints()), other_keypoints)
- def test_feature_matcher(self):
- img1, img2 = cv.imread("s1.jpg"), cv.imread("s2.jpg")
- detector = FeatureDetector("orb")
- features = [detector.detect_features(img1),
- detector.detect_features(img2)]
- matcher = FeatureMatcher()
- pairwise_matches = matcher.match_features(features)
- self.assertEqual(len(pairwise_matches), len(features)**2)
- self.assertGreater(pairwise_matches[1].confidence, 2)
- matches_matrix = FeatureMatcher.get_matches_matrix(pairwise_matches)
- self.assertEqual(matches_matrix.shape, (2, 2))
- conf_matrix = FeatureMatcher.get_confidence_matrix(pairwise_matches)
- self.assertTrue(np.array_equal(
- conf_matrix > 2,
- np.array([[False, True], [True, False]])
- ))
- def test_subsetting(self):
- img1, img2 = cv.imread("s1.jpg"), cv.imread("s2.jpg")
- img3, img4 = cv.imread("boat1.jpg"), cv.imread("boat2.jpg")
- img5 = cv.imread("boat3.jpg")
- img_names = ["s1.jpg", "s2.jpg", "boat1.jpg", "boat2.jpg", "boat3.jpg"]
- detector = FeatureDetector("orb")
- features = [detector.detect_features(img1),
- detector.detect_features(img2),
- detector.detect_features(img3),
- detector.detect_features(img4),
- detector.detect_features(img5)]
- matcher = FeatureMatcher()
- pairwise_matches = matcher.match_features(features)
- subsetter = Subsetter(confidence_threshold=1,
- matches_graph_dot_file="dot_graph.txt") # view in https://dreampuf.github.io # noqa
- indices = subsetter.get_indices_to_keep(features, pairwise_matches)
- indices_to_delete = subsetter.get_indices_to_delete(len(img_names),
- indices)
- np.testing.assert_array_equal(indices, np.array([2, 3, 4]))
- np.testing.assert_array_equal(indices_to_delete, np.array([0, 1]))
- subsetted_image_names = subsetter.subset_list(img_names, indices)
- self.assertEqual(subsetted_image_names,
- ['boat1.jpg', 'boat2.jpg', 'boat3.jpg'])
- matches_subset = subsetter.subset_matches(pairwise_matches, indices)
- # FeatureMatcher.get_confidence_matrix(pairwise_matches)
- # FeatureMatcher.get_confidence_matrix(subsetted_matches)
- self.assertEqual(pairwise_matches[13].confidence,
- matches_subset[1].confidence)
- graph = subsetter.get_matches_graph(img_names, pairwise_matches)
- self.assertTrue(graph.startswith("graph matches_graph{"))
- subsetter.save_matches_graph_dot_file(img_names, pairwise_matches)
- with open('dot_graph.txt', 'r') as file:
- graph = file.read()
- self.assertTrue(graph.startswith("graph matches_graph{"))
- def starttest():
- unittest.main()
- if __name__ == "__main__":
- starttest()
|