matlab - 将 DICOM 文件堆叠成一个多切片系列
问题描述
我正在尝试将不同的 DICOM 文件堆叠成一个多切片系列,以便在 ITK-Snap 上可视化它们。但是,我似乎无法获得功能正常的 DICOM 系列。
我已经根据切片位置对所有文件进行了排序,并且我有许多有序的单个 .dcm 文件及其原始信息。我用一个 uid 替换了他们所有的原始系列实例 UID,并将它们的系列号替换为我设置为“999”的一个自定义系列号(以便使它们属于一个系列)。所有文件的图像方向设置为[1;0;0;0;1;0]
,所有文件的切片厚度设置为 8 mm。然后,我使用原始 slice 创建了一个信息结构数组positionings [info(num)]
。
我试过类似的东西:
for i=1:num %where num is the number of dicom files
k = num2str(i);
dicomwrite(imm,k,info(i),'CreateMode','Copy'); %where imm is the matrix I obtained with dicomread
end
我获得了一组新的 dicom 文件,命名为从 1 到 num 的数字,但是当我尝试在 ITK-snap 上打开该系列时,它遇到了一个异常,指出向量太长。我可以在 ITK-snap 上打开单个 dicom 文件,但是当多个图像是该系列的一部分,并且该系列被可视化为 256x212xnum 其中 num 是文件数时,我遇到了异常。
我究竟做错了什么?
解决方案
您正在尝试做的是在 DICOM 标准中称为 Multi-frame。简而言之,您需要在确保所有图像元数据仍然正确的旁边,指定Number of Frames (0028,0008)
和Frame Increment Pointer (0028,0009)
. 不幸的是,关于Frame Increment Pointer
标签如何工作的措辞有点含糊:
多帧图像中的帧应作为逻辑序列传送。确定帧顺序的信息应由帧增量指针 (0028,0009) 传送的一个或多个数据元素标签标识。每个支持多帧模块的特定图像 IOD 都专门使用帧增量指针 (0028,0009) 来识别可用作序列的属性。
即使只存在一个帧,帧增量指针 (0028,0009) 仍然需要存在并具有至少一个值,每个值都应指向同样存在于数据集中并具有值的属性. 1
希望有帮助。
推荐阅读
- postgresql - PostGIS 使用 epsg 5186 将米转换为度数
- java - Mockito when()..thenReturn() 总是返回 null
- python - 如何创建 4D 复杂曲面图?
- javascript - 如何从 Promise React Native 中提取数据
- javascript - Rails Web 应用程序:机架应用程序错误处理请求 { GET /packs/js/application-682c14949987e19a8380.js }
- python - 如果函数未完成,使用超时返回
- aws-api-gateway - 使用 boto3 库获取 resourceId
- css - NGINX 忽略散列 css 文件并获取任何存在的 css
- javascript - 如何从具有导出功能的 Firebase 实时数据库中获取用户孩子的价值
- audio - 如何使用 PHP 在移动设备上强制下载音频 mp3