2013-01-23 2 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}, то же для А {1,2}, и так далее.

+0

Я должен неправильно задать этот вопрос, поскольку кажется, что вы пытаетесь добавить векторы разной длины. Не могли бы вы привести пример желаемого вывода? –

+0

, но размер каждой ячейки такой же. я думаю, что он может быть добавлен между ячейкой в ​​A и B. Я не знаю, как это происходит. –

ответ

0

Я не совсем понимаю, что вы подразумеваете под "whole cell in mat2cell A". В A у вас есть 144 (12 * 12) ячеек, и вы хотите добавить каждую из этих ячеек в каждую ячейку в B?

Если это так, я бы начал с конденсации всех 144 ячеек в А в одну ячейку 8 * 8 пикселей. Если вы добавляете каждый элемент из A в B, сначала добавьте все элементы A вместе, прежде чем добавлять их в B за один раз.

Итак, чтобы начать с А, это даст вам 3 размерных числовой массив - 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); 

Это добавит каждый элемент А, из А {1,1} до {A} 12,12 на B {1,1 }, а затем B {1,2} и т. д. до B {8,8}

Смежные вопросы