이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

edge

명암 영상에서 경계 찾기

구문

BW = edge(I)
BW = edge(I,method)
BW = edge(I,method,threshold)
BW = edge(I,method,threshold,direction)
BW = edge(___,'nothinning')
BW = edge(I,method,threshold,sigma)
BW = edge(I,method,threshold,h)
[BW,threshOut] = edge(___)
[BW,threshOut,Gv,Gh] = edge(___)

설명

BW = edge(I)는 이진 영상 BW를 반환하는데, 입력 영상 I에서 경계를 찾은 경우에는 이진 영상에서 이에 대응하는 위치에 1을, 찾지 못한 경우에는 대응 위치에 0을 담아 반환합니다. 기본적으로 edge는 소벨 경계 검출 방법을 사용합니다.

선택적으로 GPU를 사용하여 경계를 찾을 수 있습니다(Parallel Computing Toolbox™가 필요함). 자세한 내용은 Image Processing on a GPU 항목을 참조하십시오.

예제

BW = edge(I,method)method로 지정된 경계 검출 알고리즘을 사용하여 영상 I에서 경계를 검출합니다.

'Canny' 방법과 'approxcanny' 방법은 GPU에서 지원되지 않습니다.

BW = edge(I,method,threshold)threshold보다 더 강한 경계를 모두 반환합니다.

BW = edge(I,method,threshold,direction)은 검출할 경계 방향을 지정합니다. 소벨 방법과 프루이트 방법은 세로 방향이나 가로 방향 또는 두 방향 모두에서 경계를 검출할 수 있습니다. 로버츠 방법은 가로 방향 45°나 가로 방향 135° 또는 두 각도 모두에서 경계를 검출할 수 있습니다. 이 구문은 method'Sobel', 'Prewitt' 또는 'Roberts'일 때만 유효합니다.

BW = edge(___,'nothinning')은 경계 세선화 단계를 건너뛰는데 이는 성능을 향상시킬 수 있습니다. 이 구문은 method'Sobel', 'Prewitt' 또는 'Roberts'일 때만 유효합니다.

BW = edge(I,method,threshold,sigma)는 필터의 표준편차인 sigma를 지정합니다. 이 구문은 method'log' 또는 'Canny'일 때만 유효합니다.

BW = edge(I,method,threshold,h)는 사용자가 지정한 필터 h를 사용하여 'zerocross' 방법으로 경계를 검출합니다. 이 구문은 method'zerocross'일 때만 유효합니다.

[BW,threshOut] = edge(___)는 임계값도 반환합니다.

[BW,threshOut,Gv,Gh] = edge(___)는 방향 기울기 크기도 반환합니다. 소벨 방법과 프루이트 방법에서 GvGh는 세로 방향 기울기와 가로 방향 기울기에 해당합니다. 로버츠 방법에서 GvGh는 각각 가로 방향 45°와 135°도에서의 기울기에 해당합니다. 이 구문은 method'Sobel', 'Prewitt' 또는 'Roberts'일 때만 유효합니다.

예제

모두 축소

회색조 영상을 작업 공간으로 읽어 들인 후 이를 표시합니다.

I = imread('circuit.tif');
imshow(I)

캐니 방법을 사용하여 경계를 찾습니다.

BW1 = edge(I,'Canny');

프루이트 방법을 사용하여 경계를 찾습니다.

BW2 = edge(I,'Prewitt');

두 결과를 나란히 표시합니다.

imshowpair(BW1,BW2,'montage')

회색조 영상을 읽어 들이고 gpuArray를 만듭니다.

I = gpuArray(imread('circuit.tif'));

프루이트 방법을 사용하여 경계를 찾습니다.

BW = edge(I,'prewitt');

결과를 표시합니다.

figure, imshow(BW)

입력 인수

모두 축소

입력 영상으로, 2차원 회색조 영상 또는 이진 영상으로 지정됩니다.

'approxcanny' 방법에서 데이터형이 single이거나 double인 영상은 [0 1] 범위에서 정규화되어야 합니다.

GPU를 사용하여 경계를 찾으려면 I를 회색조 영상 또는 이진 영상을 포함하는 gpuArray로 지정하십시오.

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

