closest index in matrix between two values

11 vues (au cours des 30 derniers jours)
df df
df df le 8 Juil 2016
Commenté : Andrei Bobrov le 8 Juil 2016
hello, i have 2d matrix for example:
X = [0 0 0 0 0;
1 1 1 1 1;
0 1 2 1 0;
1 1 1 1 1;
0 0 0 0 0]
i want to get closest index of columns and rows between value 2 and 0. Is there any chance to do this??
Regards
  2 commentaires
Azzi Abdelmalek
Azzi Abdelmalek le 8 Juil 2016
are you looking for two values?
df df
df df le 8 Juil 2016
i want index of value 0 which is closest to index of value 2 which means i want to get index (3,1) (1,3) (5,3) and (3,5) bcs they are only 2 cells away

Connectez-vous pour commenter.

Réponse acceptée

Stephen23
Stephen23 le 8 Juil 2016
Modifié(e) : Stephen23 le 8 Juil 2016
X = [0 0 0 0 0;
1 1 1 1 1;
0 1 2 1 0;
1 1 1 1 1;
0 0 0 0 0];
[R0,C0] = find(X==0);
[R2,C2] = find(X==2);
Rm = bsxfun(@minus,R0,R2.');
Cm = bsxfun(@minus,C0,C2.');
% Xd = abs(Rm) + abs(Cm);
Xd = sqrt(Rm.^2 + Cm.^2); % this could probably be improved.
[R,~] = find(Xd==min(Xd(:))); % and a tolerance might be useful here...
and the indices of the zeros closest to the two are:
>> [R0(R),C0(R)]
ans =
3 1
1 3
5 3
3 5

Plus de réponses (2)

José-Luis
José-Luis le 8 Juil 2016
X = [0 0 0 0 0;
1 1 1 1 1;
0 1 2 1 0;
1 1 1 1 1;
0 0 0 0 0];
[tx,ty] = find(X==2);
x_dist = abs(tx-(1:size(X,1)));
y_dist = abs(ty-(1:size(X,2)))';
dist_array = bsxfun(@plus,x_dist.^2,y_dist.^2);
[ix,iy] = find(dist_array == min(dist_array(X==0)))

Andrei Bobrov
Andrei Bobrov le 8 Juil 2016
z = bwdist(X == 2).*(X == 0);
[ii,jj] = find(z == min(z(z~=0)));
  2 commentaires
Stephen23
Stephen23 le 8 Juil 2016
Note: requires the Image Processing Toolbox.
Andrei Bobrov
Andrei Bobrov le 8 Juil 2016
Hi Stephen! MATLAB without Image... whot is it? :)

Connectez-vous pour commenter.

Catégories

En savoir plus sur Matrix Indexing dans Help Center et File Exchange

Produits

Community Treasure Hunt

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

Start Hunting!

Translated by