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

Distancia transformada de la imagen binaria

Sintaxis

D = bwdist(BW)
[D,idx] = bwdist(BW)
[D,idx] = bwdist(BW,method)
[gpuarrayD,gpuarrayIDX] = bwdist(gpuarrayBW)

Descripción

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

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

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

[gpuarrayD,gpuarrayIDX] = bwdist(gpuarrayBW) computa la transformación euclidiana de la distancia del gpuarrayBWbinario de la imagen 2-D, realizando la operación en una GPU. Esta sintaxis requiere el Parallel Computing Toolbox™.

Ejemplos

contraer todo

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

Crear 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

Calcule la distancia transformada.

[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 más cercana IDX los valores 7 y 19 representan la posición de los elementos que no son cero utilizando la indexación matricial lineal. Si un píxel contiene un 7, su vecino no cero más cercano se encuentra en la posición lineal 7.

Crear una imagen.

bw = gpuArray.zeros(5,5);  bw(2,2) = 1;  bw(4,4) = 1; 

Calcule la distancia transformada.

[D,IDX] = bwdist(bw) 

En este ejemplo se muestra cómo comparar los transformados de distancia en 2-D para los métodos de distancia admitidos. En la figura, observe cómo la distancia cuasi-euclidiana transforma mejor aproxima la forma circular alcanzada por el método de la 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 las gráficas de isosuperficie para las transformaciones de distancia de una imagen tridimensional 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 real, no Sparse, numérica o lógica de cualquier dimensión. Para la entrada numérica, cualquier píxel distinto de cero se considera on.

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

Distancia métrica, especificada como una de las siguientes.

Método

Descripción

'chessboard'

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

max(abs(x1-x2),abs(y1-y2))

'cityblock'

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

abs(x1-x2) + abs(y1-y2)

'euclidean'

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

(x1x2)2+(y1y2)2.

'quasi-euclidean'

En 2-D, la distancia cuasi-euclidiana en medio (x1,y1) y (x2,y2) se

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

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

Tipos de datos: char | string

Imagen binaria cuando se ejecuta en una GPU, especificada como un gpuArray que contiene una imagen en 2-D con menos de 232 Píxeles. La imagen puede ser de tipo de datos single, double, int8, uint8, int16, uint16, int32, uint32, o logical.

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 no cero más cercano en BW, como se define en la métrica de distancia, method.

Tipos de datos: single

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

ClaseGama
'uint32'numel(BW) < = 232 − 1
'uint64'numel(BW) > = 232

Tipos de datos: uint32 | uint64

Array de distancia cuando se ejecuta en una GPU, se devuelve como un gpuArray. La salida gpuarrayD tiene el mismo tamaño que la entrada gpuarrayBW, y es de tipo de datos single.

Matriz de índices cuando se ejecuta en una GPU, se devuelve como un gpuArray. La salida gpuarrayIDX tiene el mismo tamaño que la entrada gpuarrayBW, y es de tipo de datos uint32.

Sugerencias

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

  • La función bwdist cambió en la versión 6,4 (R2009b). Las versiones anteriores de la caja de herramientas de procesamiento de imágenes usaban diferentes algoritmos para calcular la distancia euclidiana y la matriz de etiquetas asociada. Si necesita los mismos resultados producidos por la implementación anterior, utilice la función bwdist_old.

Algoritmos

  • Para la distancia euclidiana transforma, bwdist utiliza el algoritmo rápido. [1]

  • Para el cityblock, el tablero de ajedrez, y la distancia cuasi-euclidiana transforma, bwdist utiliza el dos-paso, algoritmo secuencial de la exploración. [2]

  • Las diferentes medidas de distancia se obtienen 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