Я хочу распараллелить мой код путем распределения / разделения переменных между доступными работниками, запустить параллельное получение изображений с использованием определенной функции myWatershedFun
, которая возвращает сегментированное двоичное изображение bw_seg
, и собрать выходные результаты каждого работника. Здесь у меня есть два изображения одинакового размера, изображение в градациях серого img
, соответствующее двоичное изображение bw
и массив структур param
. Я разбил каждое изображение на n_workers
вертикальные полосы, но как я могу распределить каждую часть для соответствующего работника? Я также хочу разослать структуру param
всем работникам, чтобы вычислить myWatershedFun
.
По сути, последовательное приобретение, которое я пытаюсь распараллелить, это
bw_seg = myWatershedFun(img, bw, param); % img, bw and bw_seg have the same size
Попытка
[n_rows n_cols] = size(img);
% Set up parallel environment
poolobj = gcp;
n_workers = poolobj.NumWorkers;
% Split images into equal verticale stripes
for k = 1:n_workers
img_temp{k} = img(:, floor((k-1)*(n_cols/n_workers) + 1): ...
floor(k*(n_cols/n_workers)));
bw_temp{k} = bw(:, floor((k-1)*(n_cols/n_workers) + 1): ...
floor(k*(n_cols/n_workers)));
end
spmd
% Distribute img_temp{k} and bw_temp{k} to worker k, along with param
...???
% Each worker segments the assigned vertical area of the image
bw_seg_worker = myWatershedFun(img_temp{k}, bw_temp{k}, param)
end
% Merge the 'n_workers' binary outputs bw_seg_worker into a single binary image
bw_seg = ...
% Delete pool
delete(gcp)
Может ли кто-нибудь мне помочь? Большое спасибо заранее за любой вклад!