컴퓨터 비전 5장 Edge Detection

Coding_Holic·2021년 10월 22일
1

컴퓨터 비전

목록 보기
3/5

topic

  • Edge Detection
  • Canny Edge Detector

-기울기가 가파른 곳 edge라 한다!
edge detector중에 가장 linear한 곳
frequency domain에서 center에서 멀어질 수록 high frequency이다!

https://sss20-02.tistory.com/29

Review of Filtering

Filtering in frequency domain

  • spatial domain에서의 필터링보다 빠름(for large filters)
  • filter의 효과를 이해하는데 도움이 된다.
  • Algorithm:
  1. image와 filter를 Fourier domain으로 전환한다(e.g. numpy.fft.fft2())
  2. Element-wise multiply their decompositions(변환한 영상을 픽셀 단위로 곱한다)
  3. spatial domain에서 inverse Fourier trasform으로 결과를 전환한다.(e.g. numpy.fft.ifft2())

Linear filters for basic processing

  • Edge filter (high-pass)
  • Gaussian filter (low-pass)
    *값이 큰건 빨간색....
  • images and filtering in the frequency domain - Fourier analysis
  • 영상이 클 때는 fourier transform을 쓰는게 더 빠르다.
    because fft -> NlogN이고, convolution/correlation-> N^2이다.
  • images들이 smooth하다.-> 자연스럽다 (compression:압축)
    정보가 redundant(중복)이 많아서, compression(압축)이 가능하다.+(저주파수[중앙]의 정보가 많아서 압축이 가능하다!)
  • low-pass before sampling!!! -> 안하면 aliasing
    low pass를 거친후 sub sampling을 하자!

정리

이미지 => Feature Detection (:특징찾기,뽑아내기) => Feature Description (:하나의 Vector형태로 표현,) => Matching/Indexing/Detection (feature techinique...)..local descriptor로 부터

MATCHING-> 꽃이다! INDEXING-> SEARCH할 때 미리 INDEXING해놓고 빨리찾는것... detection...가장 단순한 것...!!!! =>EDGE DETECTION

Edge / Boundary Detection

  • Goal: image에서 시각적 변화(discontinuity:불연속성)들을 확인하는 것
    -> semantic(의미있는) 정보는 edge상에 encode되어 있다.

EDGE 와 BOUNDARY의 차이점은 무엇인가?->

visual edge상에 causes는 무엇인가? (이때 cause가 뭐말하는거지....)

Origin of Edges

  • caused by a variety of factors

-> edge는 어떻게 구분이 될까??
: surface normal discontinuity (top vs side) / depth discontinuity(side of an object..시점에서의 거리가 다르다) / surface color discontinuity(text,ink) / illumination discontinuity(shadows)

  • Why do we care about edges? 왜 edge들에 대해 신경써야하는가?
    1.정보를 추출할 수 있다. -> Recognize objects
    -edge만 보고도 구분할 수 있다.
    2.Help recover geometry and viewpoint(기하학적 정보와 시점 정보를 알 수 있다.)

vanishing point? vanishing line?
vanishing point-> 물리공간에서 평행한 모든 직선들은 모두 동일한 소실점을 갖는다. 서로 방향만 같으면 영상에서는 모두 동일한 소실점...
평행하지않은 직선은 서로 다른 소실점을 가지게 된다.
vanishing line-> 동일 평면에 속한 직선들의 소실점들은 모두 일직선 상에 존재하게 된다. 이 선을 소실 선이라고 한다, 즉 소실 점들이 모여서 이루어진 직선

https://darkpgmr.tistory.com/157

Closeup of edges...

edge는 image intensity function에서 급격하게 변화하는 공간이다.

-> image(image상에서 일차원적으로 직선 그어서 intensity 변화 감지...) intensity function(along horizontal scanline,수직 scan line을 따라서...)이 만들어진다 first derivative(1차 미분)을 하면 다음과 같이 함수가 나온다. [기울기]를 구하면 극대와 극소값을 구할 수 있고...

만약 가우시안 noise를 뿌리게 되면


모든 미분 값에서 값이 나타나게 된다...!

가우시안 noise: 정규분포를 가지는 잡음

