Как рассчитать среднее и максимальное значение для данных 4D-изображения? - PullRequest
1 голос
/ 22 июля 2011

У меня есть некоторые данные изображения 4D, 384 на 276 на 20 на 5, где data(X,Y,T,V), X = x location, Y = y location, T = time, V = vessel location.

Я хотел бы иметь среднее значение во времени и максимальное значение во времени для данных, чтобы получить структуру моего сигнала и, таким образом, установить значение моего порогового значения.Я делаю это в цикле, чтобы я мог получить, например, data(1,1,:,1), среднее значение для этой точки во времени.

Я пробовал mean(data(X,Y,:,V)) и mean(squeeze(data(X,Y,:,V))), но это дает мне ошибку ".индексы должны быть либо действительными положительными целыми числами, либо логическими. "

Я ищу везде, но пример среднего значения только для 2D и 1D.Я считаю, что если я хочу получить среднее / максимальное значение данных за какое-то время, данные должны быть data(X,Y,:,V), которые теперь являются трехмерными данными.

Любая помощь или идея о том, как это сделать?

Ответы [ 3 ]

3 голосов
/ 22 июля 2011

Вы можете указать размер, по которому следует брать среднее значение, передав его в качестве второго параметра в функцию MEAN . Затем вы можете удалить одноэлементные размеры, используя функцию SQUEEZE , чтобы получить трехмерную матрицу:

meanData = squeeze(mean(data,3));

То же самое можно выполнить для определения максимума с помощью функции MAX , хотя вам придется добавить пустой параметр [], прежде чем указывать размер для работы:

maxData = squeeze(max(data,[],3));
1 голос
/ 22 июля 2011

mean(data,3) и max(data,[],3)

1 голос
/ 22 июля 2011

Чтобы проанализировать вашу проблему, начните с сообщения об ошибке: «Индексы индексов должны быть либо натуральными положительными целыми числами, либо логическими».Вы понимаете, что это значит?Если нет, содержит ли это слова, которые вы не уверены, что они значат?Можете ли вы прочитать о них в документации?Можете ли вы погуглить все сообщение об ошибке?

Причина этого заключается в том, что вам необходимо понять, как MATLAB обращается к элементам вашего массива 384 на 276 на 20 на 5;Ваша проблема не имеет никакого отношения к получению средств или максимумов, поэтому поиск этих терминов не помог.

Когда вы набираете

data(X,Y,T,V)

, тогда X, Y, T, V нужнобыть целыми числами (или векторами целых чисел), то есть X должен находиться в диапазоне 1: 384 и так далее.Например,

mean(data(1,1,:,1))

даст вам временное среднее для первых точек X, Y и V.

Тем не менее, вы говорили, что используете цикл ... посмотритепри чем

mean(data,3)

и

max(data,[],3)

делают ... это должно полностью заменить ваш цикл, если я правильно понял вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...