How to remove the for loop in this code?
Ältere Kommentare anzeigen
Hi, I am working on a code related to matching score calculation which is provided below:
ref_points=size(tpol,1); %number of rows=number of referenence image points
in_points=size(ipol,1); %number of rows=number of input image points
radsize=7*ones(ref_points,1);
angsize=11* ones(ref_points,1);
radlow=-radsize./2;radhigh=radsize./2;anglow=-angsize./2;anghigh=angsize./2;
epsillon=10;
mscore=0;
for i=1:ref_points
for j=1:in_points
rdiff=tpol(i,1)-ipol(j,1);
ediff=tpol(i,2)-ipol(j,2);
thetadiff=tpol(i,3)-ipol(j,3);
if ((radlow(i) < rdiff) && (rdiff < radhigh(i)) && (anglow(i) < ediff) && ...
(ediff < anghigh(i)) && (abs(thetadiff) < epsillon) && ...
(tpol(i,4)==ipol(j,4)))
mscore=mscore+1;
tpol(i,4)=3; %Change type
end
end
end
end
I am interested to reduce the for loop as it takes high computation time. It would be very helpful if anyone could guide me through this. Thanks in advance.
Antworten (1)
Andrei Bobrov
am 26 Mai 2016
Bearbeitet: Andrei Bobrov
am 26 Mai 2016
r = [-3.5 3.5];
a = [-5.5 5.5];
ep = 10;
ti = bsxfun(@minus,tpol,permute(ipol,[3 2 1]));
p = all([bsxfun(@gt,ti(:,1:2,:),[r(1),a(1)]) & bsxfun(@lt,ti(:,1:2,:),[r(2),a(2)]),...
ti(:,3,:) < ep, ti(:,4,:) == 0],2);
mscore = nnz(p);
tpol(any(p,3),4) = 4;
4 Kommentare
Shreyas Kamath
am 26 Mai 2016
Andrei Bobrov
am 26 Mai 2016
Bearbeitet: Andrei Bobrov
am 26 Mai 2016
Attach your data (tpol, ipol).
Corrected.
Shreyas Kamath
am 26 Mai 2016
Shreyas Kamath
am 15 Jun. 2016
Kategorien
Mehr zu Descriptive Statistics finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!