I want to parallelize my code by distributing/splitting variables among available workers, run a parallel image acquisition using a defined function 'myWatershedFun' which returns a segmented binary image, and gather the output results from each worker. Here, I have two images of the same size, a grayscale image 'img' and a corresponding binary image 'bw', and a structure array 'param'. I have split each image into vertical stripes, but how can I distribute each part to respective worker? I also want to distribute the structure 'param' to all workers in order to compute 'myWatershedFun'.
Essentially, the serial acquisition that I am trying to parallelize is
bw_seg = myWatershedFun(img, bw, param); % img, bw and bw_seg have the same size
Attempt
[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)));endspmd % 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)
Could someone help me? Thanks so much in advance for any input!
Best Answer