如何在matlab中求解索引超矩阵维数?
我正在尝试从名为series 8的文件夹中读取一系列dicom图像。下面是从特定文件夹中读取一系列dicom图像的代码。我在如何在matlab中求解索引超矩阵维数?,matlab,image-processing,matrix,dicom,Matlab,Image Processing,Matrix,Dicom,我正在尝试从名为series 8的文件夹中读取一系列dicom图像。下面是从特定文件夹中读取一系列dicom图像的代码。我在info=dicominfo(fullfile(fileFolder,fileNames{1}))处得到的错误索引超过了矩阵维数 下面是两个可以做到这一点的选项。首先,围绕整个方法创建一个循环,当没有dcm文件时,由于文件名为零,循环将不会执行。第二个选项测试文件是否为空,如果为空,则不执行 clear all; close all; clc; fileFolder = f
info=dicominfo(fullfile(fileFolder,fileNames{1}))
处得到的错误索引超过了矩阵维数
下面是两个可以做到这一点的选项。首先,围绕整个方法创建一个循环,当没有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
您可以通过确保索引不超过矩阵维度(可能是
fileNames{i}
part)来解决此问题。我只在info=dicominfo(fullfile(fileFolder,fileNames{1}))开始时出错而且不在循环中。您是否检查过以确保文件名
不只是空的?@Dan我现在在series8文件夹中有dicom文件?我如何检查文件名不为空??
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