將avi視頻轉換爲多幀的dicom圖

網絡上有很多將多幀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);
發佈了91 篇原創文章 · 獲贊 41 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章