정리 노트

영상 처리에서의 edge 검출 본문

개념 정리

영상 처리에서의 edge 검출

꿈만 꾸는 학부생 2022. 10. 9. 01:30
728x90

이 글은 국민대학교 소프트웨어학부 '컴퓨터 비전' 강의를 듣고 요약하는 글입니다. 실제로 원하시는 정보가 여기에 없을 수도 있습니다. 이 점 유의 바랍니다. 오류 지적 매우 환영합니다!


이 글에서 사용하는 일부 이미지들은 이 책에서 가져왔습니다. 사용된 때마다 '컴퓨터 비전 도서'라고 표시하겠습니다.

 

컴퓨터 비전(Computer Vision) : 네이버 도서

네이버 도서 상세정보를 제공합니다.

search.shopping.naver.com

 

Edge는 무엇이고 왜 생기는가?

에지(edge)는 쉽게 얘기하면 어떤 것과 다른 어떤 것 사이에 불연속이 생길 때 그 경계선이라 합니다. 지금 주변을 둘러보시면 수많은 에지들을 볼 수 있습니다. 에지들은 불연속인 것이 있기 때문에 생깁니다. 우리가 수없이 보는 이미지들에도 에지들은 많이 찾아볼 수 있습니다.

위의 그림을 봅시다. 하늘과 나무 사이의 경계, 나무와 나무 사이의 경계, 나무와 철책 사이의 경계, 하늘과 건물들 사이의 경계 등 이 수많은 경계들이 다 에지입니다. 이렇듯 에지는 물체를 식별하는 데 사용될 수 있기에 컴퓨터 비전에서 중요합니다.

Edge는 어떻게 검출해내는가?

불연속 때문에 생기는 edge를 찾아내는 방법에서는 미분이 사용됩니다. 우리가 흔히 생각하는 미분은 연속 공간에서의 미분일 것입니다. 연속 공간에서 정의되는 일변수 함수의 경우 미분은 독립 변수의 변화량에 따른 함숫값의 변화량입니다. 변화량은 연속 공간에서는 한없이 0으로 수렴하는 값입니다. 하지만 이런 이미지 처리는 연속 공간이 아닌 이산 공간 안에서의 미분을 진행해야 합니다.

이산 공간에서의 미분

먼저 저희가 흔히 아는 미분 식을 가져와 봅시다.

source: https://ko.wikipedia.org/wiki/%EB%AF%B8%EB%B6%84

일단 생각하기 쉽게 하나의 배열을 생각합시다. 배열 안에서의 각 원소는 이웃하는 원소들과 거리가 1입니다. 즉 변화량이 한없이 0으로 수렴한다는 것은 생각하기 힘듭니다. 따라서 위 식에서의 Δx를 많이 줄여봤자 1입니다.

즉 위 식은 f(x + 1) - f(x) (x는 배열의 인덱스)로 바뀌게 됩니다. 배열에 이 식을 적용하기 위해 하나의 마스크를 생각할 수 있습니다. {-1, 1} 마스크를 사용해 배열 안에서 슬라이딩하면 마스크 안의 원소들과 배열의 원소들끼리 correlation 연산을 통해 구해낼 수 있습니다. 아래의 그림을 봅시다.

source: 컴퓨터 비전 도서

마스크(에지 연산자)가 제일 왼쪽에 위치할 때 배열의 0번째 인덱스와 1번째 인덱스가 연산의 대상이 됩니다. 2 * (-1) + 2 * (1) = 0이므로 0번째 인덱스에 미분 결과 0을 집어넣습니다. 이 과정이 배열의 끝까지 슬라이딩하며 진행됩니다.

계단 에지와 램프 에지

미분을 진행하면 결괏값이 급격히 변하는 부분과 서서히 변하는 부분들이 있을 것입니다. 여기서 급격히 변하는 구간을 계단 에지, 서서히 변하는 구간을 램프 에지라고 부릅니다. 위의 그림을 다시 보면 1차 도함수 부분에 {0, 4}처럼 급격히 변하는 구간이 계단 에지, {-1, -1, -1, -1}처럼 변화량이 거의 없는 부분을 램프 에지라고 합니다. 주로 자연 영상 또는 그림에서 이런 램프 에지가 나타납니다. 램프 에지가 나타나면 에지가 굵어집니다. 굵은 에지의 시작과 끝을 알아내기 위해 한번 더 미분을 적용합니다.

2차 미분

미분 식 f(x + 1) - f(x)에 대한 미분 결과를 좀 더 편하게 보여주기 위해 f(x) - f(x - 1)로 수정하겠습니다.(의미는 동일합니다!) 그럼 이 식을 미분해보면

f'(x) - f'(x - 1) = (f(x + 1) - f(x)) - (f(x) - f(x - 1)) = f(x + 1) + f(x - 1) -2 * f(x)라는 식을 얻을 수 있습니다. 앞에서 사용했던 {-1, 1} 마스크를 두 번 적용해도 되지만 원본에 한 번에 2차 미분한 결과를 적용하기 위해 새로운 마스크 {1, -2, 1}이 사용됩니다.

