Skip to content

Commit 3fe87c1

Browse files
authored
Merge pull request #4633 from thewtex/image-dict-buffered-region-array
BUG: Add bufferedRegion to dict_from_image representation
2 parents afc4879 + c66b046 commit 3fe87c1

File tree

3 files changed

+23
-2
lines changed

3 files changed

+23
-2
lines changed

Modules/Bridge/NumPy/wrapping/PyBuffer.i.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
if source:
2121
source.UpdateLargestPossibleRegion()
2222

23-
itksize = image.GetLargestPossibleRegion().GetSize()
23+
itksize = image.GetBufferedRegion().GetSize()
2424
dim = len(itksize)
2525
shape = [int(itksize[idx]) for idx in range(dim)]
2626

Wrapping/Generators/Python/Tests/extras.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,14 @@ def custom_callback(name, progress):
224224
diff = itk.comparison_image_filter(image.astype(itk.F), image_back.astype(itk.F))
225225
assert np.sum(diff) == 0
226226

227+
228+
largest_region = itk.ImageRegion[2]([0, 0], [1024, 1024])
229+
image.SetLargestPossibleRegion(largest_region)
230+
image_dict = itk.dict_from_image(image)
231+
image_back = itk.image_from_dict(image_dict)
232+
diff = itk.comparison_image_filter(image.astype(itk.F), image_back.astype(itk.F))
233+
assert np.sum(diff) == 0
234+
227235
mesh_dict = itk.dict_from_mesh(mesh)
228236
mesh_back = itk.mesh_from_dict(mesh_dict)
229237

Wrapping/Generators/Python/itk/support/extras.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -789,12 +789,15 @@ def dict_from_image(image: "itkt.Image") -> Dict:
789789

790790
pixel_arr = itk.array_from_image(image)
791791
imageType = wasm_type_from_image_type(image)
792+
buffered_region = image.GetBufferedRegion()
793+
bufferedRegion = { "index": tuple(buffered_region.GetIndex()), "size": tuple(buffered_region.GetSize())}
792794
return dict(
793795
imageType=imageType,
794796
name=image.GetObjectName(),
795797
origin=tuple(image.GetOrigin()),
796798
spacing=tuple(image.GetSpacing()),
797-
size=tuple(image.GetBufferedRegion().GetSize()),
799+
size=tuple(image.GetLargestPossibleRegion().GetSize()),
800+
bufferedRegion=bufferedRegion,
798801
direction=np.asarray(image.GetDirection()),
799802
data=pixel_arr,
800803
)
@@ -808,10 +811,20 @@ def image_from_dict(image_dict: Dict) -> "itkt.Image":
808811
if image_dict["data"] is None:
809812
image = ImageType.New()
810813
image.SetRegions(image_dict["size"])
814+
if "bufferedRegion" in image_dict:
815+
buffered_region = itk.ImageRegion[image.GetImageDimension()]()
816+
buffered_region.SetIndex(image_dict["bufferedRegion"]["index"])
817+
buffered_region.SetSize(image_dict["bufferedRegion"]["size"])
818+
image.SetBufferedRegion(buffered_region)
811819
image.Allocate(True)
812820
else:
813821
image = itk.PyBuffer[ImageType].GetImageViewFromArray(image_dict["data"])
814822
image.SetRegions(image_dict["size"])
823+
if "bufferedRegion" in image_dict:
824+
buffered_region = itk.ImageRegion[image.GetImageDimension()]()
825+
buffered_region.SetIndex(image_dict["bufferedRegion"]["index"])
826+
buffered_region.SetSize(image_dict["bufferedRegion"]["size"])
827+
image.SetBufferedRegion(buffered_region)
815828
image.SetOrigin(image_dict["origin"])
816829
image.SetSpacing(image_dict["spacing"])
817830
image.SetDirection(image_dict["direction"])

0 commit comments

Comments
 (0)