Создание списка массивов переменной длины в MATLAB

#arrays #matlab #struct #cell-array

#массивы #matlab #структура #ячейка-массив

Вопрос:

Я хотел бы обработать список изображений regionprops и сохранить результат в массив или какой-либо список.

Моя проблема в том, что regionprops возвращает структуру переменного размера. В моем случае это выглядит так:

 stats = regionprops(L,'Centroid');

2x1 struct array with fields:
    Centroid
  

Размер структуры зависит от изображения к изображению.

Как я могу создать объект, который содержит все мои структуры? Нужно ли мне использовать массивы ячеек?

Я попробовал следующее:

 mycell = struct2cell(stats);
centers(i,:) = mycell;
  

Но это работает только до тех пор, пока мои массивы ячеек имеют одинаковый размер. Здесь это не так, поскольку количество обнаруженных объектов меняется от кадра к кадру.

Как я могу хранить структуры переменной длины или массивы ячеек в контейнере?

Что я должен использовать, структуры массивов ячеек?

Ответ №1:

Просто поместите каждый структурный массив stats в отдельную ячейку. Например:

 >> stats1(3).test = 1

stats1 = 

1x3 struct array with fields:
    test

>> stats2(2).test = 1

stats2 = 

1x2 struct array with fields:
    test

>> [{stats1} {stats2}]

ans = 

    [1x3 struct]    [1x2 struct]
  

Комментарии:

1. Но как я могу выполнить [{stats1} {stats2}] с помощью алгоритма в цикле? Я хотел бы сделать что-то подобное for i = 1:size(images) .... allstats{i} = stats или что-то подобное?

2. Вы получили это! Удачи с проектом!