这似乎是一件显而易见的事情,但经过一番研究,我仍然卡住了。
我有一个双精度数组(图像)单元格,我希望添加单元格所有数组的相应元素。即做类似imadd
会做的事情,或者imlincomb
,没有循环,它不应该取决于单元格中的图像数量。
不幸的是 imlincomb 需要添加权重,所以类似的东西imlincomb(CellofArrays{:})
不起作用。
将单元格转换为矩阵可能是一种选择,但随后我需要定制索引以检索图像。图像的大小和类型一致。
知道我应该如何进行吗?
你可以很容易地做到这一点(除非我错过了什么):
sum(cat(3,CellofArrays{:}),3)
这是通过沿第三维连接所有数组然后对该维求和来实现的。
如果我正确理解了这个问题(如果没有,请提供一个带有一些输入值的小代码片段),您可以继续使用矩阵到单元格转换策略,如下所示:
%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马格努斯