gpt4 book ai didi

matlab - 在不修改字典的情况下在matlab中写入Private Dicom数据

转载 作者:太空宇宙 更新时间:2023-11-03 19:47:39 25 4
gpt4 key购买 nike

我正在 matlab 中读取一个 dicom 文件并修改其中的一些数据并尝试将其保存到另一个文件中,但是在这样做时,私有(private) dicom 数据根本没有写入(当'WritePrivate'设置为 0 时) 或者它被写成一个变得难以理解和无用的 UINT8 数组。我什至尝试将我从原始 dicom 文件中获取的数据复制到一个新结构并写入一个新的 dicom 文件,但即使私有(private)数据在新结构中仍然很好,它在新 dicom 文件中也不会保留。有什么方法可以在不更改 matlab dicom 字典的情况下复制到新的 dicom 文件时保持此私有(private)数据的完整性?

我提供了以下代码来展示我正在尝试做的事情。

X=dicomread('Bad011_4CH_01.dcm');
metadata = dicominfo('Bad011_4CH_01.dcm');
metadata.PatientName.FamilyName='LastName';
metadata.PatientName.GivenName='FirstName';
birthday=metadata.PatientBirthDate;
year=birthday(1,1:4);
newyear=strcat(year,'0101');
metadata.PatientBirthDate=newyear;
names=fieldnames(metadata);

h=metadata;

dicomwrite(X,'example.dcm',h,'CreateMode','copy');

newh=dicominfo('example.dcm');

此处 newh 中的数据不包含任何私有(private)数据。如果我将代码更改为以下内容

dicomwrite(X,'example.dcm',h,'CreateMode','copy','WritePrivate',1);

在这种情况下,私有(private)数据将完全更改为某个 UIN8 数组并且无用。我的任务的理想解决方案是在不更改 matlab dicom 字典的情况下将私有(private)数据保留在新创建的 dicom 文件中。

最佳答案

你有没有试过这样的事情:

dicomwrite(uint16(image), fileName, 'ObjectType', 'MR Image Storage', ...
'WritePrivate', true, header);

其中“header”是由名称-值对组成的结构,使用与从 MATLAB 的 dicominfo 函数中获取的 header 数据相同的格式?我在 MATLAB 中创建图像的一般方法是避免使用 CreateMode“复制”,而是通过显式复制对复制有意义的属性并为应该具有新值的属性生成我自己的值来构建我自己的 DICOM header 。

要编写私有(private)标签,您可以这样做:

header.Private_0045_10xx_Creator = 'MY_PRIVATE_BLOCK';
header.Private_0045_1001 = int32(65535);

如果您随后使用 dicomwrite 将其写出并使用 hdr = dicominfo('mynewimg'); 将其读回,您可以看到它确实将值写入了 32 位整数尽管不幸的是,if 总是要读取数据作为 uint8 值的向量。

>> hdr.Private_0045_1001

ans =

255
255
0
0

只要您知道期望的类型,就应该能够在阅读标题后将数据转换回所需的类型。例如:

>> typecast(hdr.Private_0045_1001, 'int32')

ans =

65535

关于matlab - 在不修改字典的情况下在matlab中写入Private Dicom数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13765510/

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