diff --git a/.gitignore b/.gitignore index 68787a8177f51b86162e68d12991aa189d5e5983..a5bc312c13cbc0b20920de4c9e80d5ba31f77a2a 100644 --- a/.gitignore +++ b/.gitignore @@ -160,4 +160,6 @@ cython_debug/ #.idea/ -outputs/ \ No newline at end of file +outputs/ + +fileForMessingAround.py \ No newline at end of file diff --git a/PyNutil/PyNutil.py b/PyNutil/PyNutil.py index d0df0b9c7c04de51d13ba9a2873559d0803d5bff..42853a0e64948012e4fdbc95b4af69ad222861da 100644 --- a/PyNutil/PyNutil.py +++ b/PyNutil/PyNutil.py @@ -2,7 +2,7 @@ import numpy as np from DeepSlice.coord_post_processing.spacing_and_indexing import number_sections import json -from VisuAlignWarpVec import triangulate, transform_vec +from visualign_deformations import triangulate, transform_vec from glob import glob from tqdm import tqdm import cv2 diff --git a/PyNutil/folder_of_segmentations_to_meshview.py b/PyNutil/folder_of_segmentations_to_meshview.py new file mode 100644 index 0000000000000000000000000000000000000000..6505920a5c4df96e5aa7ea3922794457ddbd97e0 --- /dev/null +++ b/PyNutil/folder_of_segmentations_to_meshview.py @@ -0,0 +1,84 @@ + +#pandas is used for working with csv files +import pandas as pd +#nrrd just lets us open nrrd files +import nrrd +import numpy as np +import csv + +from datetime import datetime + +#import our function for converting a folder of segmentations to points +from PyNutil import FolderToAtlasSpace, labelPoints, WritePointsToMeshview + +volume_path = "../annotation_volumes//annotation_10_reoriented.nrrd" +data, header = nrrd.read(volume_path) + +startTime = datetime.now() + +segmentation_folder = "../test_data/oneSection15/" +alignment_json = "../test_data/C68_nonlinear.json" +#now we can use our function to convert the folder of segmentations to points +points = FolderToAtlasSpace(segmentation_folder,alignment_json, pixelID=[255, 0, 255], nonLinear=True) +#first we need to find the label file for the volume +label_path = "../annotation_volumes//allen2022_colours.csv" +#then the path to the volume + +#read the label files +label_df = pd.read_csv(label_path) +#read the annotation volume, it also has a header but we don't need it +#now we can get the labels for each point +labels = labelPoints(points, data, scale_factor=2.5) +#save points to a meshview json +WritePointsToMeshview(points, labels,"../outputs/points.json", label_df) + +#Task: +# Make a pandas dataframe +# Column 1: counted_labels +# Column 2: label_counts +# Column 3: region_name (look up by reading Allen2022_colours.csv, look up name and RGB) +# Save dataframe in output as CSV +# next task is to create functions from this. +counted_labels, label_counts = np.unique(labels, return_counts=True) +counts_per_label = list(zip(counted_labels,label_counts)) + +df_counts_per_label = pd.DataFrame(counts_per_label, columns=["allenID","pixel count"]) + +allen_colours = "../annotation_volumes//allen2022_colours.csv" + +df_allen_colours =pd.read_csv(allen_colours, sep=",") +df_allen_colours + +#look up name, r, g, b in df_allen_colours in df_counts_per_label based on "allenID" +new_rows = [] +for index, row in df_counts_per_label.iterrows(): + mask = df_allen_colours["allenID"] == row["allenID"] + current_region_row = df_allen_colours[mask] + current_region_name = current_region_row["name"].values + current_region_red = current_region_row["r"].values + current_region_green = current_region_row["g"].values + current_region_blue = current_region_row["b"].values + + row["name"] = current_region_name[0] + row["r"] = current_region_red[0] + row["g"] = current_region_green[0] + row["b"] = current_region_blue[0] + + new_rows.append(row) + +df_counts_per_label_name = pd.DataFrame(new_rows) +df_counts_per_label_name + +# write to csv file +df_counts_per_label_name.to_csv("../outputs/counts_per_allenID.csv", sep=";", na_rep='', index= False) + +#r = df_allen_colours["r"] +#g = df_allen_colours["g"] +#b = df_allen_colours["b"] +#region_name = df_allen_colours["name"] + +#while we havent added it here it would be good to next quantify the number of cells for each label. + +time_taken = datetime.now() - startTime + +print(f"time taken was: {time_taken}") \ No newline at end of file diff --git a/workflows/folder_of_segmentations_to_meshview.py b/workflows/folder_of_segmentations_to_meshview.py deleted file mode 100644 index d90da81591fe38eb281b091cd06d0f0dc65be3a7..0000000000000000000000000000000000000000 --- a/workflows/folder_of_segmentations_to_meshview.py +++ /dev/null @@ -1,31 +0,0 @@ -#pandas is used for working with csv files -import pandas as pd -#nrrd just lets us open nrrd files -import nrrd - -#this is a hack to let us import as if we are in the parent directory -import sys -sys.path.append('..') -#import our function for converting a folder of segmentations to points -from PyNutil.PyNutil import FolderToAtlasSpace, labelPoints, WritePointsToMeshview - - -segmentation_folder = "../test_data/oneSection15/" -alignment_json = "../test_data/C68_nonlinear.json" -#now we can use our function to convert the folder of segmentations to points -points = FolderToAtlasSpace(segmentation_folder,alignment_json, pixelID=[255, 0, 255], nonLinear=True) -#first we need to find the label file for the volume -label_path = "../annotation_volumes//allen2022_colours.csv" -#then the path to the volume -volume_path = "../annotation_volumes//annotation_10_reoriented.nrrd" -#read the label file -label_df = pd.read_csv(label_path) -#read the annotation volume, it also has a header but we don't need it -data, header = nrrd.read(volume_path) -#now we can get the labels for each point -labels = labelPoints(points, data, scale_factor=2.5) -#save points to a meshview json -WritePointsToMeshview(points, labels,"../outputs/points.json", label_df) - -#while we havent added it here it would be good to next quantify the number of cells for each label. -