在 C# 中使用 fo-dicom 操作和转换 CT 图像的像素数据

2024-01-03

对于一些测试,我试图操纵PixelData以 dicom 格式存储的 CT 图像的元素,并将其写回到文件中橡树迪康研究员在 C# 中。经过一番研究,我发现我想要处理的矩阵位于Buffer of PixelData存储在一个byte-大批。所以我写了下面的代码:

DicomFile ctFile = DicomFile.Open(image);
var pixDat = ctFile.Dataset.Get<byte[]>(DicomTag.PixelData);

for (int i = 0; i < pixData.Length; i++)
{
    pixDat[i] = Convert.ToByte(200);
}

ctFile.Dataset.AddOrUpdate<byte[]>(DicomTag.PixelData, pixDat);
ctFile.Save("new file folder");

这是我的第一次尝试,我得到了Exception at the AddOrUpdate命令,因为它无法转换byte-数组到 OB。 阅读例如Pianykh 的关于 DICOM 的书,OB 的意思其他字节串。但到目前为止我无法转换被操纵的byte-数组到 OB。当我尝试这个代码片段时:

DicomOtherByte dob = new DicomOtherByte(DicomTag.PixelData, pixDat);
ctFile.Dataset.AddOrUpdate<DicomOtherByte>(DicomTag.PixelData, dob);

the Exception仍然在召唤AddOrUpdate因为无法将项目转换为 OB。在 stackoverflow、git 中的 fo-dicom 文档或使用 google 进行搜索时,我仍然不知道如何处理它。所以我想知道如何将我的操纵矩阵转换为 OB,因为我想DicomOtherByte is OB.

编辑:Exception是“无法使用 Dicom.DicomOtherByte 类型的值创建 OB 类型的 DICOM 元素”- System.InvalidOperationException

提前致谢。


Dicom 数据集中的像素数据非常特殊。它不能作为单个标签轻松读取或写入。 Fo-Dicom 具有处理像素数据的特殊函数和类。

这是一个例子:

DicomFile ctFile = DicomFile.Open(@"C:\Temp\original.dcm");

// Create PixelData object to represent pixel data in dataset
DicomPixelData pixelData = DicomPixelData.Create(ctFile.Dataset);
// Get Raw Data
byte[] originalRawBytes = pixelData.GetFrame(0).Data;

// Create new array with modified data
byte[] modifiedRawBytes = new byte[originalRawBytes.Length];
for (int i = 0; i < originalRawBytes.Length; i++)
{
    modifiedRawBytes[i] = (byte)(originalRawBytes[i] + 100);
}

// Create new buffer supporting IByteBuffer to contain the modified data
MemoryByteBuffer modified = new MemoryByteBuffer(modifiedRawBytes);

// Write back modified pixel data
ctFile.Dataset.AddOrUpdatePixelData(DicomVR.OB, modified);

ctFile.Save(@"C:\Temp\Modified.dcm");

请注意,还有更多帮助器类可以直接以特定格式处理像素数据,例如PixelDataConverter and PixelDataFactory.

另外,如果您想使用实际图像,请使用DicomImage class.

DicomImage image = new DicomImage(ctFile.Dataset);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 C# 中使用 fo-dicom 操作和转换 CT 图像的像素数据 的相关文章

