MATLAB Answers

Dicom Header Editing & Image Intensity Scaling for output

36 views (last 30 days)
AFH
AFH on 27 Jan 2012
Commented: Louise Morel on 11 Apr 2016
I'm reading in a dicom image that is missing a few fields in the header information and I would like to add those fields and output the image data untouched as a dicom with the new header information. I have looked at the dicom-dict.txt file to ensure that I have the right fieldnames, but when I write out the dicom, it doesn't keep the original header information. Also, when I go to display the image, the LUT appears to be inverted or cutoff (rather than having -2048 - + 2048 scaling, it has 0 - 4096 scaling).
Greatly appreciate your help in Advance ... Cheers

Answers (3)

AFH
AFH on 27 Jan 2012
here is the bit of code i'm using:
x = dicomread('Test_Image');
xinfo = dicominfo('Test_Image');
xinfo.PatientID = '123456';
xout = dicomwrite(x,'Test_Image','gray',xinfo);
I have tried copying the header to a new variable and editing the new one with out any success. I have also messed around with the 'CreateMode' option and still no results.
I just need to be able to add the 'PatientID' field to the header and write out the dicom image untouched.
thanks
  1 Comment
Sean de Wolski
Sean de Wolski on 27 Jan 2012
Why are you calling it with 'gray'? I don't see this in the documentation.

Sign in to comment.


Sean de Wolski
Sean de Wolski on 27 Jan 2012
X = dicomread('CT-MONO2-16-ankle.dcm');
metadata = dicominfo('CT-MONO2-16-ankle.dcm');
metadata.PatientID = '12343';
dicomwrite(X, 'ct_file.dcm', metadata);
info = dicominfo('ct_file.dcm');
info.PatientID
Unable to replicate.
  2 Comments
AFH
AFH on 27 Jan 2012
Let me rephrase that ... You're example, which I have tried works fine. But when I substitute my image, those are the errors I get.

Sign in to comment.


AFH
AFH on 30 Jan 2012
I think I have figured out the header editing part by using the following command on output:
xout = dicomwrite(x,'Test_Image.dcm',xinfo,'CreateMode','Copy');
But the image intensity remains the inverse of the original image. Any ideas?
  1 Comment
Louise Morel
Louise Morel on 11 Apr 2016
I think the output of dicomwrite gives you an image with uint16 values (unsigned 16 bit integers) so it can't display negative values as you seem to have -2048 - + 2048 scaling

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!