Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

bwdist

Transformación de distancia de la imagen binaria

Descripción

D = bwdist(BW) calcula la transformación de distancia euclidiana de la imagen binaria.BW Para cada píxel de , la transformación de distancia asigna un número que es la distancia entre ese píxel y el píxel distinto de cero más cercano de .BWBW

Opcionalmente, puede calcular la transformación de distancia euclidiana de una imagen binaria 2D usar una GPU (requiere ).Parallel Computing Toolbox™

[D,idx] = bwdist(BW) también calcula el mapa de píxeles más cercano en forma de matriz de índice, .idx Cada elemento de contiene el índice lineal del píxel distinto de cero más cercano de .idxBW El mapa de píxeles más cercano también se denomina mapa de entidades, transformación de entidades o transformación de vecino más cercano.

[D,idx] = bwdist(BW,method) calcula la transformación de distancia utilizando una métrica de distancia alternativa, especificada por .method

Ejemplos

contraer todo

En este ejemplo se muestra cómo calcular la transformación de distancia euclidiana de una imagen binaria y el mapa de píxeles más cercano de la imagen.

Cree una imagen binaria.

bw = zeros(5,5);  bw(2,2) = 1;  bw(4,4) = 1
bw = 5×5

     0     0     0     0     0
     0     1     0     0     0
     0     0     0     0     0
     0     0     0     1     0
     0     0     0     0     0

Calcular la transformación de distancia.

[D,IDX] = bwdist(bw)
D = 5x5 single matrix

    1.4142    1.0000    1.4142    2.2361    3.1623
    1.0000         0    1.0000    2.0000    2.2361
    1.4142    1.0000    1.4142    1.0000    1.4142
    2.2361    2.0000    1.0000         0    1.0000
    3.1623    2.2361    1.4142    1.0000    1.4142

IDX = 5x5 uint32 matrix

    7    7    7    7    7
    7    7    7    7   19
    7    7    7   19   19
    7    7   19   19   19
    7   19   19   19   19

En la matriz de vecino sin salida, los valores 7 y 19 representan la posición de los elementos distintos de cero mediante la indexación de matriz lineal.IDX Si un píxel contiene un 7, su vecino distinto de cero más cercano se encuentra en la posición lineal 7.

Este ejemplo muestra cómo comparar las transformaciones de distancia 2D para los métodos de distancia admitidos. En la figura, observe cómo la transformación de la distancia cuasi euclidiana se aproxima mejor a la forma circular alcanzada por el método de distancia euclidiana.

bw = zeros(200,200); bw(50,50) = 1; bw(50,150) = 1; bw(150,100) = 1; D1 = bwdist(bw,'euclidean'); D2 = bwdist(bw,'cityblock'); D3 = bwdist(bw,'chessboard'); D4 = bwdist(bw,'quasi-euclidean'); RGB1 = repmat(rescale(D1), [1 1 3]); RGB2 = repmat(rescale(D2), [1 1 3]); RGB3 = repmat(rescale(D3), [1 1 3]); RGB4 = repmat(rescale(D4), [1 1 3]);  figure subplot(2,2,1), imshow(RGB1), title('Euclidean') hold on, imcontour(D1) subplot(2,2,2), imshow(RGB2), title('City block') hold on, imcontour(D2) subplot(2,2,3), imshow(RGB3), title('Chessboard') hold on, imcontour(D3) subplot(2,2,4), imshow(RGB4), title('Quasi-Euclidean') hold on, imcontour(D4)

En este ejemplo se muestra cómo comparar trazados de isosuperficie para las transformaciones de distancia de una imagen 3D que contiene un único píxel distinto de cero en el centro.

bw = zeros(50,50,50); bw(25,25,25) = 1; D1 = bwdist(bw); D2 = bwdist(bw,'cityblock'); D3 = bwdist(bw,'chessboard'); D4 = bwdist(bw,'quasi-euclidean'); figure subplot(2,2,1), isosurface(D1,15), axis equal, view(3) camlight, lighting gouraud, title('Euclidean') subplot(2,2,2), isosurface(D2,15), axis equal, view(3) camlight, lighting gouraud, title('City block') subplot(2,2,3), isosurface(D3,15), axis equal, view(3) camlight, lighting gouraud, title('Chessboard') subplot(2,2,4), isosurface(D4,15), axis equal, view(3) camlight, lighting gouraud, title('Quasi-Euclidean')

