finding distance within a range of distance

1 visualizzazione (ultimi 30 giorni)
[EDIT: 20110524 01:36 CDT - reformat, clarify - WDR]
Hi I have a matrix as follows.
I =
1 1 5 1 1 1 8
1 1 1 1 1 1 1
1 1 1 1 1 1 1
1 1 5 2 1 1 1
1 1 1 1 1 5 1
1 1 1 1 1 1 1
I need to know whether distances of value 5 with another 5 are in the range 3. Thanks in advance

Risposta accettata

Andrei Bobrov
Andrei Bobrov il 24 Mag 2011
ij5 = find(I==5);
[i5 j5] = ind2sub(size(I),ij5);
out1 = [nchoosek(ij5,2) bsxfun(@(x,y)sqrt(diff(nchoosek(x,2),[],2).^2....
+diff(nchoosek(y,2),[],2).^2),i5,j5)];
[non,indout]=min(out1(:,3));
out = out1(indout,:);
in vector "out" the first Two members - the indices of matrix "I", the third distance between them
EDIT
out = out1(out1(:,3) <= 3,:)
EDIT EDIT
The answer to the last Mohammad comment:
[ii,jj]=ind2sub(size(I),nchoosek(find(I==5),2));
out1 = [ii jj sqrt(sum(reshape(diff([ii;jj],[],2).^2,[],2),2))];
[non,indout]=min(out1(:,5)); % 1 variant
out = out1(indout,:);
out = out1(out1(:,5) <= 3,:); % 2 variant
  1 Commento
Mohammad Golam Kibria
Mohammad Golam Kibria il 25 Mag 2011
your answer is correct.but I need indices in 2D form i.e. in the form as follows:
1 3 4 3 3 the first two is the row and column of first 5
second two is the row and column of second 5 and last one is the distance. or any other convenient way to get the indices in 2D form with distance

Accedi per commentare.

Più risposte (1)

Wolfgang Schwanghart
Wolfgang Schwanghart il 23 Mag 2011
How about
[X,Y] = meshgrid(1:size(I,2),1:size(I,1));
ix = find(I == 5);
d = hypot(bsxfun(@minus,X(ix),X(ix)'),bsxfun(@minus,Y(ix),Y(ix)'));
[ixd,cc] = find(d<=3 & d>0);
II = false(size(I));
II(ix(ixd)) = true;
Cheers, W.
  2 Commenti
Mohammad Golam Kibria
Mohammad Golam Kibria il 24 Mag 2011
Your output is not clear to me.
Walter Roberson
Walter Roberson il 24 Mag 2011
Wolfgang's output matrix II has a 1 in each position at which there was originally a 5 that was within a distance of 3 of another 5.
If that output is not what you wanted, then you need to specify the form of the output that you did want.

Accedi per commentare.

Tag

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by