Edge Detection (에지 검출)

인화·2026년 6월 17일

영상처리

목록 보기
9/9

Edge Detection

에지 (Edge)

에지란, 이미지에서 픽셀 값(밝기나 색 등)이 급격히 변하는 지점을 의미한다. 예를 들어 물체의 테두리나 강한 명암 대비가 있는 경계 부분 등이 에지에 해당한다. 에지는 물체 인식 및 영상 분할의 기초가 되기 때문에 매우 중요한 정보이다.

1차 미분(Gradient)과 에지 정의

영상에서 에지를 찾을 때 자주 사용하는 방법은 미분 연산이다. Edge를 픽셀의 밝기가 급격히 변화하는 부분으로 가정하면, 미분(derivative)과 기울기(gradient) 연산을 수행해 픽셀의 밝기 변화율이 높은 부분을 에지로 볼 수 있다. 1차 미분은 픽셀의 변화율(Gradient)을 측정하고, 이 변화가 큰 지점을 에지로 본다.

  • Edge가 발생하는 구간에선 이미지의 Intensity가 변화한다.

  • 도함수의 기울기는 Intensity 변화량을 의미하므로 이를 통해 Edge를 검출할 수 있다.

    이를 1차원 그래프로 생각하면 더 이해하기 쉽다. 밝기 함수 f(x)에서 상승 에지나 하강 에지가 발생하는 부분은 intensity가 급격히 변하는 구간이다. 이 구간에 대해 1차 미분을 하면 변화량이 크게 나타나고, 미분값의 극값이 발생한다. 따라서 1차 미분에서 큰 값이나 극값이 나타나는 지점은 원본 이미지에서 에지가 존재하는 위치라고 볼 수 있다.

2차원 영상에서는 밝기 함수 f에 대해 x방향 변화량과 y방향 변화량을 각각 구한다. 이때 x방향 미분값을 Gx=fxG_x = \frac{∂f}{∂x}, y 방향 미분값을 Gy=fyG_y = \frac{∂f}{∂y}라고 한다. 이후 두 방향의 변화량을 합쳐 그래디언트의 크기 M=Gx2+Gy2M = \sqrt{G_x^2 + G_y^2}를 계산한다. M이 크다는 것은 해당 픽셀 주변에서 밝기 변화가 크다는 뜻이므로, M이 큰 지점을 에지로 판단할 수 있다. 즉, gradient 크기 M=Gx2+Gy2M = \sqrt{G_x^2 + G_y^2}가 어느 임계값보다 큰 지점을 에지로 간주한다. 예를 들어 1차원으로 놓고 본다면, 밝기가 갑자기 10에서 100으로 바뀌는 구간 근처에서 미분값이 크다. 2D 이미지에서는 Sobel, Prewitt, Roberts 등 마스크로 미분을 근사해 GxG_x, GyG_y를 계산한 뒤 에지 여부를 판단한다.

정리하면, 에지 검출은 밝기 변화가 큰 부분을 찾는 과정이고, 이를 위해 x방향과 y방향의 미분값을 계산한 뒤 그래디언트 크기를 이용해 에지 여부를 판단한다.

1차 미분 연산자 예시

Roberts 마스크

Roberts Filter는 가장 간단한 2*2 형태의 마스크로, 기준점이 되는 위치의 왼쪽 위에서 기준점의 위치를 빼거나, 오른쪽 위에서 기준점의 위치를 빼도록 설계했다. (즉, 대각선 방향으로 차분을 취한다) 이는 구현이 간단하고, 다른 마스크보다 크기는 작지만 효과적으로 사용할 수 있다는 장점이 있으나 노이즈에 민감하다는 단점이 존재한다.

Roberts X 방향 마스크 (2×2)

[+1001]\begin{bmatrix} +1 & 0 \\ 0 & -1 \end{bmatrix}

Roberts Y 방향 마스크 (2×2)

[0+110]\begin{bmatrix} 0 & +1 \\ -1 & 0 \end{bmatrix}

Prewitt 마스크

Prewitt은 중앙값이 되는 위치를 기준으로 좌우 또는 상하 픽셀의 값 차이를 계산하도록 설계했다. Prewitt Filter는 Roberts Filter보다 고려하는 픽셀들이 더 많은데, 그렇기 때문에 노이즈에 더 강하다는 장점이 있다. 또, Prewitt은 Sobel과 유사하지만 가중치 없이 단순한 형태를 지니고 있다.

