如何在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
相关产品推荐
相关产品推荐

