当前位置: 首页 > ds >正文

多帧Dicom文件获取ImagePosition、Intercept、Slope、PixelSpacing

开发环境

VS2022

Win11

Fo-Dicom 5.0.3(当前最新已经更新到了5.1.2)

背景

在做Dicom文件读取时,发现对于多帧Dicom文件的一些Tag的读取总是会出问题(读取不到),但同类软件却是没有问题的,甚是疑惑。

通过多天的摸索,终是找到了解决办法,能顺利读取多帧Dicom中的某帧图片的ImagePosition及整个序列的Intercept、Slope、 PixelSpacing 。

Fo-Dicom读取多帧ImagePosition、Intercept、Slope

获取某帧的 Image Position

下图中的高量为Image Position

ImagePositon标签是计算层间距的关键标签,若直接通过SpaceBetweenSlice读取到的层间距,是不准确的(实际CT中,这个标签的值可能不正确) ;通过ImagePosition标签的获取,然后通过相邻两张图片的位置数据相减,即可计算出层间距。

获取Intercept、Slope

下图中高亮为当前查看病例的Intercept,其下即为Slope。

获取PixlSpacing

下图中高亮为当前查看病例PixlSpacing

 获取时如下:

获取示例代码:

        private static void GetPixelSpacing(DicomDataset dataset, ref CaseDTO patientCase){if (dataset.TryGetSingleValue<double>(DicomTag.PixelSpacing, out double pixelSpacing)){patientCase.PixelSpacing = pixelSpacing;}else{//多帧Dicom的读取pixelSpacingif (dataset.TryGetSequence(DicomTag.SharedFunctionalGroupsSequence, out DicomSequence sharedFunctionalGroupsSequence)){var seq = GetTagDicomDataset(sharedFunctionalGroupsSequence, DicomTag.PixelMeasuresSequence);if (seq is not null && seq.TryGetSequence(DicomTag.PixelMeasuresSequence, out DicomSequence pixelMeasuresSequence)){var ds = GetTagDicomDataset(pixelMeasuresSequence, DicomTag.PixelSpacing);if (ds is not null && ds.TryGetValues<double>(DicomTag.PixelSpacing, out double[] px)){patientCase.PixelSpacing = px[0];}else{//提示异常}}else{//提示异常}}else{patientCase.PixelSpacing = 0;//最好是直接提示异常}}}private static DicomDataset GetTagDicomDataset(DicomSequence dicomSequence, DicomTag dicomTag){var lists = dicomSequence.Items;foreach (var e in lists){if (e.Contains(dicomTag)){return e;}}return null;}

本文为愚博客园文章。

博客园链接:多帧Dicom文件获取ImagePosition、Intercept、Slope、PixelSpacing - 盛沧海 - 博客园

http://www.xdnf.cn/news/3367.html

相关文章:

  • AndroidStudio生成AAR
  • 网页工具箱 --- 一个强大的浏览器脚本工具
  • 前端开发 Markdown 编辑器与富文本编辑器详解
  • 长尾关键词SEO优化策略精解
  • Vcpkg C++库管理工具安装
  • Azure AI Foundry实战:从零开始构建智能应用
  • 关于 live555延迟优化之缓存区优化“StreamParser::afterGettingBytes() warning: read”” 的解决方法
  • 晶振:从消费电子到航天领域的时间精度定义者
  • Git仓库目录的所有权问题
  • 2025 新生 DL-FWI 培训
  • Web开发-JavaEE应用SpringBoot栈模版注入ThymeleafFreemarkerVelocity
  • Antd Upload组件连续回车会多次触发文件夹弹窗的bug修复
  • MATLAB绘制饼图(二维/三维)
  • 如何解决服务器文件丢失或损坏的问题
  • linux中systemctl stop 和 kill -9的区别
  • 字节暑期实习-网络运维工程师面经
  • Java学习计划与资源推荐(入门到进阶、高阶、实战)
  • 从 PID 到 Agent:工业控制算法的五代进化史与智能协同革命
  • CentOS网络之network和NetworkManager深度解析
  • 小刚说C语言刷题—1462小明的游泳时间
  • spring中关键字Assert和jdk的assert关键字
  • finereport普通报表设置冻结列后实现点击单元格整行背景变色
  • Kaamel白皮书:MCP安全实践
  • 司南评测集社区 4 月上新一览
  • 宝塔面板运行docker的jenkins
  • openharmony 4.1 运行busybox工具包(保姆教程)
  • HAproxy+keepalived+tomcat部署高可用负载均衡实践
  • 【Python】基于Python的图像分类:从基础CNN到ResNet的全面解析
  • ag-grid-react 列表导出csv列表getDataAsCsv (自定义导出列表配置)自定义新增,修改导出内容
  • 印刷企业绩效考核管理制度与绩效优化路径