Возможен ли подход с учетом коэффициента корреляции данных?

У меня есть матрица 64x64x32x90, которая обозначает пиксели в x,y,z, в момент времени t. У меня есть опорный сигнал 1x90, который обозначает поведение, которое я ожидаю для пикселя в некоторой точке (x,y,z). Я строю новое изображение корреляции между каждым пикселем в сравнении с моей ссылкой.

load('DATA.mat');
ON = ones(1,10);
OFF = zeros(1,10);
taskRef = [OFF ON OFF ON OFF ON OFF ON OFF];

corrImage = zeros(64,64,36);
for i=1:64,
    for j=1:63,
        for k=1:36
            signal = squeeze(DATA(i,j,k,:));
            coef = corrcoef(signal',taskRef);
            corrImage(i,j,k) = coef(2);
        end
    end
end

Мой процесс слишком медленный. Есть ли способ избавиться от моих циклов или настроить код, чтобы иметь лучшее время выполнения?

1 ответ

Решение

Измените ваши данные таким образом, чтобы первые три измерения были объединены в одно (так что теперь есть 64*64*32 строки и 90 столбцов).

Тогда используйте pdist2'correlation' опция) для расчета корреляции каждой строки с ожидаемым рисунком.

Наконец, измените результат в желаемую форму.

DATA2 = reshape(DATA, [],90);
corrImage = 1 - pdist2(DATA2, taskRef, 'correlation');
corrImage = reshape(corrImage, 64,64,32);
Другие вопросы по тегам