我在matlab中有两个'for'循环代码片段: 'I'是一个已经预先分配的二进制映像。从MATLAB文件交换Vectorize'for'循环调用其他函数
...
[x,y] = find(bwmorph(I,'endpoints'));
n=numel(x);
m=numel(x)-1;
n=m+1;
r=i+1;
for i= 1:m
for j = r:n
I=linept(I, x(i), y(i), x(j), y(j));
end;
end;
...
的linept功能给出below.Its:
function result=linept(matrix, X1, Y1, X2, Y2)
result = matrix;
a=max(1, X1);b=sign(X2 - X1);c=max(1, X2);
for x=a:b:c
y = round(f(x, X1, Y1, X2, Y2));
if y > 0
result(x, y) = 1;
end
end
d=max(1, Y1);e=sign(Y2 - Y1);g=max(1, Y2);
for y=d:e:g
x = round(f2(y, X1, Y1, X2, Y2));
if x > 0
result(x, y) = 1;
end
end
function y=f(x, X1, Y1, X2, Y2)
a = (Y2 - Y1)/(X2 - X1);
b = Y1 - X1 * a;
y = a * x + b;
function x=f2(y, X1, Y1, X2, Y2)
if X1==X2
x = X1;
else
a = (Y2 - Y1)/(X2 - X1);
b = Y1 - X1 * a;
x = (y - b)/a;
end
由于许多 '的' 循环和函数调用,这个代码是很运行它运行速度很快,只需要很少的端点,但是边缘数量多时需要很多时间。如果图像大小减小,它会稍微快一点。我试图对它进行矢量化并预先分配有些变量,但没有太大的改进。可以任意ne帮我关于如何矢量化循环调用函数的代码。谢谢
你可以分享'func2'和'func3'功能代码吗?另外,'n = m + 1中的'm'和'r = i + 1中的'i'在开始时是什么?类似于'a,b,c' ......你可以添加他们所代表的东西吗? – Divakar
是的,我现在将在'func'中编辑现在的问题 – Matte
'a,b,c,d,e,g'? – Divakar