Loading autocnet/graph/node.py +6 −15 Original line number Diff line number Diff line Loading @@ -3,6 +3,7 @@ import itertools import os import warnings from csmapi import csmapi import numpy as np import pandas as pd from plio.io.io_gdal import GeoDataset Loading Loading @@ -316,15 +317,6 @@ class Node(dict, MutableMapping): pass def extract_features(self, array, xystart=[], camera=None, *args, **kwargs): arraysize = array.shape[0] * array.shape[1] try: maxsize = self.maxsize[0] * self.maxsize[1] except: maxsize = np.inf if arraysize > maxsize: warnings.warn('Node: {}. Maximum feature extraction array size is {}. Maximum array size is {}. Please use tiling or downsampling.'.format(self['node_id'], maxsize, arraysize)) new_keypoints, new_descriptors = Node._extract_features(array, *args, **kwargs) count = len(self.keypoints) Loading @@ -335,22 +327,19 @@ class Node(dict, MutableMapping): new_keypoints['y'] += xystart[1] concat_kps = pd.concat((self.keypoints, new_keypoints)) descriptor_mask = concat_kps.duplicated(keep='last') concat_kps.reset_index(inplace=True, drop=True) concat_kps.drop_duplicates(inplace=True) #descriptor_mask = descriptor_mask[count:] # Removed duplicated and re-index the merged keypoints if self.descriptors is not None: concat = np.concatenate((self.descriptors, new_descriptors)) new_descriptors = concat[concat_kps.index] new_descriptors = concat[concat_kps.index.values] self.descriptors = new_descriptors self.keypoints = concat_kps lkps = len(self.keypoints) print(lkps, len(self.descriptors)) assert lkps == len(self.descriptors) if lkps > 0: Loading Loading @@ -407,8 +396,10 @@ class Node(dict, MutableMapping): # Project the sift keypoints to the ground def func(row, args): camera = args[0] gnd = getattr(camera, 'imageToGround')(row[1], row[0], 0) return gnd imagecoord = csmapi.ImageCoord(float(row[1]), float(row[0])) # An elevation at the ellipsoid is plenty accurate for this work gnd = getattr(camera, 'imageToGround')(imagecoord, 0) return [gnd.x, gnd.y, gnd.z] feats = self.keypoints[['x', 'y']].values gnd = np.apply_along_axis(func, 1, feats, args=(self.camera, )) gnd = pd.DataFrame(gnd, columns=['xm', 'ym', 'zm'], index=self.keypoints.index) Loading autocnet/io/keypoints.py +11 −0 Original line number Diff line number Diff line Loading @@ -187,3 +187,14 @@ def to_npy(keypoints, descriptors, out_path): keypoints=keypoints, keypoints_idx=keypoints.index, keypoints_columns=keypoints.columns) def create_output_path(ds, outdir=None): image_name = os.path.basename(ds.file_name) image_path = os.path.dirname(ds.file_name) if outdir is None: outh5 = os.path.join(image_path, image_name + '_kps.h5') else: outh5 = os.path.join(outdir, image_name + '_kps.h5') return outh5 Loading
autocnet/graph/node.py +6 −15 Original line number Diff line number Diff line Loading @@ -3,6 +3,7 @@ import itertools import os import warnings from csmapi import csmapi import numpy as np import pandas as pd from plio.io.io_gdal import GeoDataset Loading Loading @@ -316,15 +317,6 @@ class Node(dict, MutableMapping): pass def extract_features(self, array, xystart=[], camera=None, *args, **kwargs): arraysize = array.shape[0] * array.shape[1] try: maxsize = self.maxsize[0] * self.maxsize[1] except: maxsize = np.inf if arraysize > maxsize: warnings.warn('Node: {}. Maximum feature extraction array size is {}. Maximum array size is {}. Please use tiling or downsampling.'.format(self['node_id'], maxsize, arraysize)) new_keypoints, new_descriptors = Node._extract_features(array, *args, **kwargs) count = len(self.keypoints) Loading @@ -335,22 +327,19 @@ class Node(dict, MutableMapping): new_keypoints['y'] += xystart[1] concat_kps = pd.concat((self.keypoints, new_keypoints)) descriptor_mask = concat_kps.duplicated(keep='last') concat_kps.reset_index(inplace=True, drop=True) concat_kps.drop_duplicates(inplace=True) #descriptor_mask = descriptor_mask[count:] # Removed duplicated and re-index the merged keypoints if self.descriptors is not None: concat = np.concatenate((self.descriptors, new_descriptors)) new_descriptors = concat[concat_kps.index] new_descriptors = concat[concat_kps.index.values] self.descriptors = new_descriptors self.keypoints = concat_kps lkps = len(self.keypoints) print(lkps, len(self.descriptors)) assert lkps == len(self.descriptors) if lkps > 0: Loading Loading @@ -407,8 +396,10 @@ class Node(dict, MutableMapping): # Project the sift keypoints to the ground def func(row, args): camera = args[0] gnd = getattr(camera, 'imageToGround')(row[1], row[0], 0) return gnd imagecoord = csmapi.ImageCoord(float(row[1]), float(row[0])) # An elevation at the ellipsoid is plenty accurate for this work gnd = getattr(camera, 'imageToGround')(imagecoord, 0) return [gnd.x, gnd.y, gnd.z] feats = self.keypoints[['x', 'y']].values gnd = np.apply_along_axis(func, 1, feats, args=(self.camera, )) gnd = pd.DataFrame(gnd, columns=['xm', 'ym', 'zm'], index=self.keypoints.index) Loading
autocnet/io/keypoints.py +11 −0 Original line number Diff line number Diff line Loading @@ -187,3 +187,14 @@ def to_npy(keypoints, descriptors, out_path): keypoints=keypoints, keypoints_idx=keypoints.index, keypoints_columns=keypoints.columns) def create_output_path(ds, outdir=None): image_name = os.path.basename(ds.file_name) image_path = os.path.dirname(ds.file_name) if outdir is None: outh5 = os.path.join(image_path, image_name + '_kps.h5') else: outh5 = os.path.join(outdir, image_name + '_kps.h5') return outh5