경계 검출 방법으로, 다음 값 중 하나로 지정됩니다.

방법설명
'Sobel'

도함수에 대한 소벨 근삿값을 사용하여, 영상 I의 기울기가 최대인 지점의 경계를 찾습니다.

'Prewitt'

도함수에 대한 프루이트 근삿값을 사용하여, I의 기울기가 최대인 지점의 경계를 찾습니다.

'Roberts'도함수에 대한 로버츠 근삿값을 사용하여, I의 기울기가 최대인 지점의 경계를 찾습니다.
'log'LoG(가우스-라플라시안) 필터를 사용하여 I를 필터링한 후 영점교차를 찾아서 경계를 찾습니다.
'zerocross'사용자가 지정한 필터 h를 사용하여 I를 필터링한 후 영점교차를 찾아서 경계를 찾습니다.
'Canny'

I의 기울기의 국소 최댓값을 찾아서 경계를 찾습니다. edge 함수는 가우스 필터의 도함수를 사용하여 기울기를 계산합니다. 이 방법은 두 개의 임계값을 사용하여 강한 경계와 약한 경계를 검출하고, 약한 경계가 강한 경계에 연결된 경우 출력값에 약한 경계를 포함시킵니다. 두 개의 임계값을 사용하는 캐니 방법은 다른 방법보다 잡음에 의한 오검출 가능성이 낮으며, 실제 약한 경계를 검출할 가능성이 더 높습니다.

'approxcanny'

검출의 정확도가 떨어지는 대신 실행 속도는 더 빠른 캐니 경계 검출 알고리즘의 근사 버전을 사용하여 경계를 찾습니다. 부동소수점 영상은 범위 [0 1]에서 정규화되어야 합니다.

참고

'Canny' 방법과 'approxcanny' 방법은 GPU에서 지원되지 않습니다.

감도 임계값으로, 숫자형 스칼라(모든 method의 경우) 또는 요소를 2개 가진 벡터('Canny' 방법과 'approxcanny' 방법의 경우)로 지정됩니다. edgethreshold보다 강하지 않은 모든 경계를 무시합니다. 이 파라미터에 대한 자세한 내용은 알고리즘 항목을 참조하십시오.

  • threshold를 지정하지 않거나 빈 배열([])을 지정할 경우 edge는 값을 자동으로 선택합니다.

  • 'log' 방법과 'zerocross' 방법의 경우, 임계값으로 0을 지정하면 출력 영상이 입력 영상의 모든 영점교차를 포함하기 때문에 닫힌 경로를 갖게 됩니다.

  • 'Canny' 방법과 'approxcanny' 방법은 임계값을 두 개 사용합니다. edge는 경계 강도가 하한 임계값보다 낮은 경계는 모두 버리고, 경계 강도가 상한 임계값보다 높은 경계는 모두 택합니다. threshold[low high] 형식(low, high 값이 [0 1] 범위에 있음)의, 요소를 2개 가진 벡터로 지정할 수 있습니다. threshold를 숫자형 스칼라로 지정할 수도 있으며, edge는 이 값을 상한 임계값에 할당합니다. 이 경우 edgethreshold*0.4 를 하한 임계값으로 사용합니다.

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

경계 검출 방향으로, 'horizontal', 'vertical' 또는 'both'로 지정됩니다. direction 인수는 method'Sobel', 'Prewitt', 또는 'Roberts'일 때만 유효합니다.

참고

로버츠 method를 선택할 경우 'horizontal' 방향은 실제로 가로 방향 135°에서 경계를 검출하고, 'vertical' 방향은 가로 방향 45°에서 경계를 검출합니다.

데이터형: char | string

필터로, 행렬로 지정됩니다. h 인수는 'zerocross' 방법에서만 지원됩니다.

데이터형: double

필터의 표준편차로, 스칼라로 지정됩니다. sigma 인수는 'Canny' 방법과 'log' 방법에서만 지원됩니다.

방법설명
'Canny'

가우스 필터의 표준편차를 지정하는 스칼라 값입니다. 디폴트 값은 sqrt(2)입니다. edgesigma를 기반으로 필터 크기를 자동으로 선택합니다.

'log'(가우스-라플라시안)

