MATLAB Answers

Troubles using dicomwrite() for the PET modality?

10 ビュー (過去 30 日間)
Bryce Johnson
Bryce Johnson 2019 年 8 月 6 日
回答済み: Laure Saint-Aubert 2019 年 12 月 3 日
I have many PET slices in the dicom format. I am trying to manipulate the metadata of each slice (specifically the ImagePositionPatient fieldname) in order to automatically center the image at the origin in an image viewer(Amide). To do this I must use the dicomread, dicominfo, and dicomwrite functions.
d=dicominfo(fid); % dicom object
V=dicomread(fid); % dicom volume
xdcm=-((double(d.Rows)*double(d.PixelSpacing(1)))/2); % reset the xy Image Position
% so that it will view at the origin for my image viewer
ydcm=-((double(d.Columns)*double(d.PixelSpacing(2)))/2);
d.ImagePositionPatient(:)=[xdcm,ydcm];
dicomwrite(V,fid,d); % write this new dicom object in the same file.
I have done this successfully for the 'CT' modality, but keep running into errors for the 'PT' modality. I believe this is because dicomwrite doesn't support usage of PET data. The error I'm getting looks something like this:
% Error using dicom_prep_metadata (line 92)
% Unsupported SOP class (1.2.840.10008.5.1.4.1.1.128) in full verification mode.
% Consider using 'CreateMode' with a value of 'Copy'.
I'm thinking of just changing the SOPclass to a 'CT' number in order to just "cheat the system", but surly their has to be away to write a dicom volume for a PET dicom object?
Any help is greatly appreciated.
Thanks,
Bryce

  0 件のコメント

サインインしてコメントする。

採用された回答

Jyotsna Talluri
Jyotsna Talluri 2019 年 8 月 9 日
編集済み: Jyotsna Talluri 2019 年 8 月 11 日
Hi,
Try using
dicomwrite(V,fid,d,'CreateMode','copy');
dicomwrite does not verify the metadata written to the file when CreateMode parameter is set to ‘copy'
Hope it helps

  1 件のコメント

Bryce Johnson
Bryce Johnson 2019 年 8 月 12 日
This answer works and is exactly the kind of trick I was looking for. Thank you!!!

サインインしてコメントする。

その他の回答 (1 件)

Laure Saint-Aubert
Laure Saint-Aubert 2019 年 12 月 3 日
Hi,
I am also trying to center my PET images at the origin, so I thought of benefiting from your post and code.
However, when I am trying to run it, I can't seem to make it work because of the number of dimensions of ImagePositionPatient ([3x1 double]), so d.ImagePositionPatient(:)[xdcm,ydcm] gives me the following message: "In an assignment A(:)=B, the number of elements in A and B must be the same".
I believe I should also reset the z dimension of Image Position, but I can't figure out how to.
Any help is more than welcome :)
Cheers
Laure

  0 件のコメント

サインインしてコメントする。

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by