【问题标题】:Saving a DICOM image in PNG format以 PNG 格式保存 DICOM 图像
【发布时间】:2017-03-21 18:58:28
【问题描述】:

我有一张dicom 的图片,我在matlab 中读到:

I=dicomread('xyz.dcm');

在显示它时,我使用了以下命令:

imshow(I,[])

我想问的是,我怎样才能通过imwrite写出来,这样我就得到了使用上面imshow命令看到的图像?

例如我试过这个:

imwrite(I,'xyz.png','png');

但是,得到一个图像。

对此有什么想法吗?

谢谢。

【问题讨论】:

  • BMP 文件是什么样的?

标签: matlab dicom


【解决方案1】:

dicom 图像的深度似乎是 16 位,比通常的 8 位要大。
验证这确实是案例类型

>> class( I )

我希望输出为uint16
如果是这样,请尝试:

imwrite( I, 'xyz.png', 'bitdepth', 16 );

【讨论】:

    【解决方案2】:

    当您读取图像时,同时获取颜色图

    [I, map]=dicomread('xyz.dcm');
    

    现在当你保存它时,也给 imwrite 颜色图。

    imwrite(I,map,'xyz.png','png');
    

    顺便说一句,通常不需要最后一个 png。 MATLAB 将看到 .png 扩展名并知道将其保存为 png。

    【讨论】:

    • 感谢您的回复。当我尝试您的解决方案时,出现以下错误(dcm 文件名是 000000.dcm: Error using imwrite>parse_inputs (line 529) The colormap should have three columns. Error in imwrite (line 419) [data, map, filename, format, paramPairs] = parse_inputs(varargin{:});
    • 如果你看一下map变量是什么,你看到了什么?数据的大小和类型?如果地图变量。是空的,这意味着你有一个灰度或真彩色图像。一般来说,当我得到奇怪的东西时,80% 的时候,如果值在 0 和 1 之间,你可以通过乘以 255 或除以 255 得到 0 和 1 之间的值来得到正确的格式,也试试要将数据转换为 double 类型或 uint8 类型,我觉得其中一种组合对您有用。查看 imwrite 的文档,MATLAB 的图像数据格式有点难学
    【解决方案3】:

    嘿,我遇到了同样的问题,似乎其中一种解决方案非常简单。 只需检查您是否将字符串作为目标文件的文件名传递。

    我正在传递 fullfile 函数的输出(这个输出一个单元格)。 imwrite 函数解析输入(vargins)并查找第一个具有 char 类型的变量会发生什么。它使用此索引来查找指定数据类型的参数并因此定义颜色图。如果你的文件路径是一个单元格,它会得到错误的索引并输出奇怪的错误。

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-07
      • 2023-03-05
      • 2019-12-21
      • 1970-01-01
      • 1970-01-01
      • 2017-08-12
      • 2017-04-24
      • 1970-01-01
      相关资源
      最近更新 更多