Как устранить цикл for в вычислении энергии?

Я создаю алгоритм, который извлекает информацию из изображений - большая часть этой информации является данными, подобными энергии. Это в основном выполняется с помощью прохождение образа с ядром (размер задается как параметр) и получение квадратов сумм значений в этом ядре.

Это выполняется в трех масштабах, где три размера ядра (патча) равны (на данный момент) : smallestPatchSize, smallestPatchSize * 3, smallestPatchSize * 9 (с перекрывающимися ядрами во втором и третьем случае). Это делается для нескольких цветовых каналов, градиентных фильтров, и т. д. (всего их 17).

У меня вопрос, можно ли векторизовать приведенный ниже код; очевидно, что для выполнения этой части кода требуется гораздо больше времени, чем для выполнения любой другой. Я новичок в Matlab и все еще пытаюсь освоить векторизацию, но эта меня опережает :)

for dim = 1:17

for i = 1:smallestPatchSize:(size(image,1) - currentPatchSize)
    for j = 1:smallestPatchSize:(size(image,2) - currentPatchSize)

        % calculate the position in the energy matrix
        % which has different dimensions than the input pictures
        iPosition = (i - 1 + smallestPatchSize) / smallestPatchSize;
        jPosition = (j - 1 + smallestPatchSize) / smallestPatchSize;

        % calculate the energy values and save them into the energy matrix
        energy(iPosition, jPosition, dim) = sum(sum(abs(...
            filters(i:i+currentPatchSize, j:j+currentPatchSize,dim)))) ^ 2;
    end
end
end

Заранее спасибо - это мой первый вопрос @ StackOverflow :)

5
задан Oszkar 24 March 2011 в 23:56
поделиться