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

标签 matlab image-processing matrix dicom

我正在尝试从名为系列 8 的文件夹中读取一系列 dicom 图像。下面是从特定文件夹中读取一系列 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

关于matlab - matlab中如何解决索引超出矩阵维度的问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41383056/

相关文章:

不同配色方案的 Matlab 冲浪

matlab - 以编程方式确定是否在 parfor 与 for 循环内执行

matlab - Cmake FindMatlab 找不到正确的版本

MATLAB:比较两个数组的所有元素

python-2.7 - 如何在pytesseract中获取字符位置

image-processing - 如何在 OpenCV 中进行非透视图像变形?

apache - 如何在Php中将上传的文件移动到另一个主机

c - 如何将数据集从文本文件读取到二维矩阵

python - 在Python中从列表中找到最佳组合后如何从数据集中删除一行

r - 将数据框转换为邻接矩阵/边列表以进行网络分析