在矩阵图像处理中使用 parfor

Using parfor in image processing with matrixes

我们正在开发一个处理眼睛视网膜医学图像的应用程序。

经常使用像素索引的直接迭代。即使图像的大小固定为 1024*768 像素,它也可能是一个耗费 CPU 的操作,例如为我们需要的二值化像素分配某些值。

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 维的更多多维矩阵)?

切片变量是一个变量,它在 parfor 循环之外有一个引用,并且它的每个元素只能由一个 worker 访问(在 parfor paralle workers 中)

有时 matlab 无法将 parfor 循环中的变量识别为 "sliced variable" 所以你可以使用一个临时变量并在 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 中不像现在那样好()。