c# - DICOM多平面图像重建
问题描述
我的问题是,我必须开发一个程序,可以在 C# 中打开 DICOM CT 图像(没有任何库),我还应该处理轴向、冠状和矢状图像。我已经弄清楚了这些,但是冠状和矢状图像分辨率不正确。我查看了一百万个论坛和问题,但我只是没有找到正确的方法来找到冠状、矢状分辨率。如果有人能给我一个公式或什么我会很高兴。
据我所知,这些是获得解决方案所需的信息:
- 宽度和高度:512x512
- 图片数量:518
- (0018, 0050) 切片厚度:1.25
- (0018, 0080) 切片间距:0.625
- (0028, 0030) 像素间距:0.845703 / 0.845703
但是我从 (0020, 0032) 图像位置(患者)计算切片之间的间距,即 0.625 我真的不知道这些信息之间的联系是什么,获得正确分辨率的公式是什么。我的确切问题是:日冕和矢状图像的分辨率是多少?
如果你们需要更多关于切片的信息,请告诉我。先感谢您 :)
编辑: 我用 RadiAnt DICOM Viewer 检查了冠状/矢状分辨率应该是 512x383。如果有人知道为什么结果是 383 的公式。请告诉我。与此同时,我会试着弄清楚自己。
解决方案
解决问题没有明确的答案。你不应该忘记在 DICOM 中你有PixelSpacing,而你在“普通图像”中没有。
典型图像必须始终具有等距网格才能在屏幕上正确显示。但在 dicom 中,您可以拥有 100x100 像素和 1.0\1.0 像素间距的图像,并且您可以拥有 100x200 像素和 1.0\0.5 像素间距的图像。有效的 DICOM-Viewer 将以相同的方式显示两个图像。第二张图像有更多的像素,但它们更小。导致与第一张图像相同的显示。
很明显,图像堆栈的高度是 518*0,625 = 323,75 mm。所以你有很多可能性:
- 您可以创建一个512x324图像,将像素间距设置为0.845703\1.0并计算(插值)z 值。
- 最好的解决方案是,按原样获取像素数据,不进行任何插值,因此不会丢失任何数据。然后你有一个512x518像素的网格。像素间距将为0.845703\0.625。这是因为 x 方向的间距来自原始数据中像素的间距,而 y 方向的间距是切片之间的距离。
- 但是:有一些 DICOM-Viewer 不能正确处理非等距像素。如果您将图像导出为 jpeg 并让窗口/浏览器显示图像,那么您需要等距像素。因此,您必须选择多个像素,这样当像素间距为 0.845703mm 时,总高度为 323,75mm。这是 323,75 / 0.845703 = 382,817 ~ 383 像素。因此,如果您生成一个512x383像素的图像,您必须在其中对切片进行插值,您可以创建一个像素间距为0.845703\0.845703的图像。
推荐阅读
- java - 有没有办法检查 ValueEventListener 是否成功删除?
- flutter - Android Studio 陷入了创建颤振项目的困境
- css - 使用 bootstrap 4 配色方案安装 bootstrap 5
- javascript - [NodeJS]从一个范围内获取不重复的数字
- postgresql - PostgreSQL如何用十进制逗号读取csv文件?
- python - 使用转义字符将 tradingview 策略连接到 3commas
- c - 我的程序没有正确分配空间
- python - 如何在 FastAPI 中验证请求正文?
- javascript - 设置 firebase 配置时出错
- sql - PostgreSQL在过程中选择总和