对于某些测试,我尝试操作以 dicom 格式存储的 CT 图像的 PixelData
元素,并使用 C# 中的 Fellow Oak Dicom 将其写回文件中.经过一些研究,我发现我要处理的矩阵位于 PixelData
的 Buffer
中,存储在 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");
这是我的第一次尝试,我在 AddOrUpdate
命令中遇到了一个 Exception
,因为它无法将 byte
数组转换为 OB .
阅读例如Pianykh 关于 DICOM 的书,OB 的意思是 Other Byte String。但到目前为止,我无法将操作的 byte
数组转换为 OB。当我尝试这段代码片段时:
DicomOtherByte dob = new DicomOtherByte(DicomTag.PixelData, pixDat);
ctFile.Dataset.AddOrUpdate<DicomOtherByte>(DicomTag.PixelData, dob);
Exception
仍在调用 AddOrUpdate
,因为无法将项目转换为 OB。在 stackoverflow、git 或 google 中的 fo-dicom 文档中搜索,我仍然不知道如何处理它。所以我想知道如何将我的操作矩阵转换为 OB,因为我认为 DicomOtherByte
是 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
和 PixelDataFactory
。
此外,如果您想使用实际图像,请使用 DicomImage
类。
DicomImage image = new DicomImage(ctFile.Dataset);
关于c# - 在 C# 中使用 fo-dicom 操作和转换 CT 图像的像素数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52292288/