• c# - C#用fo-dicom对CT图像的PixelData进行处理和转换


    转自:c# - C#用fo-dicom对CT图像的PixelData进行处理和转换 - IT工具网

    对于某些测试,我试图操纵 PixelData以 dicom 格式存储的 CT 图像的元素,并使用 C# 中的 Fellow Oak Dicom 将其写回文件中。经过一番研究,我发现我想要处理的矩阵在 Buffer 中。的 PixelData存储在 byte -大批。所以我写了以下代码:

    1. DicomFile ctFile = DicomFile.Open(image);
    2. var pixDat = ctFile.Dataset.Get<byte[]>(DicomTag.PixelData);
    3. for (int i = 0; i < pixData.Length; i++)
    4. {
    5. pixDat[i] = Convert.ToByte(200);
    6. }
    7. ctFile.Dataset.AddOrUpdate<byte[]>(DicomTag.PixelData, pixDat);
    8. ctFile.Save("new file folder");

    这是我的第一次尝试,我收到了 Exception在 AddOrUpdate命令,因为它无法转换 byte -数组到OB。
    阅读例如Pianykh 的关于 DICOM 的书,OB 表示其他字节字符串。但到目前为止我无法转换被操纵的 byte -数组到OB。当我尝试这个代码片段时:
    1. DicomOtherByte dob = new DicomOtherByte(DicomTag.PixelData, pixDat);
    2. 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 具有处理像素数据的特殊函数和类。

    下面是一个例子:

    1. DicomFile ctFile = DicomFile.Open(@"C:\Temp\original.dcm");
    2. // Create PixelData object to represent pixel data in dataset
    3. DicomPixelData pixelData = DicomPixelData.Create(ctFile.Dataset);
    4. // Get Raw Data
    5. byte[] originalRawBytes = pixelData.GetFrame(0).Data;
    6. // Create new array with modified data
    7. byte[] modifiedRawBytes = new byte[originalRawBytes.Length];
    8. for (int i = 0; i < originalRawBytes.Length; i++)
    9. {
    10. modifiedRawBytes[i] = (byte)(originalRawBytes[i] + 100);
    11. }
    12. // Create new buffer supporting IByteBuffer to contain the modified data
    13. MemoryByteBuffer modified = new MemoryByteBuffer(modifiedRawBytes);
    14. // Write back modified pixel data
    15. ctFile.Dataset.AddOrUpdatePixelData(DicomVR.OB, modified);
    16. ctFile.Save(@"C:\Temp\Modified.dcm");

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

    此外,如果您想使用实际图像,请使用 DicomImage类(class)。
    DicomImage image = new DicomImage(ctFile.Dataset);
    

    关于c# - C#用fo-dicom对CT图像的PixelData进行处理和转换,我们在Stack Overflow上找到一个类似的问题: type conversion - Manipulating and Converting PixelData of CT Image with fo-dicom in C# - Stack Overflow

  • 相关阅读:
    (25)Verilog实现三态门(inout)
    mysql聚合查询
    Java面试过程中高频基础面试题
    岩土工程监测中振弦采集仪数据处理与解读的挑战与方法
    空间复杂度(数据结构)
    #796 Div.2 F. Sanae and Giant Robot set *
    【JavaWeb】EL表达式
    海滩的海鸥
    Linux常用命令
    HDU 3549 Flow Problem (最大流ISAP)
  • 原文地址:https://blog.csdn.net/sinolover/article/details/125500286