Matlab:提取存储在单元阵列中的所有图像的像素

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Matlab:提取存储在单元阵列中的所有图像的像素相关的知识,希望对你有一定的参考价值。

我有一个image_data单元格数组包含400张图片:

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

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

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

我想获得存储在image_data中的所有图像的所有第i个像素,但不使用for循环。

例如:

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])

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

答案

第一步是通过连接第三维图像将该笨重的单元阵列转换为三维数组:

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
另一答案

只是为了添加@beaker的解决方案。

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


image_array = cat(1, image_data{:}) % concatinate the cell array to 2-d array
pix_array = var(image_array,0,1) % apply var() to all columns

我懂了:

image_array =

    0.1000    0.2000    0.3000
    0.4000    0.5000    0.6000
    0.7000    0.8000    0.9000


pix_array =

    0.0900    0.0900    0.0900

以上是关于Matlab:提取存储在单元阵列中的所有图像的像素的主要内容,如果未能解决你的问题,请参考以下文章

matlab字符串单元阵列cell

在matlab中,怎么把图片中的图像轮廓坐标找出来?

matlab 有没有截取图像另存的功能

提取图像中的曲线并用于计算(MATLAB)

MATLAB教程案例28图像的边缘提取——cannysobelLaplacian以及图像亚像素级边缘提取

图像变换DIBR-3D图像变换(3D Image Warping)matlab源码