2

这似乎是一件显而易见的事情,但经过一番研究,我仍然卡住了。

我有一个双精度数组(图像)单元格,我希望添加单元格所有数组的相应元素。即做类似imadd会做的事情,或者imlincomb,没有循环,它不应该取决于单元格中的图像数量。

不幸的是 imlincomb 需要添加权重,所以类似的东西imlincomb(CellofArrays{:})不起作用。

将单元格转换为矩阵可能是一种选择,但随后我需要定制索引以检索图像。图像的大小和类型一致。

知道我应该如何进行吗?

4

2 回答 2

3

你可以很容易地做到这一点(除非我错过了什么):

sum(cat(3,CellofArrays{:}),3)

这是通过沿第三维连接所有数组然后对该维求和来实现的。

于 2013-10-18T20:13:37.197 回答
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马格努斯

于 2013-10-18T19:58:19.080 回答