Commit 18073af0 authored by jay's avatar jay
Browse files

Updates to add csmapi and missing func

parent 8ba90cbb
Loading
Loading
Loading
Loading
+6 −15
Original line number Diff line number Diff line
@@ -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
@@ -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)
@@ -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:
@@ -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)
+11 −0
Original line number Diff line number Diff line
@@ -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