вы пробовали использовать функцию parfeval? Обеспечивает асинхронную работу в Matlab
https://uk.mathworks.com/help/distcomp/parfeval.html
Не идеальное решение, но оно будет работать.
clc
clear
close all
format compact
p = gcp;
I = imread('peppers.png');
f = figure;
[h,w,c] = size(I);
imshow(I);
k = 0;
while true
[xb,yb,button] = ginput(1);
if button == 3
% If mouse right button was clicked brake the loop
break
else
% For other button add job to the cue
xe = xb+99;
xe(xe>w) = w;
ye = yb+99;
ye(ye>h) = h;
Imini = I(yb:ye,xb:xe,:);
filt = fspecial('motion', 50, 45);
ff(k+1) = parfeval(p,@imfilter,1,Imini,filt);
k = k +1;
end
% Check the cue for finished jobs and get output.
idx = [];
for k = 1:length(ff)
if strcmp(ff(k).State,'finished')
idx(k) = 1;
Ifilt = ff(k).OutputArguments{1};
figure; imshow(Ifilt);
else
idx(k) = 0;
end
end
% Remove finished jobs from cue
idx = logical(idx);
ff(idx) = [];
set(0, 'currentfigure', f);
end
Лучшее решение могло бы использовать рисунок WindowButtonDownFcn для добавления задания в parfeval cue и WindowButtonMotionFcn, чтобы проверить, является ли cue для завершенных заданий.