将图像数据存储为行向量

时间:2017-04-24 18:06:29

标签: matlab

我在一个文件夹中有多个图像,对于每个图像,我想将数据(像素值)存储为行向量。在将它们存储在行向量中之后,我可以将这些行向量组合为一个多维数组。例如第一个图像的数据将存储在第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

2 个答案:

答案 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}(:)';