You are here : matlab → Image Processing → bwdist
# bwdist() - Image Processing

### Syntax

### Example

### Output / Return Value

### Limitations

### Alternatives / See Also

### Reference

D = bwdist(BW) computes the Euclidean distance transform of the binary image BW. For each pixel in BW, the distance transform assigns a number that is the distance between that pixel and the nearest nonzero pixel of BW. bwdist uses the Euclidean distance metric by default. BW can have any dimension. D is the same size as BW. [D,IDX] = bwdist(BW) also computes the closest-pixel map in the form of an index array, IDX. (The closest-pixel map is also called the feature map, feature transform, or nearest-neighbor transform.) IDX has the same size as BW and D. Each element of IDX contains the linear index of the nearest nonzero pixel of BW.[D,IDX] = bwdist(BW,method) computes the distance transform, where method specifies an alternate distance metric. method can take any of the following values. The method string can be abbreviated.MethodDescription 'chessboard'In 2-D, the chessboard distance between (x1,y1) and (x2,y2) is max(│x1 – x2│,│y1 – y2│). 'cityblock'In 2-D, the cityblock distance between (x1,y1) and (x2,y2) is │x1 – x2│ + │y1 – y2│. 'euclidean'In 2-D, the Euclidean distance between (x1,y1) and (x2,y2) is (x1−x2)2+(y1−y2)2.This is the default method. 'quasi-euclidean'In 2-D, the quasi-Euclidean distance between (x1,y1) and (x2,y2) is|x1−x2|+(2−1)|y1−y2|, |x1−x2|>|y1−y2|(2−1)|x1−x2|+|y1−y2|, otherwise. [gpuarrayD, gpuarrayIDX]= bwdist(gpuarrayBW) computes the Euclidean distance transform of the binary image gpuarrayBW, performing the operation on a GPU. The images must be 2-D and have less than 232-1 elements. In addition, you can only compute the Euclidean distance metric. This syntax requires the Parallel Computing Toolbox™.Code Generation support: Yes.MATLAB Function Block support: Yes.

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

Compute the Euclidean distance transformCreate an image.bw = zeros(5,5); bw(2,2) = 1; bw(4,4) = 1 bw = 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 Calculate the distance transform.[D,IDX] = bwdist(bw) D = 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 = 7 7 7 7 7 7 7 7 7 19 7 7 7 19 19 7 7 19 19 19 7 19 19 19 19In the nearest-neighbor matrix IDX the values 7 and 19 represent the position of the nonzero elements using linear matrix indexing. If a pixel contains a 7, its closest nonzero neighbor is at linear position 7.Compute the Euclidean distance transform on a GPUCreate an image.bw = gpuArray.zeros(5,5); bw(2,2) = 1; bw(4,4) = 1; Calculate the distance transform.[D,IDX] = bwdist(bw) Compare 2-D Distance Transforms for Supported Distance MethodsOpen This Example This example shows how to compare the 2-D distance transforms for supported distance methods. In the figure, note how the quasi-Euclidean distance transform best approximates the circular shape achieved by the Euclidean distance method. 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'); figure subplot(2,2,1), subimage(mat2gray(D1)), title('Euclidean') hold on, imcontour(D1) subplot(2,2,2), subimage(mat2gray(D2)), title('City block') hold on, imcontour(D2) subplot(2,2,3), subimage(mat2gray(D3)), title('Chessboard') hold on, imcontour(D3) subplot(2,2,4), subimage(mat2gray(D4)), title('Quasi-Euclidean') hold on, imcontour(D4) Compare Isosurface Plots for Distance Transforms of 3-D ImageOpen This Example This example shows how to compare isosurface plots for the distance transforms of a 3-D image containing a single nonzero pixel in the center. 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')