[OpenCV 4로 배우는 컴퓨터 비전과 머신 러닝] 9장_에지 검출과 응용_1

SUN·2023년 1월 16일
0

[9장 에지 검출과 응용]

  • 9.1 에지 검출
    에지를 검출하는 기본적 이론과 에지 검출 방법
    • 에지
      픽셀 값이 급격하게 변경되는 부분
      픽셀 값의 변화율을 이용하여 에지를 찾을 수 있다
    소벨 필터, 캐니에지 검출방법

9.1.1 미분과 그래디언트

영상에서 에지(edge)는 한쪽 방향으로 픽셀 값이 급격하게 바뀌는 부분을 가리킨다.
즉, 어두운 영역에서 갑자기 밝아지거나
반대로 밝은 영역에서 급격하게 어두워지는 부분을 말한다.

객체와 배경의 경계, 객체와 다른 객체의 경계에서 에지가 발생한다.
영상에서 에지를 찾아내는 작업은 객체의 윤곽을 알아낼 수 있는 유용한 방법
cv에선 객체 판별을 위한 전처리로 에지 검출이 사용되고있다.

픽셀값의 변화율을 측정하여 변화율이 큰 픽셀을 선택해야한다.
함수 또는 데이터의 변화율을 미분(derivative)라고한다.
함수의 미분 = 주어진 함수의 순간 변화율

x의 변화량이 무한히 0에 가까워질 때의 함수 값 변화량을 미분이라고한다.
함수값이 증가하는 위치에서는 함수의 미분값이 0보다 큰 양수
함수 값이 감소하는 위치에서는 함수의 미분 값이 0보다 작은 음수

함수 그래프가 수평으로 진행되는 부분은 함수 값 변화가 없는 부분이고, 이 위치에서는 미분값은 0이다.
함수값이 급격하게 증가하는 위치에서는 미분값이 0보다 큰 값을 가진다.
함수 값이 급격하게 감소하는 위치에서는 미분값이 0보다 훨씬 작은 음수로 나타난다.
함수값이 대체로 일정한 기울기로 증가하는부분은 미분값이 0보다 큰 양수값이 일정하게 나타난다.
→ 함수 값이 급격하게 바뀌는 부분을 찾기위해서는 함수의 미분값이 0보다 훨씬 크거나 훨씬 작은 위치를 찾아야한다.

영상은 2차원 평면 위에 픽셀 값이 정형화되지 않은 상태로 나열되어 있는 형태이므로 미분 공식을 적용할 수 없다.

영상으로부터 미분을 계산하려면
1. 영상이 2차원 평면에서 정의된 함수라는 점
2. 영상이 정수 단위 좌표에 픽셀이 나열되어있는 이산함수라는점