Prewitt X 방향 마스크 (3×3)

[10+110+110+1]\begin{bmatrix} -1 & 0 & +1 \\ -1 & 0 & +1 \\ -1 & 0 & +1 \end{bmatrix}

Prewitt Y 방향 마스크 (3×3)

[111000+1+1+1]\begin{bmatrix} -1 & -1 & -1 \\ 0 & 0 & 0 \\ +1 & +1 & +1 \end{bmatrix}

Sobel 마스크

Sobel 마스크는 가장 널리 쓰이는 1차 미분 연산자 중 하나다. 가중치가 있는 3×3 마스크로 X방향과 Y방향 차분을 구한다. 이러한 Sobel Filter는 Prewitt Filter와 유사하지만, 중심 픽셀에 가까운 점에서 영향력을 더 높게 고려하도록 설계된 필터이다. 쉽게 말해, 중앙점으로부터 가까울수록 가중치를 더 높게 준다. 가우시안+미분의 형태라고 이해하면 된다.

Sobel X 방향 마스크 (3×3) (세로 방향 경계, vertical edge)

[10+120+210+1]\begin{bmatrix} -1 & 0 & +1 \\ -2 & 0 & +2 \\ -1 & 0 & +1 \end{bmatrix}

Sobel Y 방향 마스크 (3×3) (가로 방향 경계, horizontal edge)

[12100+2+1+2+1]\begin{bmatrix} -1 & -2 & -1 \\ 0 & 0 & +2 \\ +1 & +2 & +1 \end{bmatrix}

2차 미분과 Zero Crossing

2차 미분을 활용한 Edge Detection

에지를 검출하는 방법에는 1차 미분뿐만 아니라 2차 미분을 사용하는 방법도 있다. 1차 미분이 픽셀 밝기의 변화율을 구하는 것이라면, 2차 미분은 1차 미분 결과를 한 번 더 미분하여 변화율이 다시 어떻게 변하는지 확인하는 방법이다. 2차 미분을 활용한 대표적인 필터가 Laplacian Filter이다.

Laplacian은 2차 미분의 합으로 정의된다. 이미지에서는 밝기값을 함수 f라고 볼 수 있는데, x방향으로 두 번 미분한 값과 y방향으로 두 번 미분한 값을 더한 것이 Laplacian이다. 즉, Laplacian Filter는 영상에서 밝기 함수 f에 대해 x방향과 y방향의 2차 미분을 더한 형태로 표현할 수 있다.

2f=2fx2+2fy2\nabla^2 f = \frac{\partial^2 f}{\partial x^2} + \frac{\partial^2 f}{\partial y^2}

1차 미분은 밝기가 얼마나 변하는지를 보고, 2차 미분은 그 밝기 변화량이 다시 어떻게 변하는가를 본다. 그래서 에지가 있는 부분처럼 밝기가 갑자기 변하는 곳에서는 2차 미분값도 특징적으로 변하게 된다. 이때 중요한 것이 Zero Crossing이다. 이는 2차 미분이 0이 되는 지점(부호가 바뀌는 지점)을 의미하며, 이 지점에서 에지가 나타난다.

Zero Crossing

2차 미분을 이용한 에지 검출에서는 Zero Crossing을 중요하게 본다. Zero Crossing이란 2차 미분 결과의 값이 양수에서 음수로, 또는 음수에서 양수로 바뀌는 지점을 의미한다.

에지가 있는 부분에서는 intensity가 급격히 변한다. 이때 1차 미분에서는 큰 값이나 극값이 나타나고, 2차 미분에서는 부호가 바뀌는 지점이 발생한다. 따라서 2차 미분 결과에서 부호가 바뀌는 Zero Crossing 지점을 에지로 판단할 수 있다. 즉, 1차 미분은 gradient 값이 큰 지점을 에지로 보고, 2차 미분은 부호가 바뀌는 지점, 즉 Zero Crossing을 에지로 본다.

  • peak : 이미지 처리에서 1차 미분은 이미지의 밝기 변화(기울기)를 나타내며, 이때 기울기가 극대값에 도달하는 지점(밝기 변화가 큰 지점, 즉 Edge)을 peak라고 한다.
  • zero crossing : 2차 미분은 이미지의 곡률을 나타내며, 이때 미분값이 양수 <-> 음수로 변화하는 구간을 zero crossing라고 한다. zero crossing이 발생하는 구간 사이 0이 되는 지점이 Edge이므로, 이를 통해 Edge의 위치를 식별할 수 있다.

