MATLAB:dicom匿名化(dicomanon)错误

时间:2016-01-08 11:10:22

标签: matlab dicom

我尝试使用MATLAB' dicomanon函数使用以下命令对一个DICOM文件进行匿名处理:

dicomanon(path_file_in, path_file_out);

我收到以下错误。

  

使用dicom_add_attr> validate_data(第118行)时出错

     

属性(7FE0,0010)的数据类型错误。

属性(7FE0,0010)对应于DICOM标头中的PixelData元素,可以使用以下方法访问(在我的特定DICOM文件中,使用MATLAB' s dicominfo函数后):

DcmHdr.IconImageSequence.Item_1

其中DcmHdr是结构,从dicominfo输出。

就我而言:

PixelData: [2048x1 uint16]

就价值表示(VR)而言,使用 OB OW 编码存储PixelData,因此我开始研究dicomanon尝试理解在这种情况下使用哪个子功能(这有意义吗?)。

VR似乎是在dicom_convert_meta_to_attr.m文件中确定的,特别是determine_VR子功能(dicom_convert_meta_to_attr.m的第44行)。在这种情况下,VR被确定为 OB

现在,VR为OB时接受的类型在dicom_add_attr.mdicomanon的另一个子功能)的第354行中指定,它们是:

  • uint8
  • int8
  • logical

正如我们在PixelData之前看到的uint16类型在这种情况下类似,这似乎是触发错误的原因。

我不确定这里发生了什么。我的DICOM文件有问题吗?其他功能如dicomreaddicominfo似乎在此文件中正常工作。函数isdicom也返回1,因此MATLAB似乎认为这是一个有效的DICOM文件(?)。

如果有人能够了解这里发生的事情,我感激不尽。

EDIT1:忘了提及我使用R2015b。

EDIT2:在malat评论后编辑,见下文:

感谢您的评论,马拉特。如果您能就以下事项向我提出您的想法,我将不胜感激:

以下是您的建议结果: enter image description here

虽然我不完全确定这两种不同的像素数据元素之间的区别,但我明白你有两种不同的含义。我还使用MATLAB' dicomdisp函数验证了这一点:

enter image description here

有趣的是,我采用了PixelData元素(来自DcmHdr.IconImageSequence.Item_1,如上所述)并将其转换为uint8,这是VR为OB时接受的类型之一。然后我创建了一个修改过的DICOM文件(使用dicomwrite)。此修改后的DICOM文件与原始文件之间的唯一区别是我将DcmHdr.IconImageSequence.Item_1.PixelData转换为uint8。然后在修改后的文件上重新运行dicomanon没有错误。

另一点需要指出的是。正如我上面提到的,在我看来,VR被确定为 OB (使用dbstop if error发现此情况)。另一方面,gdcmdumpdicomdisp都显示VR OW (绿色矩形)。如果VR OW ,则不会出现错误,因为使用此VR,uint16是有效类型。也许我离开但我想知道determine_VR子功能是否错误地将VR确定为 OB

在修改后的DICOM文件上使用dicomread(转换为uint8后)会返回一个与转换前完全相同的图像(矩阵),所以我想我可以选择这个hack运行dicomanon没有错误的目的。原始DICOM图像的文件大小为95KB,转换后为28KB,但图像本身似乎没有变化,以及DICOM标题。我必须丢失与图像图标相关的信息(无论这是什么!?)。有什么想法吗?

谢谢!

0 个答案:

没有答案