how to resolve index exceeds matrix dimensions in matlab?

孤街醉人 提交于 2019-12-31 06:21:01

问题


I am trying to read series of dicom images from a folder named as series 8.below is code to read series of dicom images from a particular folder.i am getting error index exceeds matrix dimensions at info = dicominfo(fullfile(fileFolder,fileNames{1})).

clear all;
close all;
clc;
fileFolder = fullfile(pwd, 'series 8');
files = dir ( fullfile (fileFolder, '*.dcm'));
fileNames = {files.name};

%examine file header (metadata , from dicom stack)

info = dicominfo(fullfile(fileFolder,fileNames{1}))

%extract size info from metadata
voxelsize = [info.PixelSpacing;info.SliceThickness];

%read one file to get size
I = dicomread(fullfile(fileFolder,fileNames{1}))
classI = class(I);
sizeI = size(I);
numImages = length(fileNames);

%read slice images populate 3d matrix
hWaitBar = waitbar(0,'reading dicom files');

%create array
mri= zeroes(info.rows , info.columns , numImages , classI )
for i=length(fileNames):-1:1
    fname = fullfile(fileFolder, fileNames{i});
    mri(:,:,i) = unit16(dicomread(fname));
    waitbar((length(fileNames)-i+1)/length(fileNames))
end

delete(hWaitBar);

回答1:


Below two options that will do it. In the first you create a loop around your whole approach and as filenames is zero when there is no dcm file the loop will not get executed. The second option tests whether files is empty and if so it is not executed.

clear all;
close all;
clc;
fileFolder = fullfile(pwd, 'series 8');
files = dir ( fullfile (fileFolder, '*.dcm'));
fileNames = {files.name};

%examine file header (metadata , from dicom stack)

for i=length(fileNames):-1:1
   if (i == 1)
       info = dicominfo(fullfile(fileFolder,fileNames{i}));

       %extract size info from metadata
       voxelsize = [info.PixelSpacing;info.SliceThickness];

       %read one file to get size
       I = dicomread(fullfile(fileFolder,fileNames{i}));
       classI = class(I);
       sizeI = size(I);
       numImages = length(fileNames);

       %read slice images populate 3d matrix
       hWaitBar = waitbar(0,'reading dicom files');

       %create array
       mri= zeroes(info.rows , info.columns , numImages , classI );
   else
       fname = fullfile(fileFolder, fileNames{i});
       mri(:,:,i) = unit16(dicomread(fname));
       waitbar((length(fileNames)-i+1)/length(fileNames))
   end
end
delete(hWaitBar);

the second

clear all;
close all;
clc;
fileFolder = fullfile(pwd, 'series 8');
files = dir ( fullfile (fileFolder, '*.dcm'));
fileNames = {files.name};

%examine file header (metadata , from dicom stack)
if ~isempty(files)
    info = dicominfo(fullfile(fileFolder,fileNames{1}))

    %extract size info from metadata
    voxelsize = [info.PixelSpacing;info.SliceThickness];

    %read one file to get size
    I = dicomread(fullfile(fileFolder,fileNames{1}))
    classI = class(I);
    sizeI = size(I);
    numImages = length(fileNames);

    %read slice images populate 3d matrix
    hWaitBar = waitbar(0,'reading dicom files');

    %create array
    mri= zeroes(info.rows , info.columns , numImages , classI )
    for i=length(fileNames):-1:1
        fname = fullfile(fileFolder, fileNames{i});
        mri(:,:,i) = unit16(dicomread(fname));
        waitbar((length(fileNames)-i+1)/length(fileNames))
    end

    delete(hWaitBar);
end


来源:https://stackoverflow.com/questions/33686286/how-to-resolve-index-exceeds-matrix-dimensions-in-matlab

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!