Matlab: извлечь i_th пиксель из всех изображений, хранящихся в массиве ячеек - PullRequest
0 голосов
/ 24 февраля 2019

У меня есть массив ячеек image_data, содержащий 400 изображений:

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

каждое изображение, например img1, представляет собой массив 128 x 128 значений пикселей:

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

Я хочу получить все i_th пиксели всех изображений, хранящихся в image_data, но без использования цикла 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])

Старайтесь избегать использования цикла, потому что он медленный.

Ответы [ 2 ]

0 голосов
/ 24 февраля 2019

Просто чтобы добавить к решению @ 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
0 голосов
/ 24 февраля 2019

Первым шагом является преобразование этого громоздкого массива ячеек в 3-мерный массив путем объединения изображений по 3-му измерению:

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

Теперь все, что нам нужно сделать, - это использовать нижний индекс для получениявектор ith пикселей из каждого изображения в вектор и передать его в var:

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

Или просто сделать все изображение целиком и проиндексировать в результате:

image_var = var(image_array, 0, 3);   % take var along 3rd dimension
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...