option to use global binning

This commit is contained in:
2023-01-29 12:51:17 +00:00
parent b8fdf26750
commit 798bf1367d
+18 -11
View File
@@ -67,7 +67,7 @@ def get_bins(values, nr_of_bins):
return bins return bins
def generate_curvatures(folder, frame, neighbourhoods=[25], nr_of_labels=6): def generate_curvatures(folder, frame, bins, neighbourhoods=[25], nr_of_labels=6):
id = frame.split('_')[0] id = frame.split('_')[0]
frame_nr = int(frame.split('_')[1].split('.')[0]) frame_nr = int(frame.split('_')[1].split('.')[0])
@@ -98,20 +98,20 @@ def generate_curvatures(folder, frame, neighbourhoods=[25], nr_of_labels=6):
cloud.add_scalar_field("curvature", ev=ev) cloud.add_scalar_field("curvature", ev=ev)
curvature = np.array(cloud.points["curvature(" + str(neighbourhood+1) + ")"]) curvature = np.array(cloud.points["curvature(" + str(neighbourhood+1) + ")"])
bins = get_bins(curvature, nr_of_labels) bins_local = bins[neighbourhood] if bins is not None else get_bins(curvature, nr_of_labels)
labels = np.linspace(0, bins.shape[0] - 2, bins.shape[0] - 1) labels = np.linspace(0, bins_local.shape[0] - 2, bins_local.shape[0] - 1)
frame_labels = np.zeros((curvature.shape[0]), dtype=np.float32) frame_labels = np.zeros((curvature.shape[0]), dtype=np.float32)
for j in range(bins.shape[0] - 2): for j in range(bins_local.shape[0] - 2):
frame_labels[(curvature >= bins[j]) * (curvature < bins[j+1])] = labels[j] frame_labels[(curvature >= bins_local[j]) * (curvature < bins_local[j+1])] = labels[j]
frame_labels[curvature >= bins[-2]] = labels[-1] frame_labels[curvature >= bins_local[-2]] = labels[-1]
curvatures.append(frame_labels) curvatures.append(frame_labels)
return curvatures return curvatures
def visualize_curvature_labels(folder, frame, neighbourhoods): def visualize_curvature_labels(folder, frame, bins, neighbourhoods):
id = frame.split('_')[0] id = frame.split('_')[0]
frame_nr = frame.split('_')[1].split('.')[0] frame_nr = frame.split('_')[1].split('.')[0]
@@ -119,7 +119,7 @@ def visualize_curvature_labels(folder, frame, neighbourhoods):
_, faces = _maskFaces(np.zeros((14475,3)), F, mask) _, faces = _maskFaces(np.zeros((14475,3)), F, mask)
verts = np.load(os.path.join(folder, 'mesh_posed', f'{id}_{frame_nr}.npz'))['mesh_posed'][mask,:] verts = np.load(os.path.join(folder, 'mesh_posed', f'{id}_{frame_nr}.npz'))['mesh_posed'][mask,:]
curvature_labels_all = generate_curvatures(folder, frame, neighbourhoods) curvature_labels_all = generate_curvatures(folder, frame, bins, neighbourhoods)
colors_binned_all = [] colors_binned_all = []
for curvature_labels in curvature_labels_all: for curvature_labels in curvature_labels_all:
@@ -166,7 +166,7 @@ def visualize_curvature_labels(folder, frame, neighbourhoods):
scene2_aspectmode='manual', scene2_aspectratio=dict(x=1, y=1, z=1), scene2_aspectmode='manual', scene2_aspectratio=dict(x=1, y=1, z=1),
scene3_aspectmode='manual', scene3_aspectratio=dict(x=1, y=1, z=1), scene3_aspectmode='manual', scene3_aspectratio=dict(x=1, y=1, z=1),
scene4_aspectmode='manual', scene4_aspectratio=dict(x=1, y=1, z=1), scene4_aspectmode='manual', scene4_aspectratio=dict(x=1, y=1, z=1),
scene5_aspectmode='manual', scene5_aspectratio=dict(x=1, y=1, z=1), # scene5_aspectmode='manual', scene5_aspectratio=dict(x=1, y=1, z=1),
) )
helper = dict(xaxis = dict(nticks=4, range=[-1,1],), helper = dict(xaxis = dict(nticks=4, range=[-1,1],),
yaxis = dict(nticks=4, range=[-1,1],), yaxis = dict(nticks=4, range=[-1,1],),
@@ -175,7 +175,7 @@ def visualize_curvature_labels(folder, frame, neighbourhoods):
scene2 = helper, scene2 = helper,
scene3 = helper, scene3 = helper,
scene4 = helper, scene4 = helper,
scene5 = helper, # scene5 = helper,
) )
@@ -211,6 +211,13 @@ if __name__ == '__main__':
# k_neighbours(k=25) # k_neighbours(k=25)
folder = '/home/workspace/local-data/valid_skirt' folder = '/home/workspace/local-data/valid_skirt'
bins = dict()
bins[10] = np.load(f'custom_data/train_bins_skirt_10.npy')
bins[25] = np.load(f'custom_data/train_bins_skirt.npy')
bins[100] = np.load(f'custom_data/train_bins_skirt_100.npy')
bins = None
nr_of_labels = 6 nr_of_labels = 6
neighbourhood = 50 neighbourhood = 50
@@ -220,4 +227,4 @@ if __name__ == '__main__':
else: else:
dist = np.load('custom_data/dijkstra_skirt.npy') dist = np.load('custom_data/dijkstra_skirt.npy')
visualize_curvature_labels(folder, '02572_1', neighbourhoods=[10, 25, 50, 100]) visualize_curvature_labels(folder, '02572_1', bins, neighbourhoods=[10, 25, 100])