網絡上有很多將多幀dicom圖轉換爲avi的小工具.
但是反轉換的工具卻沒有找到.
可能是因爲需要自己寫meta數據.
正好要用到, 所以用matlab實現了這個功能.
注意:
1. 要有和目標輸出dicom圖相同元數據的參考dicom圖.
2. 如果沒有參考dicom, 需要自己寫相應的元數據.
3. 多幀dicom圖的數據是按照4-D存儲的, 格式爲(width, height, 1, frame_num).
4. matlab讀avi數據是uint8, dicom圖數據是uint16. 需要一個擴展.
5. 這種生成的dicom圖比較簡單, 不能用於醫學診斷.
matlab代碼:
%% 把avi轉錄成dcm
clear;close all;clc;
metadata=dicominfo('ref.dcm'); % 參考的dicom文件的元數據
refmov=dicomread('ref.dcm');% 參考dicom的圖像文件
xyloObj = VideoReader('錄像7.avi');
% 幀數如果和ref.dcm不一樣, 需要更改元數據的參數
nFrameOut=20;
if nFrameOut>xyloObj.NumberOfFrames
nFrameOut=xyloObj.NumberOfFrames;
end
% 多幀的dicom圖是按照4-D矩陣存儲的.
mov=nan(960,960,1,nFrameOut);
% 一次讀一幀
for k = 1 : nFrameOut
framedata=imresize(rgb2gray(read(xyloObj, k)),[960,960]);
% uint8擴展爲uint16
mov(:,:,1,k) = uint16(uint16(framedata)*16);
end
% 寫成多幀dicom,'CreateMode'設置爲'copy'
metadata.NumberOfFrames=nFrameOut;
dicomwrite(uint16(mov),'錄像7.dcm',metadata,'CreateMode','copy','MultiframeSingleFile',true);