Skip to content

Commit dffd6dc

Browse files
committed
WIP: improve vcml image based geometry handling
1 parent 2685571 commit dffd6dc

4 files changed

Lines changed: 6 additions & 10 deletions

File tree

pyvcell/vcml/models.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,14 +150,16 @@ class PixelClass(VcmlNode):
150150
class Image(VcmlNode):
151151
name: str
152152
size: tuple[int, int, int]
153-
compressed_size: int
153+
uncompressed_size: int
154154
compressed_content: str
155155
pixel_classes: list[PixelClass] = Field(default_factory=list)
156156

157157
@property
158158
def ndarray_3d_u8(self) -> NDArray3Du8:
159159
compressed_bytes = bytes.fromhex(self.compressed_content)
160160
raw_pixels = zlib.decompress(compressed_bytes)
161+
if len(raw_pixels) != self.uncompressed_size:
162+
raise ValueError("Decompressed size does not match compressed size")
161163
return np.frombuffer(raw_pixels, dtype=np.uint8).astype(np.uint8).reshape(self.size)
162164

163165
@staticmethod
@@ -175,7 +177,7 @@ def from_ndarray_3d_u8(ndarray_3d_u8: NDArray3Du8, name: str) -> "Image":
175177
return Image(
176178
name=name,
177179
size=size,
178-
compressed_size=len(raw_pixels),
180+
uncompressed_size=len(raw_pixels),
179181
compressed_content=compressed_bytes.hex(),
180182
pixel_classes=pixel_classes,
181183
)

pyvcell/vcml/vcml_geo_from_images.py

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,3 @@ def read_images_to_volume(image_path: Path) -> NDArray3Du8:
5151
vcell_image: vc.Image = vc.Image.from_ndarray_3d_u8(ndarray_3d_u8=orig_image_array, name="bunny")
5252
vcell_image_array = vcell_image.ndarray_3d_u8
5353
print(vcell_image.pixel_classes)
54-
55-
# using matplotlib, plot the middle image in the volume
56-
import matplotlib.pyplot as plt
57-
58-
plt.imshow(np.transpose(vcell_image_array, (1, 0, 2))[40])
59-
plt.show()

pyvcell/vcml/vcml_reader.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,7 @@ def visit_Image(self, element: _Element, node: vc.Geometry) -> None:
237237
image = vc.Image(
238238
name=image_name,
239239
size=image_size,
240-
compressed_size=compressed_size,
240+
uncompressed_size=compressed_size,
241241
compressed_content=compressed_content,
242242
pixel_classes=pixel_classes,
243243
)

pyvcell/vcml/vcml_writer.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,7 @@ def write_geometry(self, geometry: vc.Geometry, parent: _Element) -> None:
225225
X=str(image.size[0]),
226226
Y=str(image.size[1]),
227227
Z=str(image.size[2]),
228-
CompressedSize=str(image.compressed_size),
228+
CompressedSize=str(image.uncompressed_size),
229229
)
230230
image_data_element.text = image.compressed_content
231231
image_element.append(image_data_element)

0 commit comments

Comments
 (0)