diff --git a/PyNutil/__init__.py b/PyNutil/__init__.py index d06a3077d1205d56f14e9d13e7ed4c213b92891b..5fa21b99274392acd213855ef937111e88107c31 100644 --- a/PyNutil/__init__.py +++ b/PyNutil/__init__.py @@ -1 +1 @@ -from .main import PyNutil +from .main import PyNutil \ No newline at end of file diff --git a/PyNutil/coordinate_extraction.py b/PyNutil/coordinate_extraction.py index 157bdc6ec736241f855f5895665a818fab761e17..3b9eddbee705ca09caf83ec8c64c8fcdaae55063 100644 --- a/PyNutil/coordinate_extraction.py +++ b/PyNutil/coordinate_extraction.py @@ -1,11 +1,9 @@ import numpy as np import pandas as pd -import json from .read_and_write import load_visualign_json -from .counting_and_load import label_points, flat_to_dataframe +from .counting_and_load import flat_to_dataframe from .visualign_deformations import triangulate, transform_vec from glob import glob -from tqdm import tqdm import cv2 from skimage import measure import threading @@ -210,12 +208,23 @@ def folder_to_atlas_space( [t.join() for t in threads] # Flatten points_list - points_len = [len(points) if points is not None else 0 for points in points_list] + points_len = [ + len(points) if None not in points else 0 for points in points_list + ] centroids_len = [ - len(centroids) if centroids is not None else 0 for centroids in centroids_list - ] - points = np.concatenate(points_list) - centroids = np.concatenate(centroids_list) + len(centroids) if None not in centroids else 0 for centroids in centroids_list + ] + points_list = [points for points in points_list if None not in points] + centroids_list = [centroids for centroids in centroids_list if None not in centroids] + if len(points_list) == 0: + points = np.array([]) + else: + points = np.concatenate(points_list) + if len(centroids_list) == 0: + centroids = np.array([]) + else: + centroids = np.concatenate(centroids_list) + return ( np.array(points), @@ -346,9 +355,7 @@ def segmentation_to_atlas_space( else: centroids = np.array([]) - print( - f"Finished and points len is: {len(points)} and centroids len is: {len(centroids)}" - ) + points_list[index] = np.array(points) centroids_list[index] = np.array(centroids) region_areas_list[index] = region_areas diff --git a/PyNutil/counting_and_load.py b/PyNutil/counting_and_load.py index 9da941f38dd223562d7d2d1d2a1e62a9e61ced8d..760e057916fd0a54a5e46de1eea8b859f1dd690a 100644 --- a/PyNutil/counting_and_load.py +++ b/PyNutil/counting_and_load.py @@ -1,9 +1,6 @@ import numpy as np import pandas as pd import struct -import matplotlib.pyplot as plt -import os -import nrrd import cv2 from .generate_target_slice import generate_target_slice diff --git a/PyNutil/load_workflow.py b/PyNutil/load_workflow.py index 96751967d5cc24649b959bd424bf65fa8ccc68a4..72ba0c3afb46b3b22a3b82855e7c42be9c2eded0 100644 --- a/PyNutil/load_workflow.py +++ b/PyNutil/load_workflow.py @@ -1,10 +1,7 @@ """Create workflow for calculating load based on atlas maps and segmentations""" -import struct -import matplotlib.pyplot as plt import pandas as pd import cv2 -import numpy as np # from read_and_write import flat_to_array, label_to_array from counting_and_load import flat_to_dataframe diff --git a/PyNutil/main.py b/PyNutil/main.py index 44ac2d42af716ec32be083f34175c81f13b708be..a64249af78a45846465ebc9544469f6ea942ba38 100644 --- a/PyNutil/main.py +++ b/PyNutil/main.py @@ -161,7 +161,7 @@ class PyNutil: raise ValueError( f"method {method} not recognised, valid methods are: per_pixel, per_object, or all" ) - print("extracting coordinates") + print("extracting coordinates with method:", method) ( pixel_points, centroids, @@ -188,6 +188,7 @@ class PyNutil: self.centroids_len = centroids_len self.segmentation_filenames = segmentation_filenames self.region_areas_list = region_areas_list + self.method = method def quantify_coordinates(self): """Quantifies the pixel coordinates by region. @@ -205,11 +206,11 @@ class PyNutil: print("quantifying coordinates") labeled_points_centroids = None labeled_points = None - if hasattr(self, "centroids"): + if self.method == "per_object" or self.method == "all": labeled_points_centroids = label_points( self.centroids, self.atlas_volume, scale_factor=1 ) - if hasattr(self, "pixel_points"): + if self.method == "per_pixel" or self.method == "all": labeled_points = label_points( self.pixel_points, self.atlas_volume, scale_factor=1 ) @@ -224,9 +225,9 @@ class PyNutil: for pl, cl, ra in zip( self.points_len, self.centroids_len, self.region_areas_list ): - if hasattr(self, "centroids"): + if self.method == "per_object" or self.method == "all": current_centroids = labeled_points_centroids[prev_cl : prev_cl + cl] - if hasattr(self, "pixel_points"): + if self.method == "per_pixel" or self.method == "all": current_points = labeled_points[prev_pl : prev_pl + pl] current_df = pixel_count_per_region( current_points, current_centroids, self.atlas_labels @@ -341,14 +342,14 @@ class PyNutil: na_rep="", index=False, ) - if hasattr(self, "pixel_points"): + if self.method == "per_pixel" or self.method == "all": write_points_to_meshview( self.pixel_points[prev_pl : pl + prev_pl], self.labeled_points[prev_pl : pl + prev_pl], f"{output_folder}/per_section_meshview/{split_fn}_pixels.json", self.atlas_labels, ) - if hasattr(self, "centroids"): + if self.method == "per_object" or self.method == "all": write_points_to_meshview( self.centroids[prev_cl : cl + prev_cl], self.labeled_points_centroids[prev_cl : cl + prev_cl], @@ -358,14 +359,14 @@ class PyNutil: prev_cl += cl prev_pl += pl - if hasattr(self, "pixel_points"): + if self.method == "per_pixel" or self.method == "all": write_points_to_meshview( self.pixel_points, self.labeled_points, f"{output_folder}/whole_series_meshview/pixels_meshview.json", self.atlas_labels, ) - if hasattr(self, "centroids"): + if self.method == "per_object" or self.method == "all": write_points_to_meshview( self.centroids, self.labeled_points_centroids, diff --git a/PyNutil/metadata/__init__.py b/PyNutil/metadata/__init__.py index b6e690fd59145ce8900fd9ab8d8a996ee7d33834..b9742821a6f164200bc145e7a847382f08778303 100644 --- a/PyNutil/metadata/__init__.py +++ b/PyNutil/metadata/__init__.py @@ -1 +1 @@ -from . import * +from . import * \ No newline at end of file diff --git a/PyNutil/metadata/metadata_loader.py b/PyNutil/metadata/metadata_loader.py index ae3361f7d15394ba1799ae800dfa3b3c867d0dc9..2763d5520f3f7d1e8f3274b84a7d0c7a6766dda8 100644 --- a/PyNutil/metadata/metadata_loader.py +++ b/PyNutil/metadata/metadata_loader.py @@ -1,6 +1,5 @@ import json from pathlib import Path -import os def load_config() -> dict: diff --git a/PyNutil/propagation.py b/PyNutil/propagation.py index 1f3b6432bcd319596048b7b8f75cd794f07c190f..d0ae3a6c2fde265092784a91b71b824754f81b69 100644 --- a/PyNutil/propagation.py +++ b/PyNutil/propagation.py @@ -2,6 +2,7 @@ import math, re def propagate(arr): + arr = arr.copy() for slice in arr: if "nr" not in slice: slice["nr"] = int(re.search(r"_s(\d+)", slice["filename"]).group(1)) @@ -12,7 +13,7 @@ def propagate(arr): count = 0 for slice in arr: if "anchoring" in slice: - a = slice["anchoring"].copy() + a = slice["anchoring"] for i in range(3): a[i] += (a[i + 3] + a[i + 6]) / 2 a.extend( diff --git a/PyNutil/read_and_write.py b/PyNutil/read_and_write.py index 8be7f08edb5092dbda87d49bb79b829a360a56c0..160e302c7a24edab204ad1868dda2dadf3d2630b 100644 --- a/PyNutil/read_and_write.py +++ b/PyNutil/read_and_write.py @@ -2,7 +2,6 @@ import json import numpy as np import struct import pandas as pd -import matplotlib.pyplot as plt import os import nrrd import re diff --git a/PyNutil/visualign_deformations.py b/PyNutil/visualign_deformations.py index 2caef65da9daec71c5aaf104d7923199ac85d694..75f9fa2f68f3bea0ec5e25575452e0d7dba24408 100644 --- a/PyNutil/visualign_deformations.py +++ b/PyNutil/visualign_deformations.py @@ -1,6 +1,5 @@ """This code was written by Gergely Csucs and Rembrandt Bakker""" import numpy as np -from scipy.spatial import Delaunay def triangulate(w, h, markers):