2015-05-11 63 views
0

我有一个结构face_data包含两个字段。第一个是360x1单元阵列face_test,其中每个单元包含88x72面部图像。第二个字段是单元阵列label_test,其中包含每个面的标签。展开单元格内的图像,MATLAB

我想要做的是在每360个单元中的每个人脸图像转换成列向量 - 也就是说,我想face_test转换为6336 x 360的矩阵,其中每一列代表展开的面部图像。我是matlab的新手,但不知道如何做到这一点,没有一堆循环,我猜是不必要的。有人可以给我一个简单的解决这个问题吗?

回答

1

一个简单的循环应该做这个速度不够快,因为你知道的大小提前

A = % .. this is your cell array of data cell(360,1) 
B = zeros(numel(A{1}), length(A)); % or zeros(6336, 360) 
for i = 1 : length(A) 
    B(:, i) = reshape(A{i}, [], 1); 
end 
0

好吧,这就是Matlab的功能,可以提供帮助。该代码是

face_data.face_test = reshape(cell2mat(face_data.face_test), [], numel(face_data.face_test)); 

可以轻松地检查如果这是你想要的东西通过测试验证码:

s = struct('a', cell(1), 'b', cell(1)); 
s.a = {reshape(1:9, 3, []), 9+reshape(1:9, 3, []), 18+reshape(1:9, 3, [])} 
reshape(cell2mat(s.a), [], numel(s.a)) 
相关问题