Laplacian (라플라시안)

Laplacian을 마스크로 정의하면 중심 픽셀과 주변 픽셀의 차이를 계산하는 구조가 된다. 대표적인 Laplacian 마스크는 다음과 같다.

[010141010]\begin{bmatrix} 0 & 1 & 0 \\ 1 & -4 & 1 \\ 0 & 1 & 0 \end{bmatrix}

또는 대각선 방향까지 포함하여 다음과 같이 표현하기도 한다.

[111181111]\begin{bmatrix} 1 & 1 & 1 \\ 1 & -8 & 1 \\ 1 & 1 & 1 \end{bmatrix}

이 필터는 좌우상하 방향이 같은 구조를 가지므로 방향에 크게 의존하지 않는 동형 필터, 즉 isotropic filter라고도 한다.

LoG, Laplacian of Gaussian

Laplacian Filter는 중심 픽셀과 주변 픽셀의 차이를 계산하기 때문에 밝기 변화가 큰 부분을 잘 강조할 수 있다. 그래서 Sobel이나 Prewitt 같은 1차 미분 필터보다 에지의 변화가 더 뚜렷하게 나타나는 경우가 있다.

하지만 Laplacian Filter는 2차 미분을 사용하기 때문에 노이즈에 매우 민감하다. 작은 노이즈도 밝기 변화로 인식되어 함께 강조될 수 있기 때문에, 원하지 않는 부분까지 에지처럼 검출될 수 있다. 그래서 Laplacian Filter의 노이즈 민감성을 줄이기 위해 보통 라플라시안을 적용하기 전에 Gaussian Blur를 먼저 적용한다. Gaussian Blur는 영상의 노이즈를 부드럽게 줄여주는 역할을 한다.

이처럼 먼저 가우시안 필터로 노이즈를 제거한 뒤, 라플라시안 필터를 적용하는 방법을 LoG, Laplacian of Gaussian이라고 한다.

과정은 다음과 같다.

  1. Gaussian Filter로 영상을 부드럽게 만든다.
  2. Laplacian Filter로 2차 미분을 계산한다.
  3. 2차 미분 결과에서 Zero Crossing이 발생하는 지점을 찾는다.
  4. 해당 지점을 에지로 판단한다.
LoG(x,y)=2(Gσ(x,y)f(x,y))=(2Gσ)f(x,y)LoG(x, y) = ∇^2(G_σ(x, y) * f(x, y)) = (∇^2G_σ) * f(x, y)

DoG (Difference of Gaussian)

서로 다른 표준편차 σ1σ_1, σ2σ_2를 가진 두 가우시안 필터의 결과를 빼면 LoG를 근사할 수 있다. 다시 말해, 서로 다른 표준편차를 가진 두 가우시안 필터를 이미지에 각각 적용한 뒤, 두 결과를 빼는 방법이 DoG이다. 예를 들어 하나는 조금 흐리게 만든 이미지이고, 다른 하나는 더 많이 흐리게 만든 이미지라고 할 때, 이 두 이미지를 빼면 단순히 부드러운 영역은 사라지고, 밝기 변화가 있는 경계 부분이 남게 된다.

DoG(x,y;σ1,σ2)=Gσ1(x,y)f(x,y)Gσ2(x,y)f(x,y)DoG(x,y;σ_1,σ_2)=Gσ_1(x,y)∗f(x,y)−Gσ_2(x,y)∗f(x,y)

이때 중요한 점은 DoG(Difference of Gaussian)가 LoG(Laplacian of Gaussian)를 근사할 수 있다는 것이다. 두 표준편차가 충분히 가깝다면, 가우시안의 2차 미분(LoG) 형태를 테일러 전개로 근사할 수 있다. 쉽게 말해, 가우시안 필터의 표준편차가 조금 변했을 때 생기는 차이가, 가우시안의 2차 미분 형태와 비슷해지기 때문이다. 그래서 DoG는 간단한 연산으로 LoG를 대신하기도 한다.