随机推荐

  • matplotlib show() 不能工作两次

    我有一个奇怪的问题 与 matplotlib 有关 如果我运行这个程序 我可以多次打开和关闭同一个图形 import numpy from pylab import figure show X numpy random rand 100 1
  • 高流量网站的 Facebook 身份验证:空访问令牌、空 /me

    目前 我们有一个在 Facebook 选项卡上运行的应用程序 该应用程序收到了大量流量 每隔几秒钟就有人注册 而且大多数都成功了 但是我遇到了以下问题 根本没有收到访问令牌 空响应 没有错误 或者如果收到 则对 me 的 API 调用失败
  • 检测 iOS UIDevice 方向

    我需要检测设备何时处于纵向 以便我可以发出特殊的动画 但我不希望我的视图自动旋转 当设备旋转为纵向时 如何覆盖自动旋转的视图 我的应用程序只需要以横向显示它的视图 但如果我希望能够检测到纵向旋转 我似乎也需要支持纵向 尝试在应用程序加载或视
  • 将 JSONB 转换为缩小(无空格)字符串

    如果我转换一个文本值 例如 a b 到 JSONB 然后返回到文本空格 之间添加 和 psql gt select a b jsonb text text a b 1 row 如何将文本转换为 jsonb 以便我可以使用 jsonb 函数
  • C#中如何检查字符串的最后一个字符?

    我想在 C 中找到字符串的最后一个字符 然后将其放入if陈述 然后 如果最后一个字符等于 A B 或 C 则应执行某个操作 C 中如何获取字符串的最后一个字符 Use the EndsWith 字符串方法 if string EndsWit
  • PHP:“即时”向电子邮件添加附件?

    我刚刚让PHP的邮件功能在我的测试环境中正常工作 我有一个输出许多字符串的 PHP 应用程序 将这些字符串转换为附件真是太好了 TXT 文件 在电子邮件中 无需先将它们存储在磁盘上并重新读回 这在 PHP 中可能吗 是的 这是可能的 您只需
  • 包含任何内容 ([_]) 和任何内容 (_) 的列表有什么区别

    我试图完成以下任务 如果我有两个列表 L1 和 L2 我希望结果 R 是 L1 中 L2 的 减法 Example L1 1 2 3 L2 2 3 4 5 R 1 我能够做到这一点 但我不知道两者之间有什么区别 and 如果我这样做 dif
  • 在 R 中的点阵图例图中包含线和点

    大家好 我正在处理格子图 一切正常 但我在图例方面遇到了一些麻烦 我在用xyplot 而且效果非常棒 我的数据框是NM I add dput 最后部分的版本 AMes A2009 A2010 A2011 A2012 A2013 A2014
  • 开关参数和powershell.exe -File参数

    据微软称 在极少数情况下 您可能需要为开关参数提供布尔值 要为 File 参数值中的开关参数提供布尔值 请将参数名称和值括在大括号中 如下所示 File Get Script ps1 All False 我有一个简单的脚本 CmdletBi
  • 如何使用 dask 和特定 AWS 配置文件从 s3 读取镶木地板文件

    如何使用 s3 读取 parquet 文件dask以及特定的 AWS 配置文件 存储在凭证文件中 达斯克用途s3fs它使用boto 这是我尝试过的 gt gt gt import os gt gt gt import s3fs gt gt
  • CakePHP - $hasMany 模型中的订单被忽略

    我有一个具有 hasMany 属性的模型 如果我只有以下内容 var hasMany OtherModel 在 OtherModel 扩展 AppModel 类中 我有以下内容 var order colour id DESC 该顺序被忽略
  • 一个域名有可能有多个对应的IP地址吗?

    例如 当我们连接到www example com 首先我们尝试连接到192 0 2 1 如果第一次尝试失败 那么我们会尝试192 0 2 222 是否可以 一个域名可以注册多个备份IP吗 这是循环 DNS 这是一个非常简单的负载平衡解决方案
  • 是否可以使用 BeautifulSoup 只获取没有类或 id 的标签?

    我有数千个 HTML 网站 我正在尝试过滤这些网站中的文本 我正在用漂亮的汤来做这个 get text 从这些网站给我提供了很多不必要的信息 因此我写了一个循环 l for line in text5 soup bs line html p
  • Excel 宏一次将一行连接到文件末尾

    我需要一个 Excel 宏来连接每行的七列数据 直到到达数据末尾 例如 如果我有这样的公式 A1 B1 C1 D1 E1 F1 G1 如何编写宏 以便它按这样的顺序递增到文件末尾的每一行 A1 B1 C1 D1 E1 F1 G1 A2 B2
  • 为什么 Swift 迭代器比数组构建慢?

    这有点与这个问题 https stackoverflow com questions 40669193 explain swift iterators 40672317 40672317 其中假设使用生成器 迭代器 遍历嵌套数组对于迭代元素
  • 创建的参数化查询未显示在数据源 Visual Studio 10 和访问中

    我正在尝试复制northwind数据库但是当我创建参数查询时vw CustomerOrderYear 查询未显示在我的数据源中 我不知道我错过了什么 我的参数查询vw CustomerOrderYear is PARAMETERS Orde
  • 将 Sharepoint TimeZone 信息转换为 Java TimeZone

    我希望将 Sharepoint TimeZone 信息转换为 Java TimeZone 对象 以便与使用 Sharepoint REST API 的应用程序一起使用 据我所知 Sharepoint 以 UTC 格式存储所有时间戳 但是在使
  • 函数必需和非必需变量

    在 PHP 中 我们可以在函数中指定变量的默认值 例如 function myFunction myDefaultVariable myOtherVariable myCheckVariable basic so yeah myDefaul
  • java中的图像比较[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在做我的大学项目 其中需要我进行指纹比较 这可以通过比较两个图像并匹配它们的像素相似性来完成 根据
  • 在 C# 中使用 fo-dicom 操作和转换 CT 图像的像素数据

    对于一些测试 我试图操纵PixelData以 dicom 格式存储的 CT 图像的元素 并将其写回到文件中橡树迪康研究员在 C 中 经过一番研究 我发现我想要处理的矩阵位于Buffer of PixelData存储在一个byte 大批 所以