如何在 matlab 中解决索引超出矩阵维度的问题?

how to resolve index exceeds matrix dimensions in matlab?

我正在尝试从名为 series 的文件夹中读取一系列 dicom 图像 8.below 是用于从特定 folder.i 读取一系列 dicom 图像的代码 我得到的错误索引超出矩阵尺寸 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);

以下两个选项即可。首先,您围绕整个方法创建一个循环,并且当没有 dcm 文件时文件名为零,因此循环将不会执行。第二个选项测试文件是否为空,如果是则不执行。

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);

第二个

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