gpt4 book ai didi

c# - 使用 ClearCanvas 将 JPG 图像文件编码为 DICOM PixelData

转载 作者:太空宇宙 更新时间:2023-11-03 13:17:37 26 4
gpt4 key购买 nike

我有一组 JPG 图像,它们实际上是 CT 扫描的切片,我想将其重建为 DICOM 图像文件并导入到 PACS 中。

我正在使用 ClearCanvas,并设置了所有必需的标签(并通过使用专有应用程序将我的一个 JPG 文件转换为 DICOM 来确认它们,以确保它们相同)。我只是不确定应该如何处理我的 JPG 文件以将其放入 PixelData 标签?

目前,根据 ClearCanvas 论坛的建议,我正在将其转换为字节数组,但图像在 DICOM 查看器中出现乱码。我应该如何处理图像数据以使其成为可读格式?

    public DicomFile CreateFileFromImage(Image image)
{
int height = image.Height;
int width = image.Width;
short bitsPerPixel = (short)Image.GetPixelFormatSize(image.PixelFormat);

byte[] imageBuffer = ImageToByteArray(image);
DicomFile dicomFile = new DicomFile();
dicomFile.DataSet[DicomTags.Columns].SetInt32(0, width);
dicomFile.DataSet[DicomTags.Rows].SetInt32(0, height);
dicomFile.DataSet[DicomTags.BitsStored].SetInt16(0, bitsPerPixel);
dicomFile.DataSet[DicomTags.BitsAllocated].SetInt16(0, bitsPerPixel);
dicomFile.DataSet[DicomTags.HighBit].SetInt16(0, 7);
//other tags not shown
dicomFile.DataSet[DicomTags.PixelData].Values = imageBuffer;
return dicomFile;
}
public static byte[] ImageToByteArray(Image imageIn)
{
MemoryStream ms = new MemoryStream();

imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
return ms.ToArray();
}

最佳答案

ClearCanvas 库作为两个辅助类,可以更轻松地在 DicomFile 中编码和解码像素数据。它们是 DicomCompressedPixelData 类和 DicomUncompressedPixelData 类。您可以使用它们来设置图像的参数,并将它们编码到 DicomFile 对象中。

在您的情况下,由于您正在对压缩对象进行编码,因此您应该使用 DicomCompressedPixelData 类。类上有可以设置的属性。调用 UpdateMessage 方法会将这些属性值复制到 DicomFile 对象。此外,此类还有一个 AddFrameFragment 方法,可以正确编码像素数据。请注意,压缩像素数据必须在每个数据帧周围有一些特定的二进制包装器。这是您以前的代码中缺少的部分。下面的代码显示了如何进行设置。

        short bitsPerPixel = (short)Image.GetPixelFormatSize(image.PixelFormat);

var dicomFile = new DicomFile();
var pd = new DicomCompressedPixelData(dicomFile);

pd.ImageWidth = (ushort)image.Width;
pd.ImageHeight = (ushort) image.Height;
pd.BitsStored = (ushort)bitsPerPixel;
pd.BitsAllocated = (ushort) bitsPerPixel;
pd.HighBit = 7;
pd.SamplesPerPixel = 3;
pd.PlanarConfiguration = 0;
pd.PhotometricInterpretation = "YBR_FULL_422";

byte[] imageBuffer = ImageToByteArray(image);
pd.AddFrameFragment(imageBuffer);

pd.UpdateMessage(dicomFile);

return dicomFile;

关于c# - 使用 ClearCanvas 将 JPG 图像文件编码为 DICOM PixelData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25498247/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com