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):
def fpath(self):
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):
pass
......
......@@ -3,7 +3,7 @@ import unittest
import numpy as np
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):
def setUp(self) -> None:
pass
def test_make_patch_stack_from_list(self):
def test_make_patch_stack_from_3d_array(self):
w = 256
h = 512
n = 4
......@@ -20,11 +20,11 @@ class TestCziImageFileAccess(unittest.TestCase):
self.assertEqual(acc.hw, (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
h = 512
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.hw, (h, w))
self.assertEqual(acc.make_tczyx().shape, (n, 1, 1, h, w))
......@@ -50,4 +50,23 @@ class TestCziImageFileAccess(unittest.TestCase):
h = 512
n = 4
acc = MonoPatchStack([np.random.rand(h, w) for _ in range(0, 4)])
self.assertEqual(acc.iat_yxcz(0).shape, (h, w, 1, 1))
\ No newline at end of file
self.assertEqual(acc.iat_yxcz(0).shape, (h, w, 1, 1))
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