在矩阵图像处理中使用 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 中不像现在那样好()。
我们正在开发一个处理眼睛视网膜医学图像的应用程序。
经常使用像素索引的直接迭代。即使图像的大小固定为 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 中不像现在那样好(