From 3f26a0b4550210094b6aa99d2f04aaddd041e01e Mon Sep 17 00:00:00 2001 From: Argyris Z <azardilis@gmail.com> Date: Mon, 6 Jul 2020 12:19:53 +0100 Subject: [PATCH] TV convert functions + more types --- common/common/lin.py | 32 ++++++++++++++++++++++++++++++++ common/common/seg.py | 30 +++++++++++++++++++++--------- 2 files changed, 53 insertions(+), 9 deletions(-) diff --git a/common/common/lin.py b/common/common/lin.py index 3a93172..1825c7f 100644 --- a/common/common/lin.py +++ b/common/common/lin.py @@ -6,6 +6,7 @@ from common.seg import (Tissue, Vec3, readDataT1, readGeomT1, + readGeomIm, readRess, geneNms, readDataT1Im) @@ -361,6 +362,37 @@ def mkSeriesIm0(dataDir: str, return tss, linss +def mkSeriesGeomIm(dataDir: str, + fid: int = 1, + ft: Callable[[int], bool] = lambda x: True): + d = join(dataDir, "FM{fid}".format(fid=fid)) + linDataLoc = join(dataDir, "FM{fid}/tracking_data".format(fid=str(fid))) + ressFn = join(dataDir, "FM{fid}/resolutions.txt".format(fid=str(fid))) + + ress = readRess(ressFn.format(fid=str(fid))) + tpoints = [t for t in sorted(ress.keys()) if ft(t)] + + lins = mkLinsSeries1(readLins1(linDataLoc)) + tss = dict() + linss = dict() + + for t in tpoints: + print(t) + tss[t] = readGeomIm(d, t) + + for t1, t2 in zip(tpoints, tpoints[1:]): + print(t1, t2) + linss[(t1, t2)] = mergeLinss(list(map(lambda x: x[1], + between(lins, t1, t2)))) + + return tss, linss + + +def writeSeriesGeomTV(tss: Dict[int, Tissue], d: str): + for t, ts in tss.items(): + seg.writeTV(ts, d, "{t}h".format(t=str(t))) + + ################################### def invertMap(ln): iLin = [list(zip(ds, repeat(m, len(ds)))) for m, ds in ln.items()] diff --git a/common/common/seg.py b/common/common/seg.py index bd2d9fc..13c7567 100644 --- a/common/common/seg.py +++ b/common/common/seg.py @@ -3,6 +3,8 @@ import ast # type: ignore from tifffile import TiffFile # type: ignore from copy import deepcopy # type: ignore from typing import Tuple, Dict, TypeVar, Callable, List, Set, Iterator +from numpy import ndarray +from os.path import join T = TypeVar('T') @@ -374,7 +376,7 @@ class Tissue(): ns=repr(nids)) return "\n".join([toTVNeighCell(cid, neighs) - for cid, neighs in self.neighs.items()]) + for cid, neighs in self.neighs.items() if cid != 1]) def toTV(self) -> Tuple[str, str]: return (self.toTVGeom(), self.toTVNeigh()) @@ -500,7 +502,9 @@ def readImage(fseg: str): return seg -def readImageRegionPoints(fseg, res=[1, 1, 1], d=2): +def readImageRegionPoints(fseg: str, + res: List[float] = [1, 1, 1], + d: int = 3) -> Dict[int, ndarray]: from skimage.measure import regionprops # type: ignore cell_regions = dict() @@ -509,8 +513,12 @@ def readImageRegionPoints(fseg, res=[1, 1, 1], d=2): cellsSeg = regionprops(seg) for cregion in cellsSeg: - cell_regions[cregion.label] = np.multiply(cregion.coords[:, :d], - res[:d]) + cid = int(cregion.label) + if cid != 1: + coords = cregion.coords[:, [2, 1, 0]] + coords_: ndarray = np.multiply(coords, + res[:d]) + cell_regions[cid] = coords_ return cell_regions @@ -519,15 +527,19 @@ def mergePoints(cell_regions, cids): return np.vstack(tuple([cell_regions[cid] for cid in cids])) -def getCellRegions(fid=1, ft=lambda t: True, d=2): - segFn = "../data/FM{fid}/segmentation_tiffs/{t}h_segmented.tif" - ressFn = "../data/FM{fid}/resolutions.txt" +def getCellRegions(d: str, + fid: int = 1, + ft: Callable[[int], bool] = lambda t: True, + dim: int = 3) -> Dict[int, Dict[int, ndarray]]: + + segFn = join(d, "FM{fid}/segmentation_tiffs/{t}h_segmented.tif") + ressFn = join(d, "FM{fid}/resolutions.txt") ress = readRess(ressFn.format(fid=str(fid))) tpoints = [t for t in sorted(ress.keys()) if ft(t)] fsegs = dict([(t, segFn.format(fid=fid, t=str(t))) for t in tpoints]) - return dict([(t, readImageRegionPoints(fn, res=ress[t], d=d)) + return dict([(t, readImageRegionPoints(fn, res=ress[t], d=dim)) for t, fn in fsegs.items()]) @@ -558,7 +570,7 @@ def writeOrg(fnGeom, fnNeigh, ts): def writeTV(ts, d, lab): - from os.path import join + fnGeom = "{lab}_segmented_tvformat_volume_position.txt".format(lab=lab) fnNeigh = "{lab}_segmented_tvformat_neighbors.txt".format(lab=lab) -- GitLab