Skip to content

Commit 7b617cc

Browse files
First pass at 16-bit support
1 parent bfb9d68 commit 7b617cc

File tree

2 files changed

+34
-8
lines changed

2 files changed

+34
-8
lines changed

isyntax2raw/__init__.py

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -225,8 +225,10 @@ def get_image_metadata_sdk_v1(self, image_no):
225225
self.pixel_size_y = img.IMAGE_SCALE_FACTOR[1]
226226

227227
view = pe_in.SourceView()
228-
image_metadata["Bits allocated"] = view.bitsAllocated()
229-
image_metadata["Bits stored"] = view.bitsStored()
228+
self.bits_per_pixel = view.bitsAllocated()
229+
image_metadata["Bits allocated"] = self.bits_per_pixel
230+
self.bits_stored = view.bitsStored()
231+
image_metadata["Bits stored"] = self.bits_stored
230232
image_metadata["High bit"] = view.highBit()
231233
image_metadata["Pixel representation"] = \
232234
view.pixelRepresentation()
@@ -303,8 +305,10 @@ def get_image_metadata_sdk_v2(self, image_no):
303305
self.pixel_size_x = image_scale_factor[0]
304306
self.pixel_size_y = image_scale_factor[1]
305307

306-
image_metadata["Bits allocated"] = view.bits_allocated
307-
image_metadata["Bits stored"] = view.bits_stored
308+
self.bits_per_pixel = view.bits_allocated
309+
image_metadata["Bits allocated"] = self.bits_per_pixel
310+
self.bits_stored = view.bits_stored
311+
image_metadata["Bits stored"] = self.bits_stored
308312
image_metadata["High bit"] = view.high_bit
309313
image_metadata["Pixel representation"] = \
310314
view.pixel_representation
@@ -483,6 +487,8 @@ def write_metadata_xml(self, metadata_file):
483487
'pixels': {
484488
'sizeX': int(self.size_x),
485489
'sizeY': int(self.size_y),
490+
'type': get_pixel_type(int(self.bits_per_pixel)),
491+
'bits_stored': int(self.significant_bits),
486492
'physicalSizeX': self.pixel_size_x,
487493
'physicalSizeY': self.pixel_size_y
488494
}
@@ -519,6 +525,22 @@ def write_metadata(self):
519525
)
520526
self.write_metadata_xml(metadata_file)
521527

528+
def get_pixel_type(bits):
529+
'''get the OME-XML pixel type string from the bits per pixel'''
530+
if bits == 8:
531+
return 'uint8'
532+
elif bits == 16:
533+
return 'uint16'
534+
raise ValueError("Allocated bits not supported: %d" % bits)
535+
536+
def get_data_type(bits):
537+
'''get numpy data type from bits per pixel'''
538+
if bits == 8:
539+
return numpy.uint8
540+
elif bits == 16:
541+
return numpy.uint16
542+
raise ValueError("Allocated bits not supported: %d" % bits)
543+
522544
def get_size(self, dim_range):
523545
'''calculate the length in pixels of a dimension'''
524546
v = (dim_range[2] - dim_range[0]) / dim_range[1]
@@ -589,7 +611,8 @@ def create_tile_directory(self, series, resolution, width, height):
589611
self.zarr_group.create_dataset(
590612
"%s/%s" % (str(series), str(resolution)),
591613
shape=(1, 3, 1, height, width),
592-
chunks=(1, 1, 1, self.tile_height, self.tile_width), dtype='B'
614+
chunks=(1, 1, 1, self.tile_height, self.tile_width),
615+
dtype=get_data_type(self.bits_per_pixel)
593616
)
594617

595618
def make_planar(self, pixels, tile_width, tile_height):
@@ -715,7 +738,10 @@ def write_tile(
715738
)
716739
height = int(height)
717740
pixel_buffer_size = width * height * 3
718-
pixels = np.empty(pixel_buffer_size, dtype='B')
741+
pixels = np.empty(
742+
pixel_buffer_size,
743+
dtype=get_data_type(self.bits_per_pixel)
744+
)
719745
patch_id = patch_ids.pop(regions.index(region))
720746
x_start, y_start = patch_id
721747
x_start *= self.tile_width

isyntax2raw/resources/ome_template.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,11 @@
1212
PhysicalSizeX="${image['pixels']['physicalSizeX']}"
1313
PhysicalSizeXUnit="µm"
1414
PhysicalSizeY="${image['pixels']['physicalSizeY']}"
15-
PhysicalSizeYUnit="µm" SignificantBits="8"
15+
PhysicalSizeYUnit="µm" SignificantBits="${image['pixels']['bits_stored']}"
1616
SizeC="3" SizeT="1"
1717
SizeX="${image['pixels']['sizeX']}"
1818
SizeY="${image['pixels']['sizeY']}"
19-
SizeZ="1" Type="uint8">
19+
SizeZ="1" Type="${image['pixels']['type']}">
2020
<Channel ID="Channel:0:0" SamplesPerPixel="3">
2121
<LightPath/>
2222
</Channel>

0 commit comments

Comments
 (0)