Я делаю алгоритм, который извлекает информацию из изображений - большая часть этой информации подобна энергии. Это в основном выполняется путем запуска образа с ядром (размер указан в качестве параметра) и получения квадратов сумм значений в этом ядре.
Это делается в трех масштабах, где три размера ядра (патча) (на данный момент): smalllestPatchSize, smalllestPatchSize * 3, smalllePPatchSize * 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:)