2013-01-23 19 views
0

我有一个mat2cell A 12 * 12块电池中,每个小区8 * 8个像素。然后我有mat2cell B,8 * 8块单元格,每个单元格8 * 8像素。单元操作 - 加操作的每一个细胞

我想使mat2cellB中的每个单元格与mat2cell A中的整个单元格相加。

A = mat2cell(x, [8 8 8 8 8 8 8 8 8 8 8 8] , [8 8 8 8 8 8 8 8 8 8 8 8]); 
B = mat2cell(y, [8 8 8 8 8 8 8 8] , [8 8 8 8 8 8 8 8]); 

我想A{1,1}要被添加到每个小区B{1,1}B{1,2}B{3,5},同为A {1,2},等等。

+0

,因为它似乎你尝试添加不同长度的向量I必须误读这个问题。你能包含一个期望输出的例子吗? –

+0

但每个单元格的大小是相同的。我认为它可以在A和B单元格之间添加,我不知道它的循环过程。 –

回答

0

我不完全清楚你的"whole cell in mat2cell A"的意思。在A中,你有144(12 * 12)个单元格,你想将这些单元格中的每一个添加到B中的每个单元格中?

如果是这种情况,那么我将通过冷凝所有的144个细胞A的成8×8像素一个小区开始。如果将A的每个元素都添加到B中,那么首先将A的所有元素一起添加,然后再一次添加到B中。

于是开始与A,这会给你一个3维数值数组 - 第三维是你的144个细胞

Amat=cell2mat(A(:)'); 
A3D = reshape(b,8,8,144); 

然后,您可以归纳所有沿3维像素,并将结果早在单元阵列

Asum = {sum(A3D,3)}; 

,你现在的累计值的8×8个像素,然后您可以复制,以配合您数组的大小单细胞B.

AA = repmat(Asum,8,8); 

最后对添加两个单元阵列使用cellfun

C = cellfun(@plus,AA,B,'UniformOutput',false); 

这将添加A的每个元素,从A {1,1}通过对A {12,12}到B {1,1 },然后B {1,2}等高达B {8,8}