2013-06-21 133 views
1

我有一个dicom图像这是我在matlab读作:保存为PNG格式的DICOM图像

I=dicomread('xyz.dcm'); 

在显示它,我用下面的命令:

imshow(I,[]) 

我想什么问一下是,我怎样才能通过imwrite来写它,这样我就能看到使用上面的imshow命令看到的图像?

我比如尝试这样做:

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

,但得到图像。

有关于此的任何想法?

谢谢。

+0

“BMP”文件的外观如何? – macduff

回答

0

当你阅读的图像,得到的颜色表以及

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

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

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

并且顺便说一下,最后的png通常不是必需的。 MATLAB会看到.png扩展名并知道将其保存为png。

+0

感谢您的回复。当我尝试你的解决方案时,我得到了以下错误(dcm文件名是'000000.dcm':'错误使用imwrite> parse_inputs(529行) 颜色映射表应该有三列 imwrite错误(第419行) [数据,地图,文件名,格式,paramPairs] = parse_inputs(varargin {:});' – Simplicity

+0

如果你看看地图变量是什么,你看到了什么?数据的大小和类型 如果var 。是空的,这意味着你有一个灰度或真彩色图像。一般来说,当我得到奇怪的东西,80%的时候,你可以通过乘以255来得到它的正确格式,如果值在0和1之间,或者除以255以得到0和1之间的值,也尝试将数据转换为double类型,或者键入uint8,我有一种感觉,其中一种组合会适合你。查看imwrite的文档,MATLAB的图像数据格式是一种学习的痛苦 – Shaun314

1

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

>> class(I) 

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

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

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

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

我希望这有助于