我在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