def getFeatures(f1,f2,o1,o2): #what to do with NaNs? res=[]; res2=[] for key in f1: if key == "Global<Maximum >" or key=="Global<Minimum >": #this ones have only one element res.append(f1[key]-f2[key]) res2.append(f1[key]*f2[key]) elif key == 'RegionCenter': res.append(np.linalg.norm(f1[key][o1]-f2[key][o2])) #difference of features res2.append(np.linalg.norm(f1[key][o1]*f2[key][o2])) #product of features elif key=='Histogram': #contains only zeros, so trying to see what the prediction is without it continue elif key == 'Polygon': #vect has always another length for different objects, so center would be relevant continue else: res.append((f1[key][o1]-f2[key][o2]).tolist() ) #prepare for flattening res2.append((f1[key][o1]*f2[key][o2]).tolist() ) #prepare for flattening x= np.asarray(flatten(res)) #flatten x2= np.asarray(flatten(res2)) #flatten #x= x[~np.isnan(x)] #x2= x2[~np.isnan(x2)] #not getting the nans out YET return np.concatenate((x,x2))
def addSample(self, f1, f2, label): #if self.labels == []: self.labels.append(label) #else: # self.labels = np.concatenate((np.array(self.labels),label)) # for adding batches of features res=[] res2=[] for key in selectedFeatures: if key == "Global<Maximum >" or key=="Global<Minimum >": # the global min/max intensity is not interesting continue elif key == 'RegionCenter': res.append(np.linalg.norm(f1[key]-f2[key])) #difference of features res2.append(np.linalg.norm(f1[key]*f2[key])) #product of features elif key == 'Histogram': #contains only zeros, so trying to see what the prediction is without it continue elif key == 'Polygon': #vect has always another length for different objects, so center would be relevant continue else: if not isinstance(f1[key], np.ndarray): res.append(float(f1[key]) - float(f2[key]) ) #prepare for flattening res2.append(float(f1[key]) * float(f2[key]) ) #prepare for flattening else: res.append((f1[key]-f2[key]).tolist() ) #prepare for flattening res2.append((f1[key]*f2[key]).tolist() ) #prepare for flattening x= np.asarray(flatten(res)) #flatten x2= np.asarray(flatten(res2)) #flatten assert(np.any(np.isnan(x)) == False) assert(np.any(np.isnan(x2)) == False) assert(np.any(np.isinf(x)) == False) assert(np.any(np.isinf(x2)) == False) #x= x[~np.isnan(x)] #x2= x2[~np.isnan(x2)] #not getting the nans out YET features = np.concatenate((x,x2)) if self.mydata is None: self.mydata = features else: self.mydata = np.vstack((self.mydata, features))