Skip to content
Snippets Groups Projects
Commit 40be402f authored by Christopher Randolph Rhodes's avatar Christopher Randolph Rhodes
Browse files

Added 3D patch accessor

parent 25ed7955
No related branches found
No related tags found
No related merge requests found
...@@ -63,6 +63,39 @@ class MonoPatchStackFromFile(MonoPatchStack): ...@@ -63,6 +63,39 @@ class MonoPatchStackFromFile(MonoPatchStack):
def fpath(self): def fpath(self):
return self.file_acc.fpath return self.file_acc.fpath
class PatchStack3D(InMemoryDataAccessor):
def __init__(self, data):
"""
A sequence of n monochrome 3D images of the same size
:param data: a list of np.ndarrays of size YXZ
"""
if isinstance(data, list): # list of YXZ patches
nda = np.array(data).squeeze()
assert nda.ndim == 4
self._data = np.moveaxis(
nda,
[1, 2, 0, 3],
[0, 1, 2, 3]
)
else:
raise InvalidDataForPatchStackError(f'Cannot create accessor from {type(data)}')
def iat(self, i):
return self.data[:, :, i, :]
def iat_yxcz(self, i):
return np.expand_dims(self.iat(i), 2)
@property
def chroma(self):
return 1
@property
def count(self):
return self.shape[2]
class Error(Exception): class Error(Exception):
pass pass
......
...@@ -3,7 +3,7 @@ import unittest ...@@ -3,7 +3,7 @@ import unittest
import numpy as np import numpy as np
from conf.testing import monozstackmask from conf.testing import monozstackmask
from extensions.chaeo.accessors import MonoPatchStack, MonoPatchStackFromFile from extensions.chaeo.accessors import MonoPatchStack, MonoPatchStackFromFile, PatchStack3D
...@@ -11,7 +11,7 @@ class TestCziImageFileAccess(unittest.TestCase): ...@@ -11,7 +11,7 @@ class TestCziImageFileAccess(unittest.TestCase):
def setUp(self) -> None: def setUp(self) -> None:
pass pass
def test_make_patch_stack_from_list(self): def test_make_patch_stack_from_3d_array(self):
w = 256 w = 256
h = 512 h = 512
n = 4 n = 4
...@@ -20,11 +20,11 @@ class TestCziImageFileAccess(unittest.TestCase): ...@@ -20,11 +20,11 @@ class TestCziImageFileAccess(unittest.TestCase):
self.assertEqual(acc.hw, (h, w)) self.assertEqual(acc.hw, (h, w))
self.assertEqual(acc.make_tczyx().shape, (n, 1, 1, h, w)) self.assertEqual(acc.make_tczyx().shape, (n, 1, 1, h, w))
def test_make_patch_stack_from_3d_array(self): def test_make_patch_stack_from_list(self):
w = 256 w = 256
h = 512 h = 512
n = 4 n = 4
acc = MonoPatchStack([np.random.rand(h, w) for _ in range(0, 4)]) acc = MonoPatchStack([np.random.rand(h, w) for _ in range(0, n)])
self.assertEqual(acc.count, n) self.assertEqual(acc.count, n)
self.assertEqual(acc.hw, (h, w)) self.assertEqual(acc.hw, (h, w))
self.assertEqual(acc.make_tczyx().shape, (n, 1, 1, h, w)) self.assertEqual(acc.make_tczyx().shape, (n, 1, 1, h, w))
...@@ -50,4 +50,23 @@ class TestCziImageFileAccess(unittest.TestCase): ...@@ -50,4 +50,23 @@ class TestCziImageFileAccess(unittest.TestCase):
h = 512 h = 512
n = 4 n = 4
acc = MonoPatchStack([np.random.rand(h, w) for _ in range(0, 4)]) acc = MonoPatchStack([np.random.rand(h, w) for _ in range(0, 4)])
self.assertEqual(acc.iat_yxcz(0).shape, (h, w, 1, 1)) self.assertEqual(acc.iat_yxcz(0).shape, (h, w, 1, 1))
\ No newline at end of file
def test_make_3d_patch_stack_from_list(self):
w = 256
h = 512
nz = 5
n = 4
acc = PatchStack3D([np.random.rand(h, w, nz) for _ in range(0, n)])
self.assertEqual(acc.count, n)
self.assertEqual(acc.hw, (h, w))
self.assertEqual(acc.chroma, 1)
self.assertEqual(acc.iat(0).shape, (h, w, nz))
def test_3d_patch_as_yxcz_array(self):
w = 256
h = 512
nz = 5
n = 4
acc = PatchStack3D([np.random.rand(h, w, nz) for _ in range(0, n)])
self.assertEqual(acc.iat_yxcz(0).shape, (h, w, 1, nz))
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment