How to convert 3D to 4D images

22 ビュー (過去 30 日間)
mohd akmal masud
mohd akmal masud 2022 年 2 月 15 日
コメント済み: mohd akmal masud 2022 年 2 月 15 日
Hi all
I have image dicom as 3D as (attached). How to combine it all the slice to 4D?
anyone can help me?


Simon Chan
Simon Chan 2022 年 2 月 15 日
Try thw following:
[filename,pathname]=uigetfile('*.dcm','Select Files', 'MultiSelect', 'on');
Nz = length(filename);
for k = 1: Nz
imagedata = dicomread(fullfile(pathname,filename{k}));
if k == 1
[Ny,Nx] = size(imagedata);
rawdata = zeros(Ny,Nx,Nz);
rawdata(:,:,k) = imagedata; % Convert to 3D
Dimage = permute(rawdata,[1 2 4 3]); % Convert to 4D

その他の回答 (1 件)

DGM 2022 年 2 月 15 日
編集済み: DGM 2022 年 2 月 15 日
If you have a volumetric image represented in a 3D array and you want to slice it on dim 3 and arrange each slice into a frame in a 4D image, you can do
B = permute(A,[1 2 4 3]);
If you want to slice on another dimension, just rearrange the first,second, and fourth elements of that vector in the call to permute().
A concrete example:
dirname = 'ZubalPhantomDicom';
dicomlist = dir(fullfile(pwd,dirname,'*.dcm'));
imstack = cell(numel(dicomlist),1);
for cnt = 1:numel(dicomlist)
imstack{cnt} = dicomread(fullfile(pwd,dirname,dicomlist(cnt).name));
% the image is currently a cell array of pages
% say we arrange the pages on dim3
imstack3 = cat(3,imstack{:});
% let's say we want to arrange the pages on dim4 instead
imstack4 = cat(4,imstack{:});
% let's say we wanted to take imstack3 and turn it into imstack4
imstack34 = permute(imstack3,[1 2 4 3]);
  1 件のコメント
mohd akmal masud
mohd akmal masud 2022 年 2 月 15 日
TQ Sir DGM and Simon Chan, Its work!!


Community Treasure Hunt

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

Start Hunting!

Translated by