이라는 2가지 특징을 고려해야한다.

  • 1차원 이산함수에서 미분 구하는 방법

    일련의 데이터가 순서대로 나열되어있는 경우, 미분 근사화 방법을 이용하여 변화량을 측정 할 수 있다

    • 미분 근사
      • 전진 차분(forward difference)
      • 후진 차분(backward difference)
      • 중앙 차분(centered difference

    수식에서 I(x)는 1차원 이산함수이고, h는 이산 값의 간격을 의미한다.
    미분 근사 방법을 영상에 적용할 경우,
    h는 픽셀의 간격 (보통 픽셀 간격의 최소 단위인 1을 h값으로 사용한다.)

    전진 차분 수식은 I(x+1)-I(x)로 정리되며,
    이는 자기 자신 바로 앞에 있는 픽셀에서 자기 자신 픽셀 값을 뺀 형태

    후진 차분은 I(x)-I(x-1)로
    자기 자신 픽셀에서 바로 뒤에 있는 픽셀 값을 뺀 형태

    중앙 차분은 (I(x+1)-I(x-1))/2로
    자기 자신을 제외하고 바로 앞과 뒤에 있는 픽셀 값을 이용한다.

    세가지 미분 근사 방법 중에서 중간값 차이를 이용하는 방법이 이론적으로 근사화 오류가 가장 적고, 널리 사용되고있다.


영상은 2차원 평면에서 정의된 함수이기 때문에 영상에서 에지를 찾기 위해서는
영상을 가로 방향과 세로 방향으로 각각 미분해야한다.

2차원 영상 I(x,y)를

  • 가로 방향으로 미분한다는 것
    = y좌표는 고정한 상태에서 x축 방향으로만 미분 근사를 계산하는것을 의미
    = x축 방향으로의 편미분(partial derivative)

  • 세로 방향으로 미분한다는 것
    = x좌표를 고정한 상태에서 y축 방향으로 미분 근사를 수행한다.
    = y축 방향으로의 편미분

2차원 공간에서 정의된 영상에서 에지를 찾으려면 x축 방향과 y축 방향의 편미분을 모두 사용해야한다.

f(x,y)가 있을때, 이 함수의 x축 방향 미분과 y축 방향 미분을 한꺼번에 벡터로 표현한 것을 그래디언트(gradient)라고 한다.

그래디언트는 벡터이기 때문에 크기(magnitude)와 방향(phase) 성분으로 표현할 수 있다.
그래디언트 벡터의 방향은 변화의 정도가 가장 큰 방향을 나타내고
그래디언트 벡터의 크기는 변화율 세기를 나타내는 척도로 생각할 수 있다.

그래디언트 벡터의 크기는 밝이 차이가 클수록 크게 나타난다.
에지의 방향 = 그래디언트 벡터와 수직인 방향

2차원 영상에서 에지를 찾는 기본적인 방법은 그래디언트 크기가 특정 값보다 큰 위치를 찾는것
여기서 에지 여부를 판단하기 위해 기준이 되는 값을 임계값(threshold) 또는 문턱치 라고 한다.
임계값은 영상의 특성에 따라 다르게 설정해야하며, 사용자 경험에 의해 결정된다.
높게 설정하면 밝기 차이가 급격하게 변하는 에지 픽셀만 검출되고
낮게 설정하면 약한 에지 성분도 검출된다.


9.1.2 마스크 기반 에지 검출

대부분의 영상에는 잡음이 포함되어있어 부정확한 결과가 생성될 수 있다.

잡음의 영향을 줄 일 수 있도록 좀 더 큰 크기의 마스크를 이용한다.

널리 쓰이고 있는 미분 마스크가 소벨 필터(Sobel filter) 마스크이다.

  • 소벨 필터 마스크 x축 방향 미분 마스크는 현재 행에 대한 중앙 차분 연산을 2회 수행하고, 이전 행과 다음 행에 대해서도 중앙 차분 연산을 1회씩 수행한다.

    이러한 연산은 현재 행과 이웃 행에서의 픽셀 값 변화가 유사하다는 점을 이용하여 잡음의 영향을 줄이기 위함
    현재 행에서 두번의 중앙 차분 연산을 수행하는 것은 현재 행의 중앙 차분 근사에 더 큰 가중치를 주기 위함

  • 샤르 필터 마스크(Scharr filter) 3X3 소벨 마스크 보다 정확한 미분 계산을 수행한다 Sobel 함수의 ksize인자에 FILTER_SCARR 또는 -1 을 지정하면 3X3 샤르 마스크 사용해 미분한다

Sobel() 또는 Scharr() 함수를 이용하여 x 방향으로 미분과 y 방향으로 미분을 각각 계산하여 행렬에 저장한 후, 두 미분 행렬을 이용하여 그래디언트 크기를 계산할 수 있다

2차원 벡터의 x 방향 좌표와 y 방향 좌표를 이용하여 벡터의 크기를 계산하는 magnitude() 함수가 openCV에 제공되고있다

만약 x방향으로 미분과 y방향으로 미분이 저장된 두개의 향렬이 있을때, 그래디언트의 방향을 계산하고 싶다면 phase() 함수를 사용할 수 있다

각 픽셀에서 계산된 그래디언트 크기가 255보다 큰 경우에는 포화 연산에 의해 흰색으로 표현된다

임계값을 너무 낮추면 잡음의 영향도 에지로 검출될 수 있으므로 주의해야한다

9.1.3 캐니 에지 검출기

  • 소벨 마스크
    구현이 간단하고 빠른동작해 지금도 많이 사용되고있다
    그러나, 그래디언트 크기만을 기준으로 에지 픽셀을 검출하기 때문에 임계값에 민감하고 에지 픽셀이 두껍게 표현되는 문제점이 있다
  • 캐니

    에지 검출을 최적화 문제로 접근함 소벨의 단점 해결 방법 제시

    1. 정확한 검출 : 에지를 검출하지 못하거나 또는 에지가 아닌데 에지로 검출하는 확률을 최소화해야한다

    2. 정확한 위치 : 실제 에지의 중심을 찾아야한다

    3. 단일 에지 : 하나의 에지는 하나의 점으로 표현되어야한다

      ⇒ 캐니 에지 검출기(canny edge detector)


    소벨 에지 검출 방법이 단순히 그래디언트 크기만을 고려하여 에지를 찾아내는 방법이라면

    캐니 에지 검출기는 그래디언트의 크기와 방향을 모두 고려하여 좀 더 정확한 에지 위치를 찾을 수 있다

    에지는 서로 연결되어 있는 가능성이 높다는 점을 고려하여 그래디언트 크기가 다소 약하게 나타나는 에지도 놓치지 않고 찾을 수 있다

    • 과정
    1. 가우시안 필터링
      가우시안 필터링을 적용하는 이유?
      → 영상에 포함된 잡음을 제거하기 위함

      가우시안 필터링에 의해 영상이 부드러워지면서 에지의 세기도 함께 감소될 수 있기 때문에 적절한 표준편차를 선택하여 사우시안 필터링을 해야한다

      잡음이 심하지 않다면 이과정 생략가능

    2. 그래디언트 계산

      3X3 소벨 마스크를 이용해 그래디언트 계산 진행

      그래디언트 크기(소벨에지) + 그래디언트 방향도 함께 고려한다

      그러므로, 가로 방향과 세로 방향으로 각각 소벨 마스크 필터링을 수행한 후, 그래디언트 크기와 방향을 모두 계산해야한다

      2차원 공간에서 정의된 함수 f(x,y)의 그래디언트 크기는 L2 노름(L2 norm)이라고한다

      연산 속도 향상을 위해 L1 노름의 형태로 계산하기도한다.
      실제로 opencv에 구현되어있는 캐니 에지 검출기에서도 그래디언트 크기 계산 시 기본적으로 L1노름을 사용한다

    3. 비최대 억제

      그래디언트 크기가 특정 임계값 보다 큰 픽셀을 선택할 경우, 에지 근방의 여러 픽셀이 한번에 에지로 선택될 수 있다

      에지가 두껍게 표현되는 현상을 방자하고자 비최대 억제(non-maximun suppression) 과정 사용

      그래디언트 크기가 국지적 최대(local maximun)인 픽셀만을 에지로 설정하는 기법

      상대적으로 국지적 최대가 아닌 픽셀은 에지 픽셀에서 제외하기 때문에 비최대 억제라는 용어 사용한다

      2차원 영상에서 국지적 최대를 찾으려면

      특정 픽셀을 둘러 싸고있는 모든 픽셀 값을 검사하여 국지적 최대인지 판별해야한다

      그러나 비최대 억제 과정에서는 그래디언트 벡터의 방향과 같은 방향에 있는 인접 픽셀끼리만 국지적 최대 검사를 수행한다

      비최대 억제를 수행함으로써 가장 변화율이 큰 위치의 픽셀만 에지로 검색된다

    4. 이중 임계값을 이용한 히스테리시스 에지 트래킹

      소벨 에지 검출 방법에서는 그래디언트가 특정 임계값 보다 크면 에지로, 작으면 에지가 아닌 픽셀로 판단함

      이 경우 조명이 바뀌거나 임계값을 조금만 조절해도 에지 픽셀 판단 결과가 달라질 수 있다

      하나의 임계값을 사용할 경우, 이분법으로 결과가 판단되기 때문에 환경 변화에 민감해 질 수 있다

    → 두 개의 임계값 사용하는 캐니 에지 검출기

    두개의 임계값 중에서 높은 임계값을 THighT_High(= 강한에지) 낮은 임계값을 TLowT_Low(=약한에지)라고 표기

    만약 그래디언트가 high 보다 크면 해당 픽셀은 최종적으로 에지로 판단한다

    low보다 작으면 에지가 아니다고 판단

    low와 high 사이인것은 추가 검사 수행한다

    캐니 에지 검출기의 마지막 단계에서는 히스테리시스 에지 트래킹(hysteresis edge tracking) 방법을 사용하여,

    약한 에지 중에서 최종적으로 에지로 판별할 픽셀은 선택한다

    에지 픽셀이 대체로 상호 연결되어있다는 점을 이용한다

    만약 약한 에지 픽셀이 강한 에지 픽셀과 서로 연결되어있다면, 이 픽셀은 최종적으로 에지로 판단한다

    반면, 강한 에지와 연결되어 있지 않은 약한 에지 픽셀은 최종적으로 에지가 아니라고 판단

    임계값을 낮출수록 에지로 판별되는 픽셀이 더 많아진다

    임계값을 낮출수록 잡음에 해당하는 픽셀도 에지로 검출할 가능성이 높아질 수 있다

0개의 댓글