DoG는 서로 다른 표준편차를 가진 두 가우시안 필터의 결과를 빼는 방법이다. 두 표준편차가 충분히 가까우면, 두 가우시안 함수의 차이는 테일러 전개에 의해 가우시안 함수가 표준편차 방향으로 변화하는 정도로 근사할 수 있다. 이 변화는 가우시안의 공간적 2차 미분, 즉 Laplacian of Gaussian과 관련이 있으므로 DoG는 LoG와 유사한 형태를 갖는다. 따라서 DoG는 복잡한 2차 미분 연산을 직접 수행하지 않고도, 두 가우시안 블러 결과의 차이를 이용해 LoG를 간단하게 근사할 수 있다.

Canny 에지 검출 이론

 Canny Edge Detection는 가장 대표적인 에지 검출 방법으로, 1차 미분을 바탕으로 에지를 검출한 뒤 추가 후처리 단계를 적용해 에지를 더 깨끗하게 추출하는 알고리즘이다. 이는 최소 오류율과 검출된 에지의 높은 위치 정확도, 실제 에지에 해당하는 곳의 얇은 에지 두께라는 기준을 충족하도록 설계한 알고리즘이다.

Canny 알고리즘의 4단계

  1. 노이즈 제거 (Noise Reduction). 5×5 가우시안 필터.

    • 5*5 크기의 Gaussian Filter를 통해 영상에 존재하는 Noise를 제거한다.
  2. 그라디언트 계산 (Gradient Computation). Sobel 연산자로 GxG_x, GyG_y 계산 후, 크기와 방향을 구한다.

    • 노이즈가 제거된 영상에 대해 Edge를 검출하는 과정
    • Sobel Filter와 같은 방식으로 x 방향 필터링, y 방향 필터링을 수행하고 결과값을 합성해 에지의 방향성과 강도를 확인한다.
    • 이때, 경계에서는 주변과 색이 다르기 때문에 미분값이 급속도로 변하게 되므로 이를 통해 경계값 후보군을 선별한다.
  3. 비최대 억제 (Non-maximum Suppression). 국소 영역에서 에지 강도가 최대값이 아닌 픽셀은 제거한다.

    • 에지를 얇게 따내기 위해 강도가 크지 않은 부분들을 제거하는 과정
    • 영상 픽셀을 전체 탐색하여 Edge에 해당하지 않는 픽셀 제거한다. 즉, 현재 픽셀을 다른 픽셀과 비교했을 때, 현재 픽셀이 최대값에 해당하는 값이 아니면 제거한다는 것이다. !image.png
  4. 히스테리시스 임계값 (Hysteresis Theresholding). 두 임계값(minVal, maxVal)을 사용한다. 그라디언트가 maxVal보다 큰 픽셀은 강한 에지. minVal보다 작은 픽셀은 에지가 아님. 중간 구간은 강한 에지와 연결되어 있을 때만 에지로 채택한다.

    • 경계선으로 판단된 픽셀이 진짜 경계선이 맞는지 판별하는 과정
    • 최대 임계값과 최소 임계값을 설정해 최대 임계값 이상은 강한 경계선, 최소와 최대 임계값 사이는 약한 경계선으로 설정한다.
    • 약한 경계선이 진짜 경계선인지 확인하기 위해 강한 경계선에서 추적하여 연결이 되어있으면 경계선, 그렇지 않으면 제거하는 방식으로 경계선을 판별한다.

    결과적으로 미분(그라디언트) 기반 에지 검출을 수행한 뒤, 에지의 두께를 얇게 만들고 노이즈를 제거하는 과정을 거쳐 날카로운 에지를 얻는 것이 캐니 알고리즘이다.

참고 : OpenCV의 cv.Canny

dges = cv.Canny(image, minVal, maxVal, apertureSize=3, L2gradient=False)
  • image : 입력 영상 (그레이스케일)
  • minVal, maxVal : 히스테리시스 임계값
  • apertureSize. Sobel : 커널 크기(기본 3)
  • L2gradient : True이면 Gx2+Gy2\sqrt{G_x^2 + G_y^2} 방식 사용. False이면 Gx+Gy|G_x| + |G_y|
profile
얼렁뚱땅 바보 학부생...

0개의 댓글