DICOM (.dcm, .dic)
背景
-
- MIME 类型:application/dicom
- DICOM 医学图像格式.
- 常用于医学图像仪器和图片归档以及通信系统.
- DICOM 是 Digital Imaging and Communications in Medicine(医学数字成像与通信)的缩写.
- 存储多个光栅图像以及病人和设备信息.
- 二进制格式.
- 支持各种图像编码和数据压缩方法.
- DICOM 版本 3.0 于 1993 年引入.
Import 与 Export
- Import["file.dcm"] 导入 DICOM 文件并返回 Image 对象.
- Import["file.dcm",elem] 从 DICOM 文件中导入指定的参数.
- 导入格式可以用 Import["file","DICOM"] 或 Import["file",{"DICOM",elem,…}] 指定.
- Export["file.dcm",expr] 以图像形式导出图形或任何其他表达式至 DICOM 文件.
- 当导出 Wolfram 语言的图形或任意表达式至 DICOM,其结果图像具有与显示形式同样的光栅尺寸.
- 默认情况下,图像对象按其光栅大小导出.
- 因为 DICOM 是一个光栅图像格式,所以导出时,所有字体被光栅化.
- 请到以下参考页面了解完整的基本信息:
-
Import, Export 从文件导入或导出到文件 CloudImport, CloudExport 从云对象导入或导出到云对象 ImportString, ExportString 从字符串导入或导出到字符串 ImportByteArray, ExportByteArray 从字节数组导入或导出到字节数组
参数
- Import 的通用参数:
-
"Elements" 该文件可用的参数和选项列表 "Summary" 文件摘要 "Rules" 所有可用参数的规则列表 - 表示数据的参数:
-
"Data" 色彩值数组 "Graphics" 表示一个图像的 Graphics 对象组 "Image" 以 Image 对象形式表示的光栅图形 "ImageList" 图片列表 -
"RawData" 存储在文件中的原位图数据 - 叠加参数:
-
"Overlays" 叠加图像或叠加列表 - Import 在默认情况下对单帧 DICOM 文件使用 "Image",对于多帧 DICOM 文件使用 "ImageList".
- 高级的 Import 参数:
-
"BitDepth" 表示文件中每个颜色通道使用的位数 "Channels" 文件中使用的颜色通道数 "ColorMap" 颜色减少调色板,以颜色值列表形式给出 "ColorSpace" 文件中使用的颜色编码 "ImageSize" 光栅维数 "MetaInformation" 存储在文件中的元信息 "RawMetaInformation" 存储在文件中的原始元信息 "Summary" 文件摘要
参数
- 通用 Export 参数:
-
"Rules" 以 elemexpr 形式导入的元素列表 - Export["file.dcm",{elem1->expr1,…},"Rules"] 使用规则指定要导出的元素.
- 可用导出参数:
-
"Data" 数值数据 "Image" 一个 Image 对象 "Image3D" 一个 Image3D 对象 "ImageList" 图像帧列表 "MetaInformation" 元数据标签和值的关联 "Overlays" 关联列表 - "Overlays" 关联可以具有以下键:
-
"Description" 叠加层说明 "Image" 一个或一组重叠图像 "Label" 叠加标签 "Type" 叠加层的类型 "Subtype" 叠加层的子类型 - "Type" 的值可以是 "Graphics" 或 "RegionOfInterest". "Subtype" 可以是 "User" 或 "Automated".
选项
- Import 与 Export 选项:
-
"ImageTopOrientation" Top 存储在文件中的图像方向 ImageSize Automatic 整体图像大小 IncludeMetaInformation All 导入和导出的元数据量 - IncludeMetaInformation 的可用参数包括:
-
All 包括所有可用的元数据 None 不包含元数据 "Anonymized" 包括匿名元数据 "FullyAnonymized" 包含完全匿名的元数据 - Import 选项:
-
"DataTransformation" Automatic 应用于文件中存储的数据的一组转换 - "DataTransformation" 可与以下键进行关联:
-
"Modality" Automatic 让数据制造商独立的模式转换 "Polarity" Automatic 假设最小值为黑色或白色 "Presentation" Automatic 是否转变为人类的知觉反应 "ScalingWindow" Automatic 用于导入数据的缩放方法,也称为关注值(VOI) -
- 默认情况下,使用文件中指定的模态转换. 使用 "Modality"None 可禁用此转换.
- 默认情况下,使用文件中指定的极性转换. 可能的设置是:
-
"Normal" 假设最小值为黑色 "Reverse" 假设最小值为白色 - 默认情况下,使用文件中指定的模态转换. 使用 "Presentation"None 可禁用此转换.
- "ScalingWindow" 可以进行以下设置:
-
Automatic 自动缩放 None 无缩放 "MinMax" 缩放到所有帧中的数据的最小值和最大值 "MinMaxPerFrame" 缩放到每帧的最大值和最小值 {center,w} 缩放到 {center-w,center+w} 范围 <|"Center"center,"Width"w|> 缩放到 {center-w,center+w} 范围 <|"Min"min,"Max"max|> 缩放到 {min,max} 范围 - 通过 "ScalingWindow"->Automatic,用存储在文件中的缩放值缩放值. 如果未存储任何缩放规格,则使用"MinMax" 方法缩放值.
- Export 选项:
-
ColorSpace Automatic 文件中使用的色彩空间 CompressionLevel Automatic 使用的压缩级别 ImageSize Automatic 整体影像尺寸 "BitDepth" Automatic 用于存储图像数据的每个通道的位深 "ImageEncoding" None 使用的图像编码 "ImageTopOrientation" Automatic 文件中存储的图像方向 - 支持 ColorSpace 的设定为 "Grayscale" 和 "RGB".
- "ImageEncoding" 的可能值为 "JPEGLossless"、"JPEGLosslessNonhierarchical"、"JPEGLSLossless"、"JPEGLSLossy"、"JPEGLossy8Bit"、"JPEGLossy12Bit" 和 "RLE".
范例
打开所有单元 关闭所有单元基本范例 (3)
范围 (2)
显示文件中所有可用的 Import 参数:
Import["ExampleData/head.dcm.gz", "Elements"]Import["ExampleData/head.dcm.gz", "MetaInformation"]//Short导入参数 (15)
可用参数 (3)
Import["ExampleData/head.dcm.gz", "Elements"]Import["ExampleData/head.dcm.gz", "Rules"]//ShortImport["ExampleData/head.dcm.gz", "Options"]Import["ExampleData/head.dcm.gz"]//Options//Short数据表示 (4)
"Data" (1)
"Graphics" (1)
导入为 Graphics 对象:
Import["ExampleData/head.dcm.gz", "Graphics", ImageSize -> 100]Head[%]"Image" (1)
导入为 Image 对象:
Import["ExampleData/head.dcm.gz", "Image", ImageSize -> 100]Head[%]Import["ExampleData/head.dcm.gz", ImageSize -> 100]元数据 (8)
"BitDepth" (1)
"ColorSpace" (1)
Import["ExampleData/head.dcm.gz", "ColorSpace"]使用 ImageColorSpace 获取导入图像的颜色空间:
Import["ExampleData/head.dcm.gz"]//ImageColorSpace"ImageSize" (1)
Import["ExampleData/head.dcm.gz", "ImageSize"]在导入的图像上使用 ImageDimensions 可获得相同的结果:
Import["ExampleData/head.dcm.gz"]//ImageDimensions"MetaInformation" (1)
"RawMetaInformation" (2)
与 "MetaInformation" 不同,"RawMetaInformation" 不根据 DICOM 标准验证导入的值,并且不执行对 Wolfram 语言表达式的任何转换。从 DICOM 文件中读取原始元信息:
Import["ExampleData/head.dcm.gz", "RawMetaInformation"]//ShortDataset@Import["ExampleData/head.dcm.gz", "RawMetaInformation"]"RawMetaInformation" 参数可能返回比 "MetaInformation" 更多的标签:
Complement[Keys@Import["ExampleData/head.dcm.gz", "RawMetaInformation"], Keys@Import["ExampleData/head.dcm.gz", "MetaInformation"]]导出参数 (10)
"Data" (1)
将 NumericArray 作为原始像素值导出到 DICOM 文件:
Export["turtle.dcm", NumericArray[{{132, 134, 136, 139, 140, 141, 140, 139, 138, 137, 136, 138, 137, 135, 134, 135, 133,
132, 131, 130, 129, 129, 130, 130, 131, 130, 129, 129, 129, 130, 130, 129, 129, 130, 131, 131,
132, 131, 131, 131, 131, 131, 131, 131, 130, 129, ... 205, 203, 203, 203, 204,
204, 204, 204, 203, 202, 200, 199, 198, 197, 196, 196, 196, 196, 196, 196, 194, 193, 192, 190,
188, 186, 185, 185, 182, 179, 176, 175, 173, 170, 168, 168, 166, 166, 166, 166, 166, 165, 164,
164}}, "UnsignedInteger8"]]Import["turtle.dcm"]"Graphics" (1)
"GraphicsList" (1)
"Image" (1)
"ImageList" (1)
"Image3D" (1)
"MetaInformation" (2)
turtle = Import["ExampleData/turtle.jpg"]meta = <|
"PatientName" -> "Donatello",
"PatientAge" -> Quantity[16, "years"],
"PatientSex" -> "M",
"PatientBirthDate" -> DateObject[{1965, 12, 27}, "Day", "Gregorian", None],
"PatientSize" -> 0.25,
"DateTime" -> Now
|>;Export["test.dcm", {"Image" -> turtle, "MetaInformation" -> meta}, "Rules"]Import["test.dcm", "MetaInformation"]//DatasetExport["test.dcm", <|"PatientName" -> "Donatello"|>, "MetaInformation"]"Overlays" (2)
ovrl = [image];turtle = Import["ExampleData/turtle.jpg"]Export["overlaid.dcm", {
"Image" -> turtle,
"Overlays" -> <|
"Image" -> ovrl,
"Origin" -> {45, 155},
"Description" -> "Turtle's head"
|>
}, "Rules"];Import["overlaid.dcm"]Import["overlaid.dcm", "Overlays"]Export["overlaid.dcm", <|"Image" -> [image]|>, "Overlays"]导出选项 (8)
ImageSize (1)
"ImageTopOrientation" (1)
"DataTransformation" (6)
Import["ExampleData/head.dcm.gz", "Image", "DataTransformation" -> Automatic, ImageSize -> 200]MinMax@ImageData[%, "Bit16"]Import["ExampleData/head.dcm.gz", "Image", "DataTransformation" -> None, ImageSize -> 200]MinMax@ImageData[%, "Bit16"]Import["ExampleData/head.dcm.gz", {"MetaInformation", "Window*"}]Import["ExampleData/head.dcm.gz", "Image", "DataTransformation" -> <|"ScalingWindow" -> <|"Center" -> %["WindowCenter"], "Width" -> %["WindowWidth"]|>|>, ImageSize -> 200]将介于 500 到 600 之间的图像缩放值导入到整个图像数据范围:
Import["ExampleData/head.dcm.gz", "Image", "DataTransformation" -> <|"ScalingWindow" -> <|"Min" -> 500, "Max" -> 600|>|>, ImageSize -> 200]Import["ExampleData/head.dcm.gz", "Image", "DataTransformation" -> <|"ScalingWindow" -> <|"Min" -> 500, "Max" -> 600|>, "Polarity" -> "Reverse"|>, ImageSize -> 200]data = Outer[Import["ExampleData/head.dcm.gz", {"DICOM", "Image"}, "DataTransformation" -> <|"Modality" -> #1, "Polarity" -> #2|>]&, {Automatic, None}, {"Normal", "Reverse"}];TableForm[data, TableHeadings -> {{"Automatic", "None"}, {"Normal", "Reverse"}}]导出选项 (18)
BitDepth (3)
Export 自动使用最合适的位深度:
Export["test.dcm", [image], "BitDepth" -> Automatic]Import["test.dcm", "BitDepth"]Export["test.dcm", [image], "BitDepth" -> 8]ImageType@Import[%]支持的位深度为 Automatic、8 和 16:
Export["test.dcm", [image], "BitDepth" -> 12]ColorSpace (3)
默认情况下,Export 使用最合适的色彩空间:
Export["test.dcm", [image], "ColorSpace" -> Automatic]Import["test.dcm", "ColorSpace"]Export["test.dcm", [image], "ColorSpace" -> "Grayscale"]Import[%]支持 Automatic、"Grayscale" 和 "RGB"的值:
Export["test.dcm", [image], "ColorSpace" -> "CMYK"]CompressionLevel (4)
Export["apples.dcm", [image], "ImageEncoding" -> "JPEGLossy12Bit", CompressionLevel -> 0.5];
FileSize["apples.dcm"]用 CompressionLevel0 进行无压缩和获得最佳图像质量:
Export["apples.dcm", [image], "ImageEncoding" -> "JPEGLossy12Bit", CompressionLevel -> 0];FileSize["apples.dcm"]用 CompressionLevel1 进行最大压缩,尽可能减小文件大小:
Export["apples.dcm", [image], "ImageEncoding" -> "JPEGLossy12Bit", CompressionLevel -> 1];FileSize["apples.dcm"]Import["apples.dcm"]apples = [image];Export["apples.dcm", apples, "ImageEncoding" -> "JPEGLSLossless", CompressionLevel -> 0];
FileSize["apples.dcm"]Export["apples.dcm", apples, "ImageEncoding" -> "JPEGLSLossless", CompressionLevel -> 1];
FileSize["apples.dcm"]"ImageEncoding" (3)
Export["turtle.dcm", [image], "ImageEncoding" -> None];
FileSize["turtle.dcm"]Export["turtle.dcm", [image], "ImageEncoding" -> "JPEGLossy12Bit"];
FileSize["turtle.dcm"]encodings = {None, "JPEGLossless", "JPEGLosslessNonhierarchical", "JPEGLSLossless", "JPEGLSLossy", "JPEGLossy8Bit", "JPEGLossy12Bit", "RLE"};AssociationMap[(Export["turtle.dcm", [image], "ImageEncoding" -> #];
FileSize["turtle.dcm"])&, encodings]//Dataset//SortImageSize (1)
i = [image];ImageDimensions[i]Export["test.dcm.gz", i, "DICOM"]Import[%, "ImageSize"]Export["test.dcm", i, ImageSize -> 47]Import[%, "ImageSize"]IncludeMetaInformation (3)
img = [image];MetaInformation /. Options[img, MetaInformation]//Length默认情况下,嵌入式元数据与 "MetaInformation" 元素中指定的元数据合并:
Export["test.dcm", {"Image" -> img, "MetaInformation" -> <|"PatientName" -> "William", "PatientAge" -> Quantity[22, "Years"], "PatientSex" -> "M", "PatientBirthDate" -> DateObject[{1965, 12, 27}, "Day", "Gregorian", None], "PatientSize" -> 1.8, "RequestedProcedureComments" -> "Some comment", "PerformedProcedureStepStartTime" -> TimeObject[{12, 38, 8.953}, "Instant", None]|>},
"Rules"];Import["test.dcm", "MetaInformation"]//Length用 IncludeMetaInformationNone 时,将忽略嵌入式元数据:
Export["test.dcm", {"Image" -> img, "MetaInformation" -> <|"PatientName" -> "William", "PatientAge" -> Quantity[22, "Years"], "PatientSex" -> "M", "PatientBirthDate" -> DateObject[{1965, 12, 27}, "Day", "Gregorian", None], "PatientSize" -> 1.8, "RequestedProcedureComments" -> "Some comment", "PerformedProcedureStepStartTime" -> TimeObject[{12, 38, 8.953}, "Instant", None]|>},
"Rules", IncludeMetaInformation -> None];Import["test.dcm", "MetaInformation"]//Lengthi = Import["test.dcm"];Export["test.dcm", i, IncludeMetaInformation -> "Anonymized"]Import["test.dcm", {"MetaInformation", "PatientName"}]Import["test.dcm", {"MetaInformation", "PerformedProcedureStepStartTime"}]i = Import["test.dcm"];Export["test.dcm", i, IncludeMetaInformation -> "FullyAnonymized"]Import["test.dcm", {"MetaInformation", "PatientName"}]Import["test.dcm", {"MetaInformation", "PerformedProcedureStepStartTime"}]"ImageTopOrientation" (1)
默认情况下,使用 "ImageTopOrientation"->Top 导出直立图像:
i = [image];Export["test.dcm.gz", i]Import[%]Export["test.dcm.gz", i, "ImageTopOrientation" -> Left]Import[%]历史
2003年引入 (5.0) | 在以下年份被更新:2016 (11.0) ▪ 2020 (12.1) ▪ 2020 (12.2) ▪ 2021 (12.3)