Fellow Oak DICOM - 改变图像窗位和窗宽

6

我不是一名经验丰富的程序员,只是需要向我的VS2010项目添加DICOM查看器。 我可以在Windows窗体中显示图像,但无法弄清如何更改窗口中心和宽度。以下是我的代码:

DicomImage image = new DicomImage(_filename);
            int maxV = image.NumberOfFrames;
            sbSlice.Maximum = maxV - 1;
            image.WindowCenter = 7.0;
            double wc = image.WindowCenter;
            double ww = image.WindowWidth;

            Image result = image.RenderImage(0);
            DisplayImage(result);

它没有起作用。我不知道这是否是正确的方法。


你能再明确一下你使用的DICOM库是哪一个吗? - Anatoly G
我正在使用Fellow Oak DICOM for .NET,谢谢。 - hncl
1
注意到您在fo-dicom讨论论坛上发布了相同的问题,并得到回复称您正在运行的软件版本存在窗口级别错误。为了保持Stackoverflow的一致性,建议您根据论坛回复提供自己的答案,并在问题中指出您正在运行fo-dicom 1.0.26版本。 - Anders Gustafsson
好的,我会在解决问题后发布答案。这个 bug 已经在最新的 Git 中修复了;然而,像 image.WindowCenter = 7.0; 这样的代码并没有起作用。正如我所提到的,我不是一个有经验的程序员,希望能找到一个示例或文档来改变窗口级别。 - hncl
2个回答

6
DicomImage类并非用于实现图像查看器,而是用于在DICOM Dump实用程序中呈现预览图像和测试图像压缩/解压缩编解码器。也许将其包含在库中是一个错误?当它被用于远超出其预期功能时,很难找到代码错误。
话虽如此,我花了一些时间修改了代码,使WindowCenter / WindowWidth属性适用于呈现的图像。您可以在Git存储库中找到这些修改。
var img = new DicomImage(fileName);
img.WindowCenter = 2048.0;
img.WindowWidth = 4096.0;
DisplayImage(img.RenderImage(0));

1
谢谢Colby,非常感谢。你说得对,我试图使用库进行扩展功能;毫无疑问,这是由于我在DICOM方面的经验有限。再次感谢你的努力。 - hncl

2
我看了一下代码,发现它存在很多错误。https://github.com/rcd/fo-dicom/blob/master/DICOM/Imaging/DicomImage.cs 在当前有缺陷的实现中,只有在Dataset.Get(DicomTag.PhotometricInterpretation)为Monochrome1或Monochrome2时,设置WindowCenter或WindowWidth属性才有效果。这已经非常荒谬了,但仍然无法使用,因为_renderOptions变量只在一个地方设置,并且立即用于_pipeline创建(没有机会使用WindowCenter属性更改它)。你唯一的机会是灰度_renderOptions初始化:_renderOptions = GrayscaleRenderOptions.FromDataset(Dataset);
目前的解决方案:您的数据集应该具备...
  • DicomTag.WindowCenter适当设置
  • DicomTag.WindowWidth != 0.0
  • DicomTag.PhotometricInterpretation == Monochrome1 或者 Monochrome2

下面的代码可以实现这个功能:

DicomDataset dataset = DicomFile.Open(fileName).Dataset;
//dataset.Set(DicomTag.WindowWidth, 200.0); //the WindowWidth must be non-zero
dataset.Add(DicomTag.WindowCenter, "100.0");
//dataset.Add(DicomTag.PhotometricInterpretation, "MONOCHROME1"); //ValueRepresentations tag is broken
dataset.Add(new DicomCodeString(DicomTag.PhotometricInterpretation, "MONOCHROME1"));
DicomImage image = new DicomImage(dataset);
image.RenderImage();

最好的解决方案是:等待这个有缺陷的库被修复。

你认为这是问题的根源吗?你有小数点吗?如果在问题中发布的代码有效,我认为我可以编写代码使WindowsCenter工作。附言:你的图像是灰度的吗? - Ark-kun
谢谢,我遇到了这个错误: Dicom.DicomDataset' 不包含 'Set' 的定义。 - hncl
抱歉,应该使用 ".Add" 而不是 ".Set"。 - Ark-kun
更改类型为字符串。请重试。 - Ark-kun
那个库太烂了...再试一次强制让它工作。 - Ark-kun
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接