首页 > 解决方案 > Matlab:提取存储在单元格数组中的所有图像的第 i_th 像素

问题描述

我有一个image_data包含 400 个图像的单元格数组:

image_data = {img1, img2, ... img400}

每个图像,例如img1,都是一个128 x 128像素值数组:

img1 = [0.2, 0.5, .....]

我想获取存储在中的所有图像的所有第 i_th 像素image_data,但不使用 for-loop

例如:

image_data = {img1, img2, img3}
img1 = [0.1, 0.2, 0.3]
img2 = [0.4, 0.5, 0.6]
img3 = [0.7, 0.8, 0.9]

我想快速计算以下方差:

var([img1(1),img2(1),img3(1)]) = var([0.1,0.4,0.7]) 
var([img1(2),img2(2),img3(2)]) = var([0.2,0.5,0.8]) 
var([img1(3),img2(3),img3(3)]) = var([0.3,0.6,0.9])

尽量避免使用循环,因为它很慢。

标签: matlabcell-array

解决方案


第一步是通过沿第 3 维连接图像,将笨重的元胞数组转换为 3 维数组:

image_array = cat(3, image_data{:});

现在,我们所要做的就是使用下标将每个图像中第 i 个像素的向量转换为向量并将其传递给var

pixel_var = var(image_array(1,1,:));  % var for pixel 1

或者一次完成整个图像并索引到结果中:

image_var = var(image_array, 0, 3);   % take var along 3rd dimension

推荐阅读