2014-01-14 2 views
0

У моей фотографии есть определенное количество различных форм капель. Я хочу сохранить эти значения центроида в одном массиве для будущего использования. Поэтому я попробовал следующий код, но это не сработало. Так может кто-нибудь мне помочь?Как сохранить значения Centroid в блоках в одном массиве?

Пример:

for i = 1:length(STATS) 
     centroid = STATS(i).Centroid; 
     array = zeros(length(STATS)); 
     array(i) = centroid; 
end 

Я хочу сохранить Центроид данные в одном массиве, как показано ниже

array= 

145 145 
14 235 
145 544 
14 69 
74 55 
+0

Что такое 'STATS (я) .Centroid'? Скаляр или матрица? Является ли 'STATS (1) .Centroid = [145 145]'? Если нет, то что это? –

+0

СТАТИСТИКА (1) .Центроид = [145 145]; – saravana

ответ

0

Предполагая

STATS(1).Centroid = [145 145]; 
STATS(2).Centroid = [14 235]; % Etc... 

Try:

array = reshape([STATS.Centroid],2,size(STATS,2))' 
array = 

    145 145 
    14 235 
    145 544 
    14 69 
    74 55 

Как это работает:

[STATS.Centroid] короткий вариант [STATS(1).Centroid, STATS(2).Centroid, .. STATS(n).Centroid]. Это даст вам значения в виде вектора. reshape затем используется, чтобы сделать его желаемым.

+0

Ошибка при использовании reshape К RESHAPE количество элементов не должно меняться. Ошибка в подключении (строка 61) array = изменить ([STATS.Centroid], 2, размер (STATS, 2)); – saravana

+0

@saravana: Попробуйте заменить один из входных аргументов на '[]'. То есть, либо используйте 'array = reshape ([STATS.Centroid], 2, []);' или 'array = reshape ([STATS.Centroid], [], size (STATS, 2));'. –

+0

Работа. благодаря – saravana

1

Попробуйте следующее:

for i = 1:length(STATS) 
    array{i} = STATS(i).Centroid; 
end 

Вы можете напечатать весь массив, используя следующие:

array{:} 

Подробнее о ячейках массивов here. Кроме того, в вашем старшем коде вы пытались присвоить массив (Centroid) элементу массива (array(i)).

+1

Он работает. Спасибо. \ – saravana

1

Как насчет:

array=cell2mat({STATS.Centroid}); 
Смежные вопросы