我正在编写一些软件来读取DICOM文件,但不确定如何处理长度不确定的标签。标准说
“如果“值字段”具有显式长度,则“值长度字段”应包含等于“值字段”长度(以字节为单位)的值。否则,“值字段”具有未定义的长度,并且“序列定界项”标记了值字段。”
因此,要读取长度不确定的值,FFFFFFFF我将继续读取字节,直到遇到序列定界项为止FFFEE0DD。如果该值包含恰好等于序列定界项的一系列字节,该怎么办?如何正确定位序列定界项?
未定义的属性在DICOM中同时用于SQ标签和像素数据(7fe0,0010)。在这两种情况下,都可以使用更多的项目标签(FFFE,E000)对数据块进行编码,并且由序列定界项目(FFFE,E0DD)发出信号的属性结尾。
对于像素数据,像素数据的每个片段都使用项目标签(FFFE,E000)进行编码。像素数据的每个片段都被编码为固定长度。像素数据的每一帧可以由一个或多个像素数据片段组成。编码在像素数据中的第一项标签是基本偏移表。如果一帧编码有多个片段,则此偏移量表将告知每一帧像素数据内的偏移量。如果偏移表的长度为零,则将每个帧编码为单个片段。您可以在DICOM第5部分表A.4-1中看到一个编码示例。在任何情况下,您都应该能够通过重复读取8个字节的像素数据来获得项目标签/序列定界符项目+每个片段的长度,然后读取由指定的实际字节数来解析像素数据的内容长度,
您可以在DICOM的第5部分,表7.5-2和表7.5-3中看到SQ属性编码的示例。除了以与项目标签相关的长度可以是“未定义的长度”之外,这以相似的方式工作。但是,对于序列,您可以继续解析序列的内容,因为它们始终只是标记数据。