You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MATLAB的cell数组中对9个三维图像求逐像素最大值并存入第10元素?

解决Cell数组中多图像逐像素取最大值的问题

嘿,这个需求其实很好实现,核心思路就是先把Cell数组里的图像统一转换成一个多维数组,再用你熟悉的max函数来计算,具体步骤如下:

1. 合并Cell中的图像为多维数组

Matlab里的cat函数可以帮你把Cell里的所有图像沿着新的维度拼接起来。因为你的每个图像是三维数组(比如H×W×3的RGB图),我们可以把9张图沿着第4维拼接,得到一个H×W×3×9的数组:

% 假设你的Cell数组名为img_cell,包含9个三维图像
combined_imgs = cat(4, img_cell{:});

这里的img_cell{:}会把Cell数组展开成一个逗号分隔的元素列表,cat(4,...)就是把这些图像沿着第4维堆叠起来。

2. 逐像素计算最大值

有了合并后的多维数组,就可以用max函数指定维度来计算最大值了——这里我们要取第4维(也就是所有9张图的对应像素)的最大值:

max_img = max(combined_imgs, [], 4);

这个max_img就是你要的、每个像素都是9张图对应位置最大值的新图像。

3. 将结果存入Cell数组的第10个元素

最后把计算好的最大值图像放到Cell数组的第10个位置:

img_cell{10} = max_img;

用你给的示例验证

拿你提供的小例子来测试一下:

I = imread('image.png');
V = zeros(size(I));
cel = {I, 2*I, V};

% 合并图像(这里是3张图,所以拼接后是H×W×3×3)
combined = cat(4, cel{:});
% 计算最大值
max_img = max(combined, [], 4);
% 存入Cell第4个元素
cel{4} = max_img;

这时候cel{4}的结果应该和2*I完全一致,因为2*I的像素值是最大的,符合预期。

补充:如果是灰度图像(二维数组)

要是你的图像是二维的灰度图,只需要把拼接维度改成第3维就行:

combined_imgs = cat(3, img_cell{:});
max_img = max(combined_imgs, [], 3);

这种方法比用cellfun循环遍历的效率高很多,因为Matlab的向量化操作(cat+max)在处理数组时速度更快,代码也更简洁。

内容的提问来源于stack exchange,提问作者Ja_cpp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:40:24