我在一个文件夹中有多个图像,对于每个图像,我想将数据(像素值)存储为行向量。在将它们存储在行向量中之后,我可以将这些行向量组合为一个多维数组。例如第一个图像的数据将存储在第1行,第二个图像的数据将存储在第2行,依此类推。任何时候我想访问特定的图像数据,让我们说我想要第三张图像,我可以做这样的事情race(3,:)
。
我目前收到错误:
连接的矩阵的尺寸不一致。
此处发生错误race = [race; imagevec]
除非imagevec = I(:)'
未将矩阵转换为行向量,否则我将无法解决此问题。
race = []; % to store all row vector
imagevec = []; % to store row vector
path = 'C:\Users\User_\somedir\'; % directory
pathfile = dir('C:\Users\User_\somedir\*.jpg'); % image file extension in directory
for i = 1 : length(path)
filename = strcat(path,pathfile(i).name); % get the file
I = imread(filename); % read file
imagevec = I(:)'; % convert image data to row vector
race = [race; imagevec]; % store row vector in matrix
end
答案 0 :(得分:1)
如果使用矩阵存储结果,则矩阵的所有行必须具有相同的长度。
单元数组与数组类似,但元素不需要是相同的类型/大小。
您可以使用单元格阵列完成您要查找的内容。首先,将比赛初始化为:
race = {};
然后尝试:
race = {race{:}, imagevec};
答案 1 :(得分:1)
即使您的图像尺寸不同,使用单元格数组而不是矩阵也可以使用这种方式进行索引。
您甚至不必将它们变成行向量,以将它们全部存储在同一个结构中。你可以这样做:
path = 'C:\Users\User_\somedir\'; % directory
pathfile = dir([path,*.jpg']); % image file extension in directory
race = cell(length(pathfile),1);
for i = 1 : length(pathfile)
filename = strcat(path,pathfile(i).name); % get the file
I = imread(filename); % read file
race{i} = I; % store in cell array
end
然后,当您想要执行某些操作时,您可以简单地索引到单元格数组。如果你愿意,你甚至可以把它变成行向量,如下所示。
thisImage = race{3}(:)';