You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于.NET4.0,如何在fo-dicom 1.x中获取未压缩RGB原始像素数据

用fo-dicom获取Philips超声图像的原始RGB数据方案

嘿,针对你用.NET4.0 + fo-dicom处理Philips Xcelera R4.1 L1超声图像的需求,我整理了具体的实现步骤,帮你拿到原始RGB像素数据用于标注:

核心思路

你的图像采用JPEG Baseline(1.2.840.10008.1.2.4.50)压缩传输语法,且光度学解释为RGB,fo-dicom的DicomImage类会自动处理解压逻辑,直接帮你拿到可用的原始像素数据。

具体实现代码

using Dicom;
using Dicom.Imaging;
using System.Drawing; // 用于Bitmap标注操作

// 1. 加载目标DICOM文件
var dicomFile = DicomFile.Open("你的超声图像路径.dcm");

// 2. 可选:手动注册JPEG编解码器(针对.NET4.0环境,确保解压正常)
// 如果遇到解压错误,添加这行代码
DicomCodec.RegisterTranscoder(DicomTransferSyntax.JPEGProcess1, new DicomJpegCodec());

// 3. 创建DicomImage实例,自动完成JPEG解压
var dicomImage = new DicomImage(dicomFile.Dataset);

// 4. 获取原始RGB字节数组
// 每个像素按R→G→B顺序存储,每个像素占3个字节
byte[] rawRgbData = dicomImage.RawData;

// 5. 获取图像尺寸(用于后续标注时计算坐标)
int imageWidth = dicomFile.Dataset.GetSingleValue<int>(DicomTag.Columns);
int imageHeight = dicomFile.Dataset.GetSingleValue<int>(DicomTag.Rows);

// --- 可选:直接转换为Bitmap进行标注操作 ---
using (Bitmap annotationBitmap = dicomImage.RenderImage())
{
    using (Graphics g = Graphics.FromImage(annotationBitmap))
    {
        // 示例:绘制一个红色矩形标注(按需替换成你的标注逻辑)
        g.DrawRectangle(Pens.Red, new Rectangle(20, 20, 80, 80));
        // 也可以添加文字标注:g.DrawString("标注点", new Font("Arial", 12), Brushes.Blue, 100, 100);
    }
    // 保存标注后的图像或进一步处理
    annotationBitmap.Save("标注后的图像.png");
}

关键注意事项

  • 兼容性:你用的end-of-the-road分支是fo-dicom专门为旧框架(如.NET4.0)维护的分支,确保引用的NuGet包或编译的程序集是该分支的版本,避免版本不兼容问题。
  • 像素格式验证:因为光度学解释是RGB,rawRgbData的长度应该等于 imageWidth * imageHeight * 3,如果不符,可以检查DICOM数据集里的BitsAllocated和SamplesPerPixel字段(RGB图像的SamplesPerPixel应为3)。
  • 编解码器问题:如果运行时出现JPEG解压失败,确认已经引用了fo-dicom的编解码器组件(如fo-dicom.Codecs),或者手动注册上面代码中的DicomJpegCodec。

内容的提问来源于stack exchange,提问作者user618886

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:11:34