matlab で dicom ファイルを読み取り、そのデータを変更して別のファイルに保存しようとしていますが、その間にプライベート dicom データがまったく書き込まれない (「WritePrivate」が 0 に設定されている場合) または理解不能で役に立たなくなるUINT8配列として書かれています。元の dicom ファイルから取得したデータを新しい構造にコピーして、新しい dicom ファイルに書き込もうとしましたが、プライベート データは新しい構造で問題なく残っていても、新しい dicom ファイルには残りません。matlab dicom ディクショナリを変更せずに新しい dicom ファイルにコピーするときに、このプライベート データをそのまま保持する方法はありますか?
私がやろうとしていることを示すために、次のコードを提供しました。
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 のデータにはプライベート データは含まれていません。コードを次のように変更すると
dicomwrite(X,'example.dcm',h,'CreateMode','copy','WritePrivate',1);
この場合、プライベート データは UIN8 配列に完全に変更され、役に立たなくなります。私の仕事の理想的な解決策は、matlab dicom ディクショナリを変更せずに、新しく作成された dicom ファイルにプライベート データを保持できるようにすることです。