File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -492,6 +492,12 @@ def _bytes_per_frame_uncompressed(self) -> int:
492492 # are packed into 12.5 -> 13 bytes
493493 return n_pixels // 8 + (n_pixels % 8 > 0 )
494494 else :
495+ if self .metadata .PhotometricInterpretation == 'YBR_FULL_422' :
496+ # Account for subsampling of CB and CR when calculating
497+ # expected number of samples
498+ # See https://dicom.nema.org/medical/dicom/current/output/chtml
499+ # /part03/sect_C.7.6.3.html#sect_C.7.6.3.1.2
500+ n_pixels = self .metadata .Rows * self .metadata .Columns * 2
495501 return n_pixels * bits_allocated // 8
496502
497503 def close (self ) -> None :
Original file line number Diff line number Diff line change @@ -157,6 +157,25 @@ def test_read_multi_frame_seg_image_sm_dots_bitpacked(self):
157157 )
158158 np .testing .assert_array_equal (frame , pixel_array [i , ...])
159159
160+ def test_read_ybr_422_native (self ):
161+ # Reading a frame using YBR_422 photometric interpretation and no
162+ # compression
163+ filename = str (get_testdata_file ('SC_ybr_full_422_uncompressed.dcm' ))
164+ dataset = dcmread (filename )
165+ pixel_array = dataset .pixel_array
166+ with ImageFileReader (filename ) as reader :
167+ assert reader .number_of_frames == 1
168+ frame = reader .read_frame (0 , correct_color = False )
169+ assert isinstance (frame , np .ndarray )
170+ assert frame .ndim == 3
171+ assert frame .dtype == np .uint8
172+ assert frame .shape == (
173+ reader .metadata .Rows ,
174+ reader .metadata .Columns ,
175+ reader .metadata .SamplesPerPixel ,
176+ )
177+ np .testing .assert_array_equal (frame , pixel_array )
178+
160179 def test_read_single_frame_ct_image_dicom_bytes_io (self ):
161180 filename = str (self ._test_dir .joinpath ("ct_image.dcm" ))
162181 dcm = DicomBytesIO (open (filename , "rb" ).read ())
You can’t perform that action at this time.
0 commit comments