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

La 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 en, la transformación de distancia asigna un número que es la distancia entre ese píxel y el píxel más cercano distinto de cero.BWBW

Opcionalmente, puede calcular la transformación de distancia euclidiana de una imagen binaria en 2-D usando una GPU (requiere).Parallel Computing Toolbox™ Para obtener más información, consulte.Procesamiento de imágenes en una GPU

[D,idx] = bwdist(BW) también calcula el mapa de píxeles más cercano en forma de una matriz de índice,.idx Cada elemento contiene el índice lineal del píxel distinto de cero más cercano.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 mediante una métrica de distancia alternativa, especificada por.method

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

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

Calcule 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 más cercano, los valores 7 y 19 representan la posición de los elementos distintos de cero mediante la indización de matriz lineal.IDX Si un píxel contiene un 7, su vecino distinto de cero más cercano está en la posición lineal 7.

Cree una imagen.

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

Calcule la transformación de distancia.

[D,IDX] = bwdist(bw) 

Este ejemplo muestra cómo comparar las transformaciones de distancia 2-D para los métodos de distancia admitidos. En la figura, observe cómo la transformación de 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)

Este ejemplo muestra cómo comparar trazados isosuperficiales 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, cualquier píxel distinto de cero se considera ().1true

Para calcular la transformación de distancia euclidiana mediante una GPU, especifique como un que contenga una matriz lógica o numérica 2-D con menos de 2BWgpuArray32 Elementos.

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

Distancia métrica, especificada como uno de estos valores.

Método

Descripción

'chessboard'

En 2-D, la distancia entre el tablero de ajedrez (x1,y1yx2,y2) es

max(│x1x2│,│y1y2│).

'cityblock'

En 2-D, la distancia entre el cityblock (x1,y1yx2,y2) es

x1x2│ + │y1y2

'euclidean'

En el 2-D, la distancia euclidiana entre (x1,y1yx2,y2) es

(x1x2)2+(y1y2)2.

'quasi-euclidean'

En el 2-D, la distancia cuasi-euclidiana entre (x1,y1yx2,y2) es

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

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

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

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

Tipos de datos: char | string

Argumentos de salida

contraer todo

Distance, 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, tal y como se define en la métrica distance.BWmethod

Si la transformación de distancia euclidiana se calcula mediante una GPU, a continuación, se devuelve como un que contiene una matriz numérica 2-D.DgpuArray

Tipos de datos: single

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

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

Si la transformación de distancia euclidiana se calcula mediante una GPU, a continuación, se devuelve como un que contiene una matriz numérica 2-D de tipo de datos.idxgpuArrayuint32

Tipos de datos: uint32 | uint64

Sugerencias

  • utiliza algoritmos rápidos para calcular la verdadera transformación de distancia euclidiana, especialmente en el caso 2-D.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 ha cambiado en la versión 6,4 (R2009b).bwdist Las versiones anteriores de la caja de herramientas de procesamiento de imágenes usaban diferentes algoritmos para computar la transformada de 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 las transformaciones de distancia euclidiana, utiliza el algoritmo rápido.bwdist[1]

  • Para el cityblock, el tablero de ajedrez y las transformaciones de distancia 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