Main Content

bwdist

이진 영상의 거리 변환

설명

예제

D = bwdist(BW)는 이진 영상 BW의 유클리드 거리 변환을 계산합니다. BW의 각 픽셀에 대해 거리 변환은 해당 픽셀과 BW의 0이 아닌 최근접 픽셀 사이의 거리를 숫자로 할당합니다.

[D,idx] = bwdist(BW)는 인덱스 배열 idx 형식으로 최근접 픽셀 맵도 계산합니다. idx의 각 요소는 BW의 0이 아닌 최근접 픽셀의 선형 인덱스를 포함합니다. 최근접 픽셀 맵은 특징 맵, 특징 변환 또는 최근접이웃 변환이라고도 합니다.

[D,idx] = bwdist(BW,method)method로 지정된 다른 거리 측정법을 사용하여 거리 변환을 계산합니다.

예제

모두 축소

이 예제에서는 이진 영상의 유클리드 거리 변환과 영상의 최근접 픽셀 맵을 계산하는 방법을 보여줍니다.

이진 영상을 만듭니다.

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

거리 변환을 계산합니다.

[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

최근접이웃 행렬 IDX에서 값 7과 19는 선형 행렬 인덱싱을 사용하여 0이 아닌 요소의 위치를 나타냅니다. 픽셀이 7을 포함하는 경우 0이 아닌 최근접 이웃은 선형 인덱싱에서 7번째 자리에 있습니다.

이 예제에서는 지원되는 거리 방법에 대해 2차원 거리 변환을 비교하는 방법을 보여줍니다. 아래 그림을 보면 준유클리드 거리 변환이 유클리드 거리 방법으로 만들어지는 원형 모양을 가장 잘 근사하는 것을 알 수 있습니다.

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.

이 예제에서는 중앙에 0이 아닌 픽셀이 하나 있는 3차원 영상의 거리 변환에 대해 등가곡면 플롯을 비교하는 방법을 보여줍니다.

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.

입력 인수

모두 축소

이진 영상으로, 임의 차원의 숫자형 또는 논리형 배열로 지정됩니다. 숫자형 입력값의 경우 0이 아닌 픽셀은 1(true)로 간주됩니다.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

거리 측정법으로, 다음 값 중 하나로 지정됩니다.

방법

설명

'chessboard'

2차원에서 (x1,y1)과 (x2,y2) 사이의 체스보드 거리는 다음과 같습니다.

max(│x1 – x2│,│y1 – y2│).

'cityblock'

2차원에서 (x1,y1)과 (x2,y2) 사이의 도시 블록 거리는 다음과 같습니다.

│x1 – x2│ + │y1 – y2

'euclidean'

2차원에서 (x1,y1)과 (x2,y2) 사이의 유클리드 거리는 다음과 같습니다.

(x1x2)2+(y1y2)2.

'quasi-euclidean'

2차원에서 (x1,y1)과 (x2,y2) 사이의 준유클리드 거리는 다음과 같습니다.

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

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

자세한 내용은 이진 영상의 거리 변환 항목을 참조하십시오.

데이터형: char | string

출력 인수

모두 축소

거리로, BW와 같은 크기의 숫자형 배열로 반환됩니다. 각 요소의 값은 거리 측정법 method로 정의된 대로 측정된 해당 픽셀과 BW의 0이 아닌 최근접 픽셀 사이의 거리입니다.

데이터형: single

인덱스 배열로, BW와 같은 크기의 숫자형 배열로 반환됩니다. idx의 각 요소는 BW의 0이 아닌 최근접 픽셀의 선형 인덱스를 포함합니다. idx의 클래스는 입력 영상의 요소 개수에 따라 달라지며, 다음과 같이 결정됩니다.

클래스범위
'uint32'numel(BW) <= 232 − 1
'uint64'numel(BW) >= 232

데이터형: uint32 | uint64

  • bwdist는 특히 2차원의 경우 고속 알고리즘을 사용하여 진정한 유클리드 거리 변환을 계산합니다. 이외의 방법은 주로 교육적인 목적을 위해 제공됩니다. 하지만 다차원 입력 영상, 특히 0이 아닌 요소가 많은 영상에서는 이외의 거리 변환 방법이 훨씬 빠른 속도를 보이는 경우도 있습니다.

  • 함수 bwdist는 버전 6.4(R2009b)에서 변경되었습니다. 이전 버전의 Image Processing Toolbox는 유클리드 거리 변환 및 관련 레이블 행렬을 계산하는 데 다른 알고리즘을 사용했습니다. 이전 구현에서 생성되는 것과 동일한 결과가 필요한 경우에는 함수 bwdist_old를 사용하십시오.

알고리즘

  • 유클리드 거리 변환의 경우 bwdist는 고속 알고리즘을 사용합니다. [1]

  • 도시 블록, 체스보드 및 준유클리드 거리 변환의 경우 bwdist는 2-통과 순차 스캔 알고리즘을 사용합니다. [2]

  • 각각의 거리 측정법은 [3]에 설명된 대로 스캔에서 서로 다른 가중치 집합을 사용하여 달성됩니다.

참고 문헌

[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.

확장 기능

버전 내역

R2006a 이전에 개발됨

모두 확장