所以我有代码来导入一堆图像,但是我收到一个错误:Subscripted assignment dimension mismatch.
myPath = 'E:\folder name\'; %'
fileNames = dir(fullfile(myPath, '*.tif'));
width = 1400;
height = 1050;
nbImages = length(fileNames);
C=uint8(zeros(width, height, nbImages));
for i=1:length(fileNames)
C(:,:,i)=imread(cat(2,'E:\folder name\',fileNames(i).name));
i
end
我理解错误源自for
循环,但我不知道用图像填充空矩阵的任何其他方法。
答案 0 :(得分:0)
您的图片尺寸不能相同。您可以通过对前两个维使用显式赋值来处理此问题。这将零填充任何小于其余图像的图像。
im = imread(...);
C(1:size(im, 1), 1:size(im, 2), i) = im;
此外,您的图片很有可能具有多个颜色通道(第三维),因此您可能希望沿着第四个维度而不是第三个维度进行连接。
C(:,:,:,i) = imread(...)
答案 1 :(得分:0)
显然这一切都取决于你想要对图像做什么,但一般来说,如果你想要一堆图像(或任何东西的“堆叠”),那么听起来你应该收集它们作为cell array代替。
此外,创建安全文件名的正确方法是使用fullfile
命令
e.g。
C = cell(1, length(nbImages));
for i = 1 : length (fileNames)
C{i} = imread (fullfile ('E:','folder name', fileNames(i).name));
end
如果确实希望从单元格数组连接到3D矩阵,假设您已经检查过这是可能的,那么您可以使用comma-separated-list generator语法轻松完成此操作:
My3DMatrix = cat(3, C{:});