Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

bwdist

Transformada de distancia de una imagen binaria

Descripción

ejemplo

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

[D,idx] = bwdist(BW) también calcula el mapa de los píxeles más cercanos en forma de arreglo de índices, idx. Cada elemento de idx contiene el índice lineal del píxel de BW distinto de cero más cercano. El mapa de los píxeles más cercanos también se denomina mapa de características, transformada de características o transformada de los entornos más cercanos.

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

Ejemplos

contraer todo

En este ejemplo se muestra cómo calcular la transformada de distancia euclidiana de una imagen binaria y el mapa de los píxeles más cercanos 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

Calcule la transformada 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 del entorno más cercano IDX, los valores 7 y 19 representan la posición de los elementos distintos de crero utilizando la indexación de matrices lineales. Si un píxel contiene un 7, su entorno distinto de cero más cercano se encuentra en la posición lineal 7.

En este ejemplo se muestra cómo comparar transformadas de distancia 2D para métodos de distancia compatibles. En la figura, observe cómo la transformada de distancia cuasi-euclidiana es la que mejor se aproxima a la forma circular obtenida mediante 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('Cityblock')
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)

Figure contains 4 axes objects. Axes object 1 with title Euclidean contains 2 objects of type image, contour. Axes object 2 with title Cityblock contains 2 objects of type image, contour. Axes object 3 with title Chessboard contains 2 objects of type image, contour. Axes object 4 with title Quasi-Euclidean contains 2 objects of type image, contour.

En este ejemplo se muestra cómo comparar diagramas de isosuperficie para las transformadas de distancia de una imagen 3D que contiene un solo 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')

Figure contains 4 axes objects. Axes object 1 with title Euclidean contains an object of type patch. Axes object 2 with title City block contains an object of type patch. Axes object 3 with title Chessboard contains an object of type patch. Axes object 4 with title Quasi-Euclidean contains an object of type patch.

Argumentos de entrada

contraer todo

Imagen binaria, especificada como arreglo numérico o lógico de cualquier dimensión. En la entrada numérica, cualquier píxel distinto de cero se considera 1 (true).

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 2D, la distancia chessboard entre (x1,y1) y (x2,y2) es

max(│x1x2│,│y1y2│).

'cityblock'

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

x1x2│ + │y1y2

'euclidean'

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

(x1x2)2+(y1y2)2.

'quasi-euclidean'

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

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

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

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

Tipos de datos: char | string

Argumentos de salida

contraer todo

Distancia, devuelta como arreglo numérico del mismo tamaño que BW. El valor de cada elemento es la distancia entre ese pixel y el píxel distinto de cero más cercano en BW, tal como lo define la métrica de distancia method.

Tipos de datos: single

Arreglo de índices, devuelto como arreglo numérico del mismo tamaño que BW. Cada elemento de idx contiene el índice lineal del píxel de BW distinto de cero más cercano. La clase de idx depende del número de elementos de la imagen de entrada y se determina como sigue:

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

Tipos de datos: uint32 | uint64

Sugerencias

  • bwdist utiliza algoritmos rápidos para calcular la verdadera transformada de distancia euclidiana, especialmente en el caso 2D. Los otros métodos se ofrecen principalmente por motivos didácticos. Sin embargo, las transformadas de distancia alternativas a veces son notablemente más rápidas en las imágenes de entrada multidimensionales, particularmente en aquellas que tienen muchos elementos distintos de cero.

  • La función bwdist cambió en la versión 6.4 (R2009b). Las versiones anteriores de Image Processing Toolbox usaban algoritmos distintos para calcular la transformada de distancia euclidiana y la matriz de etiquetas asociada. Si necesita los mismos resultados que producía la versión anterior, utilice la función bwdist_old.

Algoritmos

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

  • En las transformadas de distancia cuasi-euclidiana chessboard y cityblock, bwdist utiliza el algoritmo de barrido secuencial de dos pasos. [2]

  • Las medidas de distancias distintas se obtienen utilizando juegos de ponderaciones diferentes en los barridos, según 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

Historial de versiones

Introducido antes de R2006a

expandir todo