Effects of noise

  • difference filter(edge를 구하기 위한)는 noise에 강하게 반응한다.
    -영상에서 노이즈는 이웃 픽셀 값에 변화를 주게 된다.
    -반응하여 노이즈는 강하게 된다

  • sol->smooth first

    가우시안 함수 g를 잡음있는 f에 convolution해준다. 그리고 미분 취하고, edge 찾기 위해 peak를 찾으면 된다!



    convolution은 교환 법칙이 성립한다. [1 -1] <- 미분한 것과 같다.


    smoothing은 선명한 edge를 구하는데 방해가 된다!
    smoothed derivative은 edge를 blur시킨다!!

=> THINK

  • 무엇이 좋은 edge detector인가?
  • edge만을 고려하면 잃어버린 정보는 무엇인가?
  • edge는 영상을 표현하는데 충분한가?

edge detector 설계하기

  • good edge detector 기준:
    -good detection: real edge들을 모두 찾을 수 있어야한다!
    -good localization: 검출된 edge는 진짜 edge에 최대한 가까워야한다. edge 점에 하나의 값만을 return 해야한다.
  • edge detection 단서들:
    -color,intensity, or texture across the boundary의 차이점들
    -edge는 연속적이고 폐쇄되어야한다.
    -고 수준의 지식을 사용할 수 있다.

  • "ALL REAL EDGES"
    -모든 잠재적인 edge들을 검출할 수 있어야한다. 유용한지 판단해야한다.
    -EDGE를 모두 찾을 수 없으면, 우리는 선택할 수 없다!!

-> Is this possible?

  • 조명이나 texture edge에 대해 잘못 검출된 false positive가 있지만 edge detection은 잘 작동한다.
  • 더 긴 contour(등고선)를 추출하기 위한 방법들 있음
  • 최근 방법들은 data로부터 학습하는 접근 방법을 사용한다
  • 물체 정보, 높은 단계 정보 사용 못함..

canny edge detector

  • step edge(계단)에 gaussian noise 사용해서 손상시킨다!

  • 가우시안의 1차 미분이 signal-to-noise ratio와 위치정확성 측면에서 가장 최적화된 연산이다.

  • 우선 이미지를 흑백으로 만든다. rgb2gray('img.png')

  1. 가우시안의 x축 y축으로 미분한 필터를 취한다.....
  2. gradient의 magnitude(크기)와 orientation(방향)을 찾자
  3. Non-maximum suppression:(NMS) -> 동일한 object에 대해 여러개의 bbox가 있으면, 가장 스코어가 높은 박스만 남기고 나머지를 제거하는 것이다!
  • thin multi-pixel wide "ridges"(능선) to single pixel width.
  1. 'Hysteresis' Thresholding

    canny edge detector => https://ctkim.tistory.com/98, skimage.feature.canny()

1. derivative of Gaussian filter


2. Compute Gradients


3. NMS?(Non-maximum suppression for each orientation)

동일한 object에 대해 여러개의 bbox가 있으면, 가장 스코어가 높은 박스만 남기고 나머지를 제거하는 것이다!

At pixel q: 값이 p와 r중에서 더 큰 값만 남기고, 작은 값은 삭제!? 주변 pixel의 값은 interpolation해서 구한다!


4. Hysteresis Thresholding (이력현상)

  • 물질의 물리량이 현재의 조건만으로 결정되는 것이 아니고, 이전부터 겪어온 값들에 의해서 결정되는 현상(과거의 history)

이진화 오류를 최소화하기 위해 자신의 값 뿐만 아니라 주변의(공간적 또는 시간적으로) 값을 같이 참조하는 것이 효과적, 자신의 분류 결과에 따라서 자신의 분류 결과가 달라질 수 있다. 과거 또는 주변의 값에 의존하는 현상...

high 임계치보다 높으면 = strong edge
low 임계치보다 낮으면 = noise라고한다
그 사이는 weak edge

thresholding: 임계치 이상 값일때는 1 미만일때는 0과같이 해석하여서, 이진화하는 과정을 말한다.


시그마 값에 따라 가우시안 커널의 값이 결정된다. 또한 큰 scale edge와 작은 scale edge를 구분해 낼 수 있다!

profile
안녕하세용 개발에 미치고 싶은 초보 개발자입니다:)

0개의 댓글