2017-05-07 2 views
2

Nehmen wir an, ich habe eine logische Matrix A (etwa 1000x1000 Größe) und möchte für jedes Element den euklidischen Abstand zum nächsten TRUE-Wert finden. Wie kann das in Matlab schnell gemacht werden?Matlab: Abstand zum nächsten TRUE-Wert in einer Matrix finden

zB wenn ich Matrix A haben:

A = [1 0 0 0 
    0 1 1 1 
    0 0 0 0 
    0 0 1 0] 

Und was ich will, ist:

B = [0 1 1 1 
    1 0 0 0 
    1.41 1 1 1 
    2 1 0 1] 

Eine Möglichkeit wäre imdilate(), aber dann würde ich eine MxN Matrix erweitern müssen mit eine 2Mx2N Matrix, die viel zu lange dauern würde.

Ich versuchte, die Abstände von jedem Element zu jedem Element == 1 mit pdist2() zu berechnen und dann das Minimum zu nehmen, aber es stellte sich heraus, dass viel zu viel Speicher verwendet wurde.

Irgendwelche Vorschläge? Ich würde mich auch mit einer Lösung begnügen, die es nur annähert.

Antwort

4

Die bwdist Funktion in der Bildverarbeitung Toolbox dies tut genau

A = [1 0 0 0 
    0 1 1 1 
    0 0 0 0 
    0 0 1 0]; 

B = bwdist(A); 

% 0.00000 1.00000 1.00000 1.00000 
% 1.00000 0.00000 0.00000 0.00000 
% 1.41421 1.00000 1.00000 1.00000 
% 2.00000 1.00000 0.00000 1.00000 
+0

Meine googeln Fähigkeiten müssen auf jeden Fall besser. Vielen Dank! –

Verwandte Themen