LoG(가우스-라플라시안) 필터의 표준편차를 지정하는 스칼라 값입니다. 디폴트 값은 2입니다. 필터 크기는 nxn입니다. 여기서 n=ceil(sigma*3)*2+1입니다.

데이터형: double

출력 인수

모두 축소

출력 이진 영상으로, I와 같은 크기의 논리형 배열로 반환되며 입력 영상 I에서 경계를 찾은 경우에는 이에 대응하는 위치에 1을, 찾지 못한 경우에는 대응 위치에 0을 포함합니다.

GPU를 사용하여 경계를 찾으면 BW는 논리형 배열을 포함하는 gpuArray로 반환됩니다.

계산에 사용된 임계값으로, 'Canny' method에서는 요소를 2개 가진 벡터로, 'approxcanny' 방법에서는 빈 벡터([])로, 그 외 다른 모든 경계 검출 방법에서는 숫자형 스칼라로 반환됩니다.

GPU를 사용하여 경계를 찾으면 threshOut은 숫자형 스칼라를 포함하는 gpuArray로 반환됩니다.

세로 방향 기울기로, I와 같은 크기의 숫자형 배열로 반환됩니다.

참고

로버츠 method를 선택할 경우 edge는 가로 방향 45°에서 계산된 기울기를 반환합니다.

GPU를 사용하여 경계를 찾으면 Gv는 숫자형 배열을 포함하는 gpuArray로 반환됩니다.

가로 방향 기울기로, I와 같은 크기의 숫자형 배열로 반환됩니다.

참고

로버츠 method를 선택할 경우 edge는 가로 방향 135°에서 계산된 기울기를 반환합니다.

GPU를 사용하여 경계를 찾으면 Gh는 숫자형 배열을 포함하는 gpuArray로 반환됩니다.

  • 함수 edge는 버전 7.2(R2011a)에서 변경되었습니다. 이전 버전의 Image Processing Toolbox™는 캐니 방법을 계산하는 데 다른 알고리즘을 사용했습니다. 이전 구현에서 생성되는 것과 동일한 결과가 필요한 경우에는 구문 BW = edge(I,'canny_old',___)를 사용하십시오.

알고리즘

  • 기울기-크기 경계 검출 방법(소벨, 프루이트, 로버츠)의 경우 edgethreshold를 사용하여, 계산된 기울기 크기를 이진화합니다.

  • LoG(가우스-라플라시안)를 포함한 영점교차 방법에서 edgethreshold를 영점교차에 대한 임계값으로 사용합니다. 즉, 0을 넘나드는 값의 변화가 크면 경계이고, 값의 변화가 적으면 경계가 아닙니다.

  • 캐니 방법은 기울기에 두 개의 임계값(낮은 경계 감도에는 높은 임계값, 높은 경계 감도에는 낮은 임계값)을 적용합니다. edge는 낮은 감도 결과로 시작한 다음 감도를 증가시켜, 높은 감도 결과의 연결된 경계 픽셀을 포함시킵니다. 이렇게 하면 검출된 경계 간의 간격을 메우는 데 도움이 됩니다.

  • 어떤 경우든 edge는 입력 데이터에 따라 발견적 방식으로 디폴트 임계값을 선택합니다. 임계값을 다르게 하는 가장 좋은 방법은 edge를 한 번 실행하여, 계산된 임계값을 두 번째 출력 인수로 캡처하는 것입니다. 그런 다음, edge에서 계산된 값부터 시작하여, 경계 픽셀을 더 적게 검출하도록 임계값을 더 높게 조정하거나 경계 픽셀을 더 많이 검출하도록 임계값을 더 낮게 조정합니다.

참고 문헌

[1] Canny, John, "A Computational Approach to Edge Detection," IEEE Transactions on Pattern Analysis and Machine Intelligence, Vol. PAMI-8, No. 6, 1986, pp. 679-698.

[2] Lim, Jae S., Two-Dimensional Signal and Image Processing, Englewood Cliffs, NJ, Prentice Hall, 1990, pp. 478-488.

[3] Parker, James R., Algorithms for Image Processing and Computer Vision, New York, John Wiley & Sons, Inc., 1997, pp. 23-29.

확장 기능

R2006a 이전에 개발됨