Я пытаюсь ускорить мой код, используя parfor
. Цель кода - сдвинуть трехмерное квадратное окно на трехмерном изображении и для каждого блока mxmxm
применить функцию.MATLAB parfor cuting 3D-массив
Я написал этот код:
function [ o_image ] = SlidingWindow(i_image, i_padSize, i_fun, i_options)
%SLIDINGWINDOW Summary of this function goes here
% Detailed explanation goes here
o_image = zeros(size(i_image,1),size(i_image,2),size(i_image,3));
i_image = padarray(i_image,i_padSize,'symmetric');
i_padSize = num2cell(i_padSize);
[m,n,p] = deal(i_padSize{:});
[row,col,depth] = size(i_image);
windowShape = i_options.windowShape;
mask = i_options.mask;
parfor (i = m+1:row-m,i_options.cores)
temp = i_image(i-m:i+m,:,:);
for j = n+1:col-n
for h = p+1:depth-p
ii = i-m;
jj = j-n;
hh = h-p;
temp = temp(:,j-n:j+n, h-p:h+p);
o_image(ii,jj,hh) = parfeval(i_fun, temp, windowShape, mask);
end
end
end
end
Я получаю одно предупреждение и одна ошибка, которую я не понимаю, как решить. Предупреждение говорит:
Весь массив или структура «i_image» является широковещательной переменной.
Ошибка говорит:
петля PARFOR не может работать из-за пути переменной 'o_image' используется.
Я не понимаю, как исправить эти две вещи. Любая помощь очень ценится!