这似乎是一件显而易见的事情,但经过一番研究后,我仍然陷入困境。
我有一个double(数组)数组的单元格,我希望添加单元格的所有数组的相应元素。即做imadd
之类的事情,或imlincomb
,没有循环,它不应该取决于单元格中的图像数量。
不幸的是imlincomb需要添加权重,因此imlincomb(CellofArrays{:})
之类的东西不起作用。
将单元格转换为矩阵可能是一种选择,但我需要定制索引以检索图像。图像具有一致的大小和类型。
知道我该怎么办?
答案 0 :(得分:3)
你可以很容易地做到(除非我遗漏了一些东西):
sum(cat(3,CellofArrays{:}),3)
这可以通过连接第三维的所有数组然后通过该维度求和来实现。
答案 1 :(得分:0)
如果我正确理解了问题(如果没有,请提供带有一些输入值的小代码片段),您可以按照以下步骤进行矩阵到单元格转换策略:
%input "images" of doubles stored as arrays in a cell
i{1} = [1 2 3 6; 4 5 6 2; 7 8 9 2];
i{2} = [2 3 4 6; 5 6 7 2; 9 1 4 5];
i{3} = [3 3 1 4; 4 1 5 1; 1 6 7 5];
%method
i_matrix_2d = cell2mat(i); % convert cells to a very wide matrix
ni = numel(i_matrix_2d); % count number of elements
si = size(i{1}); % determine pixel height and width per image
i_matrix_3d = reshape(i_matrix_2d,si(1),si(2),ni/si(1)/si(2)); % reformat matrix to three dimensions, where the third index is equal to the cell index of the input images
sum_of_pixels = sum(i_matrix_3d,3); % sum along third dimension
BR 马格努斯