source: 컴퓨터 비전 도서

마스크 {1, -2, 1}이 왼쪽에서부터 적용된다고 합시다. 그러면 0 ~ 2번째 인덱스가 연산의 대상이 됩니다. 2 * (1) + 2 * (-2) + 2 * (1) = 0이므로 0번째 인덱스에 결과 0을 집어넣습니다. 이 과정이 배열의 끝까지 슬라이딩하면서 진행됩니다.

 

그럼 램프 에지에 대해 1차 미분, 2차 미분한 모습을 그림으로 보겠습니다.

source: 컴퓨터 비전 도서

램프 에지에서 1차 미분을 적용하면 마치 봉우리처럼 솟아있는 모습을 볼 수 있습니다. 그리고 2차 미분을 적용하면 맨 아래의 그림과 같은 모습을 볼 수 있습니다. 에지를 검출하기 위해 이렇게 1차 미분을 통해 봉우리를 찾거나 2차 미분을 통해 영교차를 찾습니다.

 

하지만 생각해볼 점이 있습니다. 만약, 이미지에 노이즈가 심하게 껴있다면? 노이즈가 껴있는 상황에서 바로 미분을 적용해 에지를 검출하기는 쉽지 않을 것입니다. 아래의 그림을 봅시다.

딱 보기에도 f(x)가 깔끔한 선으로 표현되지 않아 보입니다. 여기에 미분을 적용한 결과가 아래와 같습니다. 여기서 봉우리를 찾기란 쉽지 않을 것 같습니다.

Smoothing

따라서 저희는 스무딩 작업이 필요합니다. 스무딩 작업을 통해 노이즈를 최대한 줄이고 미분을 통해 에지를 검출해낼 수 있습니다.

h라는 커널을 통해 f와 convolution 연산을 진행해서 좀 더 깔끔한 결과를 얻을 수 있습니다. 이 결과에 대해 미분을 적용하면 맨 아래의 그림처럼 깔끔한 봉우리를 찾을 수 있습니다.

이렇게 스무딩을 사용하는 필터들 중 하나로 LOG 필터가 있습니다. LOG 필터는 가우시안 스무딩을 적용한 결과에 라플라시안을 적용하는 필터입니다. 라플라시안은 2차 미분 연산자중 하나입니다. 가우시안 스무딩을 적용한 커널을 h라 할 때 가우시안 스무딩에 라플라시안을 적용했다는 것을 아래의 식으로 표현할 수 있습니다.

Laplacian of Gaussian

LOG 필터까지 적용하고 나면 그 후로 영교차 지점을 찾으면 됩니다. 예를 들어 LOG 필터 적용 결과가 아래와 같다고 합시다.

source: 컴퓨터 비전 도서

빨간 동그라미로 표시한 지점이 영교차이려면 두 가지 조건을 만족해야 합니다.

  • 인접한 네 개의 마주 보는 화소 쌍들(동-서, 남-북, 북동-남서, 북서-남동)을 조사합니다. 이 중 두 개 이상의 쌍에서 부호가 바뀌는 것이 발견되어야 합니다.
  • 부호가 다른 쌍의 값들의 차이가 임계값을 넘어야 합니다.

만약 임계값을 1.0으로 지정했다고 하면 이 지점은 영교차 지점입니다. 북서-남동 쌍과 남-북 쌍을 보시면 둘 다 부호가 다르고, 차이가 1.0 이상입니다. 이런 방식으로 에지를 검출할 수 있습니다.

Gradient Vector

또한 gradient vector를 사용해서 에지의 강도, 에지의 방향까지 알아낼 수 있습니다. gradient vector가 무엇이고 어떤 특징을 가졌는지는 여기서 자세히 설명하지는 않겠습니다. 궁금하신 분들은 아래의 사이트를 참고하시길 바랍니다.

 

Image gradient - Wikipedia

From Wikipedia, the free encyclopedia Jump to navigation Jump to search Directional change in the intensity or color in an image Two types of gradients, with blue arrows to indicate the direction of the gradient. Dark areas indicate higher values An image

en.wikipedia.org

gradient vector를 사용하면 에지의 강도는 gradient vector의 크기로 나타낼 수 있습니다. 그리고 gradient vector를 <Fx, Fy>라고 표현할 때, gradient 방향은 arctan(Fy / Fx)를 통해 알아낼 수 있습니다. gradient 방향은 에지의 방향과 수직 관계에 있습니다. 따라서 이를 통해 에지의 방향까지 알아낼 수 있습니다.

728x90

'개념 정리' 카테고리의 다른 글

OAuth  (0) 2023.02.15
Docker  (0) 2022.12.22
영상 처리의 세 가지 기본 연산  (2) 2022.09.21
Git(2)  (0) 2022.07.06
Git(1)  (0) 2022.07.05