Argumentos de entrada

contraer todo

Imagen binaria, especificada como una matriz numérica o lógica de cualquier dimensión. Para la entrada numérica, los píxeles distintos de cero se consideran ( ).1true

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

Métrica de distancia, especificada como uno de estos valores.

Método

Descripción

'chessboard'

En 2-D, la distancia del tablero de ajedrez entre (x1,y1) y (x2,y2) es

max(│x1x2│,│y1y2│).

'cityblock'

En 2-D, la distancia del cityblock entre (x1,y1) y (x2,y2) es

x1x2│ + │y1y2

'euclidean'

En 2-D, la distancia euclidiana entre (x1,y1) y (x2,y2) es

(x1x2)2+(y1y2)2.

'quasi-euclidean'

En 2-D, la distancia cuasi-euclidiana entre (x1,y1) y (x2,y2) es

|x1x2|+(21)|y1y2|, |x1x2|>|y1y2|

(21)|x1x2|+|y1y2|, otherwise.

Solo el método se admite en una GPU.'euclidean'

Para obtener más información, consulte .Transformación de distancia de una imagen binaria

Tipos de datos: char | string

Argumentos de salida

contraer todo

Distancia, devuelta como una matriz numérica del mismo tamaño que .BW El valor de cada elemento es la distancia entre ese píxel y el píxel distinto de cero más cercano en , según lo definido por la métrica de distancia, .BWmethod

Tipos de datos: single

Matriz de índice, devuelta como una matriz numérica del mismo tamaño que .BW Cada elemento de contiene el índice lineal del píxel distinto de cero más cercano de .idxBW La clase de depende del número de elementos de la imagen de entrada y se determina de la siguiente manera.idx

ClaseGama
'uint32'<o 2numel(BW)32 N.o 1
'uint64'>2numel(BW)32

Tipos de datos: uint32 | uint64

Sugerencias

  • utiliza algoritmos rápidos para calcular la verdadera transformación de distancia euclidiana, especialmente en el caso 2D.bwdist Los otros métodos se proporcionan principalmente por razones pedagógicas. Sin embargo, las transformaciones de distancia alternativas a veces son significativamente más rápidas para las imágenes de entrada multidimensionales, especialmente aquellas que tienen muchos elementos distintos de cero.

  • La función cambió en la versión 6.4 (R2009b).bwdist Las versiones anteriores de Image Processing Toolbox utilizaban diferentes algoritmos para calcular la transformación de distancia euclidiana y la matriz de etiquetas asociada. Si necesita los mismos resultados generados por la implementación anterior, utilice la función .bwdist_old

Algoritmos

  • Para las transformaciones de distancia euclidiana, utiliza el algoritmo rápido.bwdist[1]

  • Para las transformaciones de distancia de bloque de ciudad, tablero de ajedrez y cuasi-euclidiana, utiliza el algoritmo de escaneo secuencial de dos pasadas.bwdist[2]

  • Las diferentes medidas de distancia se logran mediante el uso de diferentes conjuntos de pesos en los escaneos, como se describe en .[3]

Referencias

[1] Maurer, Calvin, Rensheng Qi, and Vijay Raghavan, "A Linear Time Algorithm for Computing Exact Euclidean Distance Transforms of Binary Images in Arbitrary Dimensions," IEEE Transactions on Pattern Analysis and Machine Intelligence, Vol. 25, No. 2, February 2003, pp. 265-270.

[2] Rosenfeld, Azriel and John Pfaltz, "Sequential operations in digital picture processing," Journal of the Association for Computing Machinery, Vol. 13, No. 4, 1966, pp. 471-494.

[3] Paglieroni, David, "Distance Transforms: Properties and Machine Vision Applications," Computer Vision, Graphics, and Image Processing: Graphical Models and Image Processing, Vol. 54, No. 1, January 1992, pp. 57-58.

Capacidades ampliadas

Introducido antes de R2006a