Использование parfor в обработке изображений с матрицами - PullRequest
0 голосов
/ 11 июня 2018

Мы разрабатываем приложение, которое обрабатывает медицинские изображения сетчатки глаза.

Очень часто используется прямая итерация по индексам пикселей.И даже когда размер изображений установлен на 1024 * 768 пикселей, это может быть операцией, потребляющей процессор, например, для присвоения определенных значений бинаризованным пикселям, которые нам нужны.

lowlayers2 = zeros(img_y_size, img_x_size);
for i=1:numel(lowlayers)
    y = rem(lowlayers(i),img_y_size);
    x = fix(lowlayers(i)/img_y_size)+1;
    lowlayers2(y,x) = 1;
end;

При попытке использовать parfor впростой цикл над типами отладчика, что все переменные в цикле должны быть представлены как нарезанные.Я думаю, это для того, чтобы разделить итерации внутри цикла более примитивно.

Как я могу изменить цикл или переменную, чтобы иметь возможность использовать parfor?Может ли каждая переменная быть представлена ​​как срезанная переменная (имеется в виду более многомерная матрица с 2 или 3 измерениями)?

1 Ответ

0 голосов
/ 11 июня 2018

секционированная переменная - это переменная, у которой есть ссылка вне цикла parfor, и каждый из ее элементов доступен только одному работнику (в рабочих средах parfor)

иногда matlab не распознает переменную в цикле parfor как«нарезанная переменная», чтобы вы могли использовать временную переменную и собирать результаты после цикла parfor,

lowlayers2 = zeros(img_y_size, img_x_size);
parfor i=1:numel(lowlayers)
    y = rem(lowlayers(i),img_y_size);
    x = fix(lowlayers(i)/img_y_size)+1;
    t(i)= sub2ind(size(lowlayers2),y,x);
end

lowlayers2(t)=1;

ПРИМЕЧАНИЕ 1. Лучше векторизовать код в более старых версиях, поскольку циклы раньше не использовались какхорошо, как они сейчас в R2017, ссылаясь на ( это ).

...