Ejemplo n.º 1
0
    def scene_features(self, feat, maxmem, i1, i2):
        try:
            ref_img, depth = self.render_scene(i1, i2)
        except InvalidSceneException:
            return None

        # get keypoints and descriptors
        ref_kp, ref_desc, self._latest_detector = KeypointAlgo.detect_features(ref_img, feat, maxmem=maxmem,
                                                                               max_feats=self.MAX_FEATURES, for_ref=True)

        # save only 2d image coordinates, scrap scale, orientation etc
        ref_kp_2d = np.array([p.pt for p in ref_kp], dtype='float32')

        # get 3d coordinates
        ref_kp_3d = KeypointAlgo.inverse_project(self.system_model, ref_kp_2d, depth, self.render_z, self._ref_img_sc)

        if False:
            mm_dist = self.system_model.min_med_distance
            if False:
                pos = (0, 0, -mm_dist)
                qfin = tools.ypr_to_q(sc_ast_lat, 0, sc_ast_lon)
                light_v = tools.spherical2cartesian(light_lat, light_lon, 1)
                reimg = self.render_engine.render(self.obj_idx, pos, qfin, light_v)
                reimg = cv2.cvtColor(reimg, cv2.COLOR_RGB2GRAY)
                img = np.concatenate((cv2.resize(ref_img, (self.system_model.view_width, self.system_model.view_height)), reimg), axis=1)
            else:
                ref_kp = [cv2.KeyPoint(*self._cam.calc_img_xy(x, -y, -z-mm_dist), 1) for x, y, z in ref_kp_3d]
                img = cv2.drawKeypoints(ref_img, ref_kp, ref_img.copy(), (0, 0, 255), flags=cv2.DRAW_MATCHES_FLAGS_DEFAULT)
            cv2.imshow('res', img)
            cv2.waitKey()

        return np.array(ref_desc), ref_kp_2d, ref_kp_3d
Ejemplo n.º 2
0
    elif method == 'all':
        feats = {
            KeypointAlgo.SIFT: 'sift',
            KeypointAlgo.SURF: 'surf',
            KeypointAlgo.ORB: 'orb',
            KeypointAlgo.AKAZE: 'akaze',
        }

    sm = RosettaSystemModel()
    re = RenderEngine(sm.cam.width, sm.cam.height)
    obj_idx = re.load_object(sm.asteroid.target_model_file)
    d = KeypointAlgo(sm, re, obj_idx)

    for feat, method in feats.items():
        if False:
            kp, desc, detector = d.detect_features(img, feat, 0, nfeats=100)
            out = cv2.drawKeypoints(
                img,
                kp,
                img.copy(), (0, 0, 255),
                flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
        else:
            d.FEATURE_FILTERING_RELATIVE_GRID_SIZE = 0.01
            d.FEATURE_FILTERING_FALLBACK_GRID_SIZE = 2
            ee = 0
            if len(sys.argv) <= 3 or sys.argv[3] == '2':
                d.FEATURE_FILTERING_SCHEME = d.FFS_SIMPLE_GRID
                ee = sm.pixel_extent(abs(sm.min_med_distance))
            elif sys.argv[3] == '1':
                d.FEATURE_FILTERING_SCHEME = d.FFS_SIMPLE_GRID
            else: