[비전6] Corners
◆1. Interest Points and Corners 일단 용어에 대해 잡고 넘어가자. Interest points 는 keypoints 를 뜻하고 이것들은 보통 feature 라고도 불리우기도 한다. 원래 이렇게 부르는게 아니지만 비전 공학 특성 상 뭐가 정확히 정의되어있다기 보다는 자기 편하게 부르기 나름이기 때문에 그냥 이렇게 알고 넘어가자. Correspondence Correspondence 란 매치되는 이미지를 이야기한다. 보통 두 이미지를 비교할 때, 이거를 kernel information 으로 사용한다. 보통 matching points, patches, edges, regions across images 를 뜻한다. Fundamental matrix 어떻게 매칭할 지에 사용한다. 다..
2021.05.03
no image
[비전5] Frequency and Image
◆1. Non-Linear Filters 이미지의 주파수에 대해서 알아보자. 픽셀 데이터로 되어있는 이미지를 픽셀의 변화 값에 따른 frequency 변화 값을 따로 뺄 수 있다. 이를 주파수라고 하면 해당 주파수 만을 뽑아내서 주파수 도메인으로 확인해볼 수 있다. 이 때 사용되는 변환 방법으로 푸리에 변환(Fourier transform )이 있다. 푸리에 변환을 통해 이미지를 변환하게 되면 보통 각 frequency의 Coefficient 값으로 표현한다. 이미지를 위의 그래프와 같이 각 주파수에 따른 Coefficient 만 남겨두는 식으로 압축(?!)해서 저장해둘 수가 있다. 또한 FFT의 교환법칙을 통해 CNN 에서의 for 문 3개를 쓴 세제곱 복잡도를 줄일 수 있다는 장점도 가지고 있다. 일..
2021.05.03
[비전4] Edge
◆1. Filters for features 이전에 필터링을 노이즈를 없애거나 줄이는 데에 사용한다고 했었다. 이제 어떻게 필터를 higher-level feature, 즉 의미있는 데이터를 뽑아내는 데에 사용할까에 대해 알아보자. 여기서 의미 있는 데이터란 edge, corner 와 같은 데이터를 의미한다. ◆2. templates matching : 입력 이미지에서 템플릿 이미지의 위치를 찾는 방법이다. template matching 은 template image 와 같은 사이즈의 window 를 가지고 source image의 모든 subimage 들과 비교하면서 유사도가 가장 높은 부분을 찾게 되는데, 크기가 같은 두 이미지 유사도를 구하는 방법 중 하나가 바로 NCC가 되는 것이다. (Norm..
2021.04.20
[비전3] filters
작은 센서를 만들 때, 저녁이라는 시간 때문에 생기는 노이즈와 같은 문제가 생길 수 있다. 즉 이러한 경우 적당한 필터링을 통해 노이즈를 제거해주어야 한다. 이럴 때 쓰이는 필터란 무엇일까에 대해 알아보자. 1. Image? Intensity values (집약정도) 를 사용해 매트릭스 혹은 격자의 형태 로 표현한다. 즉, 이미지는 정수값의 행렬로 표현된다~ 정도만 알아두자. Images as functions : r,g,b 총 세 개의 함수가 내장되어있는 거라고 볼 수 있다. 2. Image 특성 이미지는 제한된 수만큼 픽셀을 보유한다. 픽셀 값→ grayscale은 0~255 → 컬러의 RGB 같은 경우, 각 채널 당 0~255 까지 각 1바이트로 총 3바이트 표현 가능하다. 3. Image 변환 수..
2021.04.20
no image
[비전2] linear algebra
비전에 대해 알아보기 전에 기본적인 선형대수 개념을 매우 간단하게! 잡고 넘어가고자 한다. vector : 방향과 크기(Magnitude) 를 가지는 기본적인 기하학 객체 개념으로 잡고 넘어가면 편할 듯 싶다. vector operations dot product(inner product): 내적으로 벡터를 곱한다, 투영한다 라는 뜻의 연산이다. outer product: 외적으로 이는 왼손좌표계(DirectX), 오른손좌표계(OpenGL) 에 따라 값이 다르게 나올 수 있는데 기본적으로 방향에 따른 법선 벡터를 계산하는 연산이라고 생각하면 될 듯 싶다. vector norm : 선형대수학에서 놈은 벡터의 크기(magnitude) 또는 길이(length)를 측정하는 방법을 의미한다. 1-norm 은 벡터..
2021.04.20
no image
[비전1] Introduction
컴퓨터 비젼 공학은 '미군'에서 군사목적으로 도입되었다가 현재는 많은 곳에서 사용되고 있다. 사람 얼굴인식, AR, 3D 모델링, OCR, Digital puppetry, Recognition, Self-driving cars등등 여러 곳에서 사용하고 있다. 이러한 비젼 공학의 제일 기본은 image pixel 로 부터 의미있는 데이터를 추출해내는 과정이다. 즉, 중간에 어떤 과정을 거치던 적절한 알고리즘을 통하여 pixel→output 을 해내는게 비젼 공학의 목표라고 할 수 있다. 그러면 이 이미지로부터 뽑아낼 수 있는 가장 기본적인 정보가 무엇일까? Semantic Information : 이미지에 대한 환경적 정보를 뽑아낼 수 있다. Geometric Information : 이미지의 거리, de..
2021.04.19

 

◆1. Interest Points and Corners

일단 용어에 대해 잡고 넘어가자. Interest points 는 keypoints 를 뜻하고 이것들은 보통 feature 라고도 불리우기도 한다.

원래 이렇게 부르는게 아니지만 비전 공학 특성 상 뭐가 정확히 정의되어있다기 보다는 자기 편하게 부르기 나름이기 때문에 그냥 이렇게 알고 넘어가자.

 

Correspondence

Correspondence 란 매치되는 이미지를 이야기한다. 보통 두 이미지를 비교할 때, 이거를 kernel information 으로 사용한다.

보통 matching points, patches, edges, regions across images 를 뜻한다.

 

Fundamental matrix

어떻게 매칭할 지에 사용한다. 다른 각도로 checking하면서 비교할 수 있기 위해 사용하는 놈이다.

다음 그림을 보자. sns 에 올려진 사진을 모아 fundamental matrix 로 correspondence 를 계산하고 어디서 찍었는지 확인할 수도 있다.

 

Feature points 사용

Image alignment 에 사용되기도 하고, 3D reconstruction, Motion tracking, Robot navigation, Indexing and database retrieval 에도 사용된다. 음.. 이미지에 특징점을 잡고 해당 데이터를 연산에 사용하는 모든 분야를 생각하면 될 거같다.

 

Panorama

갤럭시를 사용하면 Panorama 카메라가 있을 수 있다. 해당 기능을 구현하기 위해서는 여러장의 이미지를 찍은다음에 해당 이미지들의 특징점들을 잡고, correspondence 를 계산하여 이어 붙이는 로직을 구현해주어야 한다.

 

정확하게는 해당 특징 점을 vector 형태로 나타낸 feature descriptor 를 뽑아내고 각 vector 의 거리를 계산하면서 correspondence 를 찾는 과정을 거친다고 보면 될 것 같다.

 

Characteristics of good features

좋은 feature 의 특징은 다음과 같다.

  • Repeatability : 같은 특징은 반복된다.
  • Saliency : 각 feature 들은 구별된다.
  • Compactness and efficiency : 전체 이미지 픽셀 개수보다는 적은 개수의 feature 이어야 한다.
  • Locality : 특정 위치를 대표해야 한다.

 

 

◆2. Corner Detection

 

Mathematics

그러면 좋은 feature 들을 어떻게 계산해서 구할까?

위의 식처럼 주변의 픽셀 값과 계산해서 해당 픽셀이 도드라지는지 확인한다. 이 식으로 계산하게 되면 다음과 같은 input, output 을 알 수 있게 된다.

 

해당 output 을 보고 어느 부분이 좋은 feature 인지 아닌지 알 수 있다.

위의 그림을 봐보자.

특정 이미지에서 b,c,d 에 해당하는 영역에 correspondence 를 계산한 결과이다. (b)의 경우 center 부분이 나머지 픽셀들과 도드라지게 다른 것을 확인할 수 있고, (c) 는 비슷한 픽셀 데이터들이 line 처럼 존재하는 걸 확인할 수 있으며, (d) 는 그냥 전체적으로 비슷비슷하다는 것을 확인할 수 있다.

그러면 셋 중에 어떤 것이 좋은 feature 일까? 당연히 (b) 이다. 이건 그냥 넘어가겠다.

 

여튼 저런 식으로 corner feature 를 뽑아낼 수 있는데

식을 다음과 같이 좀더 줄여서 사용할 수 있다.

 

Corner response function

고유값과 고유벡터를 통해 구한다는데 정확한 것은 추가 검색을 하도록 하자..

 

 

Harris corner detector

위의 Corner response function 를 사용해서 corner 를 구하는 detector 이다. corner 를 구하는 방식은 다음과 같다.

 

 

'책장 > Computer Vision' 카테고리의 다른 글

[비전5] Frequency and Image  (1) 2021.05.03
[비전4] Edge  (0) 2021.04.20
[비전3] filters  (0) 2021.04.20
[비전2] linear algebra  (0) 2021.04.20

◆1. Non-Linear Filters

 

이미지의 주파수에 대해서 알아보자.

픽셀 데이터로 되어있는 이미지를 픽셀의 변화 값에 따른 frequency 변화 값을 따로 뺄 수 있다. 이를 주파수라고 하면 해당 주파수 만을 뽑아내서 주파수 도메인으로 확인해볼 수 있다. 이 때 사용되는 변환 방법으로 푸리에 변환(Fourier transform )이 있다.

 

푸리에 변환을 통해 이미지를 변환하게 되면 보통 각 frequency의 Coefficient 값으로 표현한다.

이미지를 위의 그래프와 같이 각 주파수에 따른 Coefficient 만 남겨두는 식으로 압축(?!)해서 저장해둘 수가 있다. 또한 FFT의 교환법칙을 통해 CNN 에서의 for 문 3개를 쓴 세제곱 복잡도를 줄일 수 있다는 장점도 가지고 있다.

 

일반적으로 영상처리 비전 쪽에서 이 푸리에 변환은 영상을 개선하는데 주로 많이 쓰인다.

노이즈가 있는 입력영상의 푸리에 변환 이미지

 

이와 같이 푸리에 변환은 영상을 개선하기 위해 노이즈 처리하기 힘든 입력 영상을 노이즈 처리하기에 좋은 주파수영역으로 바꾼 다음 노이즈를 제거하는 역할을 수행하게 된다.

위 이미지의 오른쪽 이미지는 푸리에 변환을 수행한 spectrum magnitude 이미지이다. 이 주파수 영역을 나타내는 스펙트럼 이미지에서 입력 영상의 노이즈 부분에 해당하는, 즉 고주파 영역이나 저주파 영역에 해당하는 부분을 아래와 같이 제거해 준다면 개선된 영상을 얻을 수 있다.

노이즈 영역을 제거한 스펙트럼 영상

이렇게 스펙트럼 영상에서 노이즈 영역에 해당하는 부분을 제거하고 푸리에 역변환(IDFT)을 수행하여 원래의 입력 영상 도메인으로 바꾸면 개선된 이미지를 얻을 수 있게 된다. 푸리에 변환에 의한 필터링 과정은 다음과 같다.

이러한 필터링 과정에서 H(u, v) 부분을 구현할 때 유의해야 할 점은 F(u, v)와 같은 크기의 영상 또는 행렬로 생성하지 않고, F(u, v)의 u, v 에 따라 H(u, v)의 스칼라 값을 계산하여 F(u, v)에 곱하는 방식을 사용하게 된다.

 

이러한 H(u, v) 부분에 적용하여 구현 할 수 있는 필터는 다음과 같은 필터가 있다.

 

ⓐ 저주파 통과 필터 (Low-pass filter)

저주파 통과 필터는 F(u, v)의 저주파 영역은 통과시키고 고주파 영역은 0으로 만들어 통과시키지 않는 필터를 말한다. 영상에서 잡음을 제거하거나 또는 약화시키고 블러링하여 에지 등의 세밀한 부분을 부드럽게 만드는 역할을 한다.

 

ⓑ 고주파 통과 필터 (High-pass filter)

고주파 통과 필터는 F(u, v)의 고주파 영역은 통과시키고 저주파 영역은 0으로 만들어 통과시키지 않는 필터를 말한다. 고주파 통과 필터는 영상을 날카롭게 강조하는 Sharpenning 효과를 일으킨다. 입력 영상에서는 고주파 통과 필터링을 하여 IDFT 하면 변화가 없는 영역은 0의 값을, 변화가 심한 에지 영역은 양수 또는 음수의 값을 갖게 된다.

 

퓨리에 변환의 목표는 어떻게 영상을 저주파 성분으로 조그맣게 두었따가 고주파 성분으로 신호를 확대시켰을 때 신호가 제대로 남아있을까? 를 해결하는 것이다.

 

 

Fourier Bases

위에서 말했듯이 이미지를 Fourier Transform 하여 Coefficient 값만 남겨둔다고 했었다. 그러면 해당 Coefficient 에 해당하는 주파수는 어떻게 저장하나? 에 대한 답이 Fourier Bases 이다.

기본적인 주파수 Bases 를 따로 두어 Coefficient 데이터에 계산해주는 식으로 이미지를 복원시킬 수 있다.

 

 

Edit frequencies

보이는 그림처럼 fourier 변환하여 뽑아낸 Fourier d

ecomposition image 를 조작하여 원래 이미지를 다룰 수 있다. 위에서 말한 Low-pass filter 와 High-pass filter 도 이 decomposition image 로 다룰 수 있다.

다만 이 정도는 알아두자. 저 decomposition image 에서 가운데 원 부분이 low frequency를 나타내는 coefficient 이고, 외각으로 갈수록 high frequency 를 나타내는 coefficient 라는 것이다.

예를 들어 low frequency를 버린다는 말은 면을 거른다는 말이고, high frequency를 버린다는 말은 edge 를 버린다는 말이다.

 


Amplitude & Phase

저 decomposition image 는 푸리에 변환 이후의 amplitude 를 의미한다.

우측의 Phase 는 이미지의 '패턴' 을 의미한다. 보통 모공과 같은 정확한 정보를 위해서는 '패턴'을 정보화 한 phase 를 사용하는데 많이 쓰지는 않는다.

정리해서 Amptitude 가 더 사람이 이해하기 직관적인 info 이고, Phase 는 직관적인 정보 보다는 정확한 정보로써 패턴을 정보화한 정보구나~ 라는 것을 알고 있으면 될 듯 싶다.

 


Edge Artifact Problem

위의 가우시안 필터와 Box filter 두 가지를 통해 이미지 blur 처리를 했을 때, box filter 는 이상한 edge들이 있는 것을 확인할 수 있다. 왜 그럴까?

 

FT 로 설명할 수 있다. FT 는 위에서 말했듯이 교환 법칙 및 결합 법칙이 가능해서 CNN 의 복잡도를 줄일 때 사용할 수 있다고 했다.

 

Box filter 를 FT 하게 되면

다음과 같이 갑자기 변하는 경계면 때문에 edge artifact 가 생기게 된다.

따라서 ((IMAGE * FT) * (BoxFilter*FT)) * IFT = BlurIMAGE 에서 edge artifact 가 계속 영향을 끼치게 된다. 때문에 Box filter 로 blur 처리했을 시 edge artifact 에 의해 이상한 edge 들이 있는 것을 확인할 수 있다.

 


Aliasing problem

이미지 scale 을 줄였을 때 high frequency component 를 잃는 것을 Aliasing problem 이라고 한다.

허나 이렇게 말하면 직관적으로 어떤 problem 인지 확 와 닿지가 않는다. 예를 들어 동영상을 찍을 때, 자동차의 바퀴 회전이 뒤로 가는(?!) 모습으로 찍힌 것을 볼 수 있다. 이를 Aliasing problem 이라고 한다. 즉, 영상의 frame 주파수가 실제 해당 물체의 frequency를 따라가지 못해 생기는 문제이다.

이를 해결하기 위해 어떻게 해야할까?

 

 

Nyquist-Shannon Sampling Theorem

2가지의 해결 방법이 있다.

  1. Sampling more!: 영상을 찍는다면 사진기가 찍는 frame 주파수 성능이 실제 물체의 주파수 2배 이상이 되도록 한다.
  1. 원본을 blur 하게 만든다.: 사진기를 바꿀 수 없다면 아예 실제 물체의 주파수를 blur 처리하여 줄여버린다.

 

 


참고링크

 

'책장 > Computer Vision' 카테고리의 다른 글

[비전6] Corners  (0) 2021.05.03
[비전4] Edge  (0) 2021.04.20
[비전3] filters  (0) 2021.04.20
[비전2] linear algebra  (0) 2021.04.20

[비전4] Edge

TERAJOO
|2021. 4. 20. 22:25

1. Filters for features

 

이전에 필터링을 노이즈를 없애거나 줄이는 데에 사용한다고 했었다.

이제 어떻게 필터를 higher-level feature, 즉 의미있는 데이터를 뽑아내는 데에 사용할까에 대해 알아보자.

여기서 의미 있는 데이터란 edge, corner 와 같은 데이터를 의미한다.

 


2. templates matching

 

: 입력 이미지에서 템플릿 이미지의 위치를 찾는 방법이다.

template matching 은 template image 와 같은 사이즈의 window 를 가지고 source image의 모든 subimage 들과 비교하면서 유사도가 가장 높은 부분을 찾게 되는데, 크기가 같은 두 이미지 유사도를 구하는 방법 중 하나가 바로 NCC가 되는 것이다. (Normalized Cross Correlation)

NCC

: 각 픽셀들을 벡터라고 생각하자, (r,g,b) 이런식으로...

그리고 벡터를 정규화(normalize) 한다. 이 후 이 벡터들을 서로 내적했을 때 나올 수 있는 가장 큰 값은 얼마일까?

바로 1이다. 같은 두 벡터를 내적하는 경우이다. 반대로 가장 작은 값을 -1로 방향이 전혀 반대인 경우이다. 하지만 r,g,b 값은 음수가 없으므로 0이 최소이기도 하다.

다음은 NCC 를 구하는 식이다.

→ n : 픽셀의 개수

 

여튼 이런 식으로 template image 와 유사도가 가장 높은 subimage 를 찾아서 그 부분을 template 과 매칭시키면 물체 인식이 되는 것이다.

물론 이미지상에 물체가 존재하지 않을 경우를 생각해서 유사도가 threshold을 넘어가는 경우에만 인식하도록 하는 것이 좋다.

 


3. Edge detection

 

Edge 란?

1) Edge pixels

영상 내 특정한 픽셀 주변의 밝기 값이 급격하게 변하는 픽셀. 즉, pixel 의 불연속성을 통해 찾아낼 수 있다.

 

2) Edges

엣지 픽셀들의 연속된 집합. 어떤 것들이 이 Edge 를 발생시키나? 다음 그림을 보자.

적혀있는 대로 depth 의 차이 때문에 생기기도 하고,

 

3) 1차원에서 edge 감지하는 방법

: 1차 미분(변화량)을 구한다 ⇒

주변 값과의 차이

즉, 미분을 수행했을 때 크기가 0이 아닌 특정한 값을 가지는 부분을 활용해 edge를 검출할 수 있다.

 

4) 2차원에서 edge 감지하는 방법

: image gradient를 활용한다.

Gradient vector는 해당 픽셀의 변화량이 가장 급격한 방향(rapid change)을 가리킨다. Gradient vector와 Edge direction 은 수직관계에 있다.

여기서 알아두고 갈 것!

Orientation ; 기울기 방향

Magnitude ; edge 의 세기

 

5) Gradient의 방향을 구하면 Edge의 방향을 구할 수 있게 된다.

  • Derivatives with convolution
    이 때 x축 기반의 경사와 y축 기반의 경사 각각으로 edge 를 감지할 수 있다.
  •  
  • Edge detection filter 의 종류
    1. Prewitt
    1. Sobel
    1. Roberts
    My = fspecial('sobel');
    outim = imfilter(double(im), My);
    imagesc(outim);
    colormap gray;

 


◆4. Noise Image's Edge

 

이미지에 다음과 같이 노이즈가 껴있는 경우 Gradient 를 통한 edge 검출이 힘들 수 있다.

이러한 경우 어떻게 edge 를 찾아야 할까? 여러가지 방법이 있다.

 

ⓐ Smooth first

gaussian filter 를 통한 blur 처리로 노이즈를 잠재운 다음에 기울기를 찾을 수 있다.

ⓑ Derivative theorem of convolution

위의 방법에서 약간 순서만 바꾼 듯한 방식이다. step은 다음과 같다.

이게 왜 될까? 오른쪽의 공식이 성립하기 때문이다. 도함수를 따로 빼낸 다음에 계산을 해도 똑같다는 것을 알 수 있다.

두 방법 중에 Gaussian filter(low-pass filter의 일종) 의 미분을 구한 다음 기존의 이미지에 계산해주어 한번에 edge 를 찾는 것이 더 편해보인다. 이 때 Gaussian filter 의 미분 형태는 다음 두가지로 이루어져 있다.

어? 왜 갑자기 두 가지지? 이 질문에 대한 답은 이전 포스트에서 알 수 있다.

이전 포스트에서 Gaussian filter 의 분리가능성에 대해 잠깐 봤었다.

즉 이 성질에 의해 Gaussian 의 기울기 역시 각각 separate 된 놈의 기울기 곱으로 쪼개지기 때문에 위처럼 x축 방향, y축 방향 두 가지로 이루어져 있다고 봐도 무방하다.

 

여튼 이런식의 방법으로 noise 를 제거하면서 edge 를 찾을 수 있다. 하지만 이 때 사용되는 Gaussian filter 의 크기가 클 수록 blur 처리되어 edge 가 검출이 되니 이점만 주의하자. 다만 어느게 정답인 거인지는 그때그때 다르다.

 

Laplacian of Gaussian

도함수의 도함수를 통해 noise 를 감안한 edge 도출 역시 가능하다. 이 때는 다만 급격한 변화가 아닌 0을 통과하는, 즉 부호가 바뀌는 부분이 edge 이다.

또한 라플라시안 역시 x, y 축 기준으로 쪼갤 수 있다. (separate 가능!)

 

 


◆5. Edge Dectector

 

Thresholding

어떻게 pixel 을 솎아내어 최적화 할까? 에 대한 하이퍼파라미터 설정이 필요하다. 이 역시 비전 공학의 특성에 맞게끔 그때그때 융통성 있게 처리해야 한다고 한다.

 

위의 그림을 예시로 들었을 때, higher threshold 에 의해 뽑아내진 edge 가 더 인식하기 좋다는 것을 알 수 있다.

 

ⓐ Canny edge detector

Gaussian 으로 noise를 다룬 후 edge 를 뽑아내는 방법이다. 특이한 점은 Non-maximum suppression 으로 여러개의 edge 가 도출 된 경우 가장 선명한 edge 를 뽑아내는 방식을 사용한다는 점이다.

이 NMS 는 edge 뿐 아니라 detection 할 때에도 사용하니 알아두자.

 

다음 그림들이 Canny edge detector 를 사용한 예시이다. canny는 threshold 를 주어 edge 를 적절히 솎아낼 수 있으며 가우시안 필터를 통해 노이즈 처리 후 edge 를 검출한다는 거 알아두자.

 

Non-maximum suppression

위에서 말했듯이 기울기가 여러 개 있을 때 가장 큰 값을 선택한다는 방식을 이야기한다.

여튼 이 NMS 와 Thresholding 방식으로 edge 를 찾게 되었을 때 분명히 edge 인데 threshold 보다 작아 살아지는 문제가 생길 수 있다. 보통 곡선에서 이 문제가 많이 일어난다.

이 문제를 해결하기 위해 Hysteresis thresholding 방식을 사용한다.

오류를 최소화하기 위해 자신의 값 뿐만 아니라 주변의(공간적 또는 시간적으로) 값을 같이 참조하는 것이 효과적이다.

Hysteresis thresholding은 주변의 분류 결과에 따라서 자신의 분류 결과가 달라질 수 있는 thresholding 기법으로서 Canny edge detector에 사용된 이진화 기법이 가장 대표적인 예이다.

 

Hysteresis thresholding 방식의 과정은 다음과 같다.

  1. high threshold와 low threshold의 두 개의 threshold 값이 존재하며 high threshold 이상의 edginess 를 갖는 픽셀들은 무조건 edge 픽셀로 분류한다.
  1. low와 high 사이에 있으면서 이미 edge로 분류된 픽셀들과 연결되어(인접해) 있으면 edge 픽셀로 분류한다.
  1. 나머지 픽셀들(low threshold 이하이거나 high threshold 이하이면서 edge 픽셀과 연결되어 있지 않은 경우)은 모두 non edge 픽셀로 분류한다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


참조링크

 

'책장 > Computer Vision' 카테고리의 다른 글

[비전6] Corners  (0) 2021.05.03
[비전5] Frequency and Image  (1) 2021.05.03
[비전3] filters  (0) 2021.04.20
[비전2] linear algebra  (0) 2021.04.20

작은 센서를 만들 때, 저녁이라는 시간 때문에 생기는 노이즈와 같은 문제가 생길 수 있다. 즉 이러한 경우 적당한 필터링을 통해 노이즈를 제거해주어야 한다. 이럴 때 쓰이는 필터란 무엇일까에 대해 알아보자.

 


1. Image?

Intensity values (집약정도) 를 사용해 매트릭스 혹은 격자의 형태 로 표현한다.

즉, 이미지는 정수값의 행렬로 표현된다~ 정도만 알아두자.

  • Images as functions : r,g,b 총 세 개의 함수가 내장되어있는 거라고 볼 수 있다.

 


2. Image 특성

이미지는 제한된 수만큼 픽셀을 보유한다.

  • 픽셀 값→ grayscale은 0~255 
  • → 컬러의 RGB 같은 경우, 각 채널 당 0~255 까지 각 1바이트로 총 3바이트 표현 가능하다.

3. Image 변환

수학적인 함수를 이용해서 operator 를 적용하면, 이미지 변환을 얻을 수 있다.

대표적인 operator 로 convolution 이 있으며 거의 노이즈 제거에 이용 된다.

 

 


4. Why Noise?

이미지 획득하는 과정에서 생길 수도 있고, 카메라 자체의 문제로 생길 수도 있고, 인화 단계의 문제에서 생길 수도 있다.

  • Noise type
    1. Salt and pepper noise (백색 잡음) : pixel 단위로 어긋난 형태의 노이즈
    2. Impulse noise : pixel 단위로 어긋난 형태의 노이즈
    3. Gaussian noise : 랜덤 값이 연속적으로 증감한 형태의 노이즈
      정규분포를 가지는 잡음을 이야기한다. 쉽게 말해 일반적인 잡음이며 어느 정도 랜덤하게 자연계에서 쉽게 볼 수 있는 분포를 말한다.이 노이즈를 큰 표준편차의 Gaussian filtering을 해서 해결할 수는 있지만 이미지도 같이 blur 처리 되기도 한다는 점 알아두자. (뒤에서 도움 됨)
      시그마에 따라 노이즈의 정도가 달라지게 된다.

5. 노이즈 제거

가장 그럴싸한 방법은 제일 근처의 값들이 비슷한 pixel 값을 가질 가능성이 크므로, 주변 값을 보는 방법이다.

즉, 현재 픽셀을 주변 픽셀들과 평균을 내서 대치를 하게 되면 조금 더 원래 값에 가까이 가지 않을까? 라는 접근 방법에서 시작된 방법이다. (Mean Filtering)

→ Mean filtering 을 적용하면 노이즈들이 제거되고, 디테일 부분을 블러링으로 사라진다.


6. Filtering Type

: 일단 필터링이란 새로운 이미지를 만드는 것을 이야기 한다.

영상에서의 filtering이란 원하는 성분을 추출하는 과정이라 말할 수 있다.

영상 처리에서 filtering은 크게 spatial filteringfrequency domain filtering이 있다.

spatial filtering은 영상을 그대로 이용하여 원하는 성분을 추출하는 것이며, frequency domain filtering은 영상을 주파수 공간으로 변환하고 주파수 공간에서 처리하는 것이다.

filter 의 종류로는 다음과 같은 것들이 있다.

  • Correlation filter
  • Gaussian filter
  • Averaging filter
  • Linear filter

7. Linear filtering

Correlation, Convolution은 모두 Linear filtering 방법의 종류다. 즉, 영상과 kernel을 어떠한 방식으로 filtering할 것인가 하는 방법들이다. 이 section에서 예시로 사용될 kernel은 3x3으로 아래 그림과 같다.

  • Correlation
    먼저 영상 I의 임의의 점 I(x,y)에 대해 kernel과 correlation 연산을 통해 결과를 생성하는 것을 수식으로 표현하면,
    이러한 과정을 그림으로 쉽게 표현해보면,여기서 "가장 최 상단의 pixel들은 중심점으로 두지 않나?" 라는 의문점이 생길 수 있다. 가장 최 상단(최 하단, 좌측, 우측)에 해당하는 pixel을 filtering하기 위해서는 kernel의 상단에 matching되는 값들이 필요하다.따라서, 검은색 테두리나, 영상의 크기가 작아지는 것을 방지하기 위해 흔히 padding이라는 것을 사용한다. padding은 원 영상 테두리에 특정 값을 채워 넣음으로써 filtering된 영상의 크기를 원 영상의 크기와 동일하게 유지할 수 도 있으며 검은색 테두리를 방지할 수 도 있다. (흔히 사용되는 값은 0으로, zero-padding으로 불린다.)

 

 

    허나 다음과 같이 MATLAB의 옵션만 바꿔주어도 끝부분을 처리해줄 수 있다.

    만약, 최상단(혹은 최하단, 가장 좌측, 우측에 존재하는 pixel들)의 pixel들을 filtering에 포함하지 않는다면, filtering된      결과 영상의 크기는 원래의 영상보다 작아지거나, 주변이 0으로 채워져 원 영상의 크기를 유지한다고 해도 검은색        테두리가 생기는 결과를 받을 수 있다.

    즉, 영상 I의 점 x,y와 kernel의 중심점(Anchor)을 matching하고 주변의 pixel들을 각각 곱중심점에 모두 합      산 하는 연산이다. 해당 점에 대해 연산이 끝났다면 한 칸 이동 (대부분 오른쪽으로 한칸 이동, 가장 우측에 도달했다      면 다시 한 칸 아래 좌측 처음으로 옮겨 영상의 마지막 우측 하단 pixel에 도달할 때 까지 반복한다.)하여 이 filtering      을 반복한다

  • Convolution
    사실, convolution과 correlation 연산은 영상 처리에서 혼용되어 부르기도 한다. 하지만, 그 쓰임새는 다르다. correlation 연산이 kernel과 matching되는 pixel들의 곱셈, 그리고 곱셈 결과들의 총 합이다.
    1. Shift invariance 때문에 → 쉬프트가 된다 해도, convolution 에는 영향이 없다.
    1. linearity 때문에 → 인풋이 변하게 될 때 우리가 예상할 수 있는 방향으로 간다.
  • Convolution이 중요한 이유 : 만약 correlation 연산으로 convolution 연산을 한 것과 동일한 효과를 보려면 convolution kernel로 correlation을 진행하면 된다. correlation은 유사성을 check하기에 적합하며 convolution은 smoothing과 같은 용도로 사용한다고 한다.

 

이러한 filtering 이라는 게 왜 필요한가?

  1. 새로운 유용한 정보를 얻기 위해서 : edge나 contours와 같은 정보를 뽑아내기 위해 사용하기도 한다.
  1. 이미지 enhance 를 위해 : 노이즈 제거를 위한 blurring, enhance(sharp) image를 위해 사용된다.
  2. convolutional nerual networks 의 key operator를 위해 사용하기도 한다.

 


8. Mean filtering

Mean filtering은 주변의 평균으로 pixel 값을 대체하는 방식의 필터링이다. Gaussian 과는 다르게 모든 pixel 들에 같은 가중치를 주어 평균치를 내는 방법이

 

 


9. Gaussian filtering

주변의 픽셀들이 멀리있는 픽셀보다 관련성이 높다, 가까운 픽셀에 더 많은 가중치!

보통 이 Gaussian filter 를 이미지의 edge 와 같은 high-frequency component 를 줄이기 위해 사용하여 low-pass filter 라고도 부른다.

또한 보통 가우시안 필터링을 할 때 다음 그림과 같이 행렬을 쪼개 계산을 해준다.

이런식으로 분리하면 2차원의 행렬을 1차원 두개로 나누게 되어 시간복잡도를 매우 줄일 수 있다.

즉, 결합법칙과 같은 행렬 연산 법칙에 의해 한 차원이 줄어들게 되는 효과를 얻을 수 있다는 것을 알 수 있다.

 


10. Median Filter vs Mean Filter

두 개의 비슷한 필터를 잠깐 비교해보자.

그림을 봤을 때 Median 의 경우 하나의 pixel 값만 보정되었지만 Mean 은 근접한 놈의 평균으로 나타내기 때문에 전체적으로 값이 다 바뀌게 된다.

 

Gaussian vs median filtering

그러면 이 두 개를 비교해보자.

확실히 Salt & pepper noise 는 Median 이 더 성능 좋게 노이즈를 제거해준다. 허나 filter 사이즈가 크면 클 수록 이미지의 해상도 및 데이터가 이상해질 수 있따.

 


11. Sharpening

Sharpening 이란 edge 를 강조해주는 듯한 기법이다.

어떤 필터를 써야 sharpening 효과를 가질 수 있을까?

→ 블러링 이미지의 경우에는 오리지널에서 디테일이 없다는 특징을 이용한다.

수식은 다음과 같다.

 


12. Sharpening revisited

어떻게 Sharpening 을 계산하는 지를 알아두자. 또한 Gaussian 과 비슷한 Laplacian 에 대해서도 알아두자. 다음 그림처럼 계산 후 계수 식을 묶어 처리하는 방법이다.

 


참고링크

 

'책장 > Computer Vision' 카테고리의 다른 글

[비전5] Frequency and Image  (1) 2021.05.03
[비전4] Edge  (0) 2021.04.20
[비전2] linear algebra  (0) 2021.04.20
[비전1] Introduction  (0) 2021.04.19

비전에 대해 알아보기 전에 기본적인 선형대수 개념을 매우 간단하게! 잡고 넘어가고자 한다.

 

 

 

vector

: 방향과 크기(Magnitude) 를 가지는 기본적인 기하학 객체 개념으로 잡고 넘어가면 편할 듯 싶다.

 


vector operations

  • dot product(inner product): 내적으로 벡터를 곱한다, 투영한다 라는 뜻의 연산이다.
  • outer product: 외적으로 이는 왼손좌표계(DirectX), 오른손좌표계(OpenGL) 에 따라 값이 다르게 나올 수 있는데 기본적으로 방향에 따른 법선 벡터를 계산하는 연산이라고 생각하면 될 듯 싶다.

 


vector norm

: 선형대수학에서 놈은 벡터의 크기(magnitude) 또는 길이(length)를 측정하는 방법을 의미한다. 1-norm 은 벡터의 크기를 나타내는 것이고, 2-norm 은 벡터의 길이를 나타내는 것이구나~ 라는 정도만 알고 넘어가자

 


linear dependency

정의를 바로 보면 다음과 같다.

만약에 적어도 하나의 벡터가 다른 벡터들의 선형 결합에 의해서 정의될 수 있다면, 이 벡터 집합은 선형적으로 의존(Linearly dependent)한다고 한다.

 


basis

선형대수학에서, 어떤 벡터 공간의 기저(basis)는 그 벡터 공간을 선형생성하는 선형독립인 벡터들이다. 달리 말해, 벡터 공간의 임의의 벡터에게 선형결합으로서 유일한 표현을 부여하는 벡터들이다.

서로 선형 독립인 babis 는 다음과 같은 성질을 가지고 있다.

좌표공간 변경 시 이 기저를 바꾸는 거구나~ 정도만? 이해하고 넘어가고 이미지에서는 다음과 같이 기저가 사용될 수도 있구나~ 정도만 이해하고 있자.

 


matrix

말 그대로 행렬이다. 대각행력, 비대각행렬 등이 있다. 이거는 쉬우니 패스

 


matrix operation

행렬의 합, 곱, 뺄샘은 쉬우니 넘어가고 Transpose 정도만 이해하자

 


rank of matrix

행렬의 Rank 라는 것은 이 행렬의 열들로 생성될 수 있는 벡터 공간의 차원을 의미한다고 한다.

결국 차원이라고 하면 벡터 공간 상에서 기저(Basis)의 개수에 의해서 결정이 되고, 이것은 행렬의 행이라고 봐도 되겠다

행렬의 rank 에 대해서는 다음과 같은 성질이 통용된다.

 


matrix inversion

역행렬을 의미한다. 행렬의 determinant 값이 0이 아니어야 역행렬이 존재한다고 할 수 있다.

보통 역행렬이 존재하는 행렬을 non-singular 하다고 하며, 그 반대로 역행렬이 존재하지 않는 행렬을 singular 하다고 한다.

 

  • determinant : 이거 계산하는 거는 일단 건너 뛰고 다음과 같은 성질을 가지고 있다는 정도만 알아두자.

 


eigen-decomposition

행렬의 고유값과 고유벡터라는 개념은 중요한 반면, 직관적으로 와닿지 않는 개념이다. 때문에 최대한 직관적으로 이해해보자.

행렬 A를 선형변환으로 봤을 때, 선형변환 A에 의한 변환 결과가 자기 자신의 상수배가 되는 0이 아닌 벡터를 고유벡터(eigenvector)라 하고 이 상수배 값을 고유값(eigenvalue)라 한다.

즉, 항등원과 비슷한 개념이 Eigenvector 이고, 이 항등원의 상수배가 eigenvalue 라고 이해해두자.

 

  • eigen decomposition

고유값, 고유벡터는 정방행렬의 대각화와 밀접한 관련이 있다 (eigen decomposition은 정방행렬에 대해서만 가능함)

먼저 대각행렬과의 행렬곱에 대해 살펴보면, 대각행렬을 뒤에 곱하면 행렬의 열벡터들이 대각원소의 크기만큼 상수배가 된다(앞에 곱하면 행벡터들이 상수배가 된다). 예를 들어, 3 x 3 행렬의 경우를 보면 다음과 같다.

행렬 A의 고유값, 고유벡터들을 λi, vi, i = 1, 2, ..., n이라 하자.

이제 식를 한꺼번에 표현하여 정리하면

가 성립함을 알 수 있다. 이렇듯 대각화에 eigenvalue와 eigenvector를 사용할 수 있구나~ 정도만을 알고 넘어가자.

 


probability

확률은 진짜 많은 곳에서 사용된다. DL 분야에서도 매우 중요하고, 이미지 분야에서도 매우매우 중요하다.

다음의 분야에서 모두 확률을 사용한다니 거의 다 사용하는 거라고 봐도 될 것 같다.

 


conditional probability

확률 과목에서 배운 조건부 확률이다. 이는 고등 과정의 수학에서도 배우는 놈이니 수식만 보고 넘어가자.

 


chain rule

은근 확률에서 많이 쓰이는 체인 룰이다. 여러개의 확률의 곱으로 쪼개서 생각한다는 간단한 이론이자 대단한 이론이다.

 


bayes' Therorem

조건부 확률에 대한 정리이다. 그냥 확률을 다음과 같이 쪼개서 생각하는 구나~ 정도만을 이해하고 넘어가자.

 


gasussian distribution

통계적으로 정규화 할 때 참 많이 사용하는 정규분포이다.

다음과 같은 수식과 그래프로 데이터를 정규화시키는 과정이다. 정규분포에서는 표준편차(시그마)와 분산에 대한 이해를 잡고 넘어가는 정도면 충분할 거라 생각한다.

 


정리

  • 간단한 선형대수 이론 정리

 

'책장 > Computer Vision' 카테고리의 다른 글

[비전5] Frequency and Image  (1) 2021.05.03
[비전4] Edge  (0) 2021.04.20
[비전3] filters  (0) 2021.04.20
[비전1] Introduction  (0) 2021.04.19

컴퓨터 비젼 공학은 '미군'에서 군사목적으로 도입되었다가 현재는 많은 곳에서 사용되고 있다.

사람 얼굴인식, AR, 3D 모델링, OCR, Digital puppetry, Recognition, Self-driving cars등등 여러 곳에서 사용하고 있다.

 

이러한 비젼 공학의 제일 기본은 image pixel 로 부터 의미있는 데이터를 추출해내는 과정이다.

즉, 중간에 어떤 과정을 거치던 적절한 알고리즘을 통하여 pixel→output 을 해내는게 비젼 공학의 목표라고 할 수 있다.

 

그러면 이 이미지로부터 뽑아낼 수 있는 가장 기본적인 정보가 무엇일까?

  1. Semantic Information : 이미지에 대한 환경적 정보를 뽑아낼 수 있다.
  1. Geometric Information : 이미지의 거리, depth 등에 대한 기하 정보를 뽑아낼 수 있다.

 

여튼 이러한 로직을 통해 많은 회사들이 존재하고 있다고 해서, 비전 공학이 쉽다고 보면 안된다.

특히, 100% 의 정확도를 가진 output 을 뽑아내는 것은 매우매우 힘들다. 왜냐? 이미지를 다루는 데에 있어서 default로 생기는 몇가지 문제들이 있기 때문이다.

 

  1. Viewpoint variation : 첫 번째로 viewpoint variation 문제이다.
    같은 물체임에도 보이는 각도에 따라서 다른 pixel 값을 가지게 된다. 이를 해결하기 위해서는 pixel 데이터 뿐 아니라 각도 데이터까지 포함하여 계산을 해야 하는데 요즘은 big-data 학습을 통해 이 문제를 어느 정도 해결할 수 있다고 한다.
  1. illumination : 두 번째 문제로 illumination 문제가 있다. 이미지가 명암으로부터 받는 영향을 뜻한다.
    밝고 어두운 정도에 따라 같은 이미지인데도 pixel 값이 달라져서 output 이 이상해질 수 있다.
  1. scale : 세 번째 문제로 scale 문제가 있다.
    이미지의 scale 을 맞추는 거에 대한 어려움이 있을 수 있다.
  1. deformation : 네 번째 문제로 모양이 다른 경우에 이미지를 다루는 데에 문제가 생길 수 있다.
    그림의 말 발굽을 보면 그때그때 모양이 다르기 때문에 같은 물체인지 확인하기 힘들 수 있다.
  2.  
  1. object intra-class variation : 같은 물체인데 디자인에 따라 다르게 생겨 확인하기 힘들 수 있는 문제이다. 다음 그림을 보면 바로 어떤 문제인지 알아챌 수 있다.
  1. Occlusion, clutter : 6번째 문제이다. 특이하게 생긴 이미지의 경우 인식에 문제가 생길 수 있다. 마치 머신러닝의 outlier 라고 생각하면 편할 듯하다.
  1. Motion : 7번째 문제이다. 물체가 움직이는 동안에 이미지 pixel 데이터를 다루기가 힘들다. 다음 그림을 보면 어떤 경우인지 바로 확인 가능하다.
  1. Ambiguity : 인식의 모호함에 대한 문제가 있을 수 있다.
    호박의 경우 원근감으로 매우 커보이는 문제가 생길 수 있고, 오른쪽의 나비의 경우 착시효과떄문에 나비처럼 보이는 데 실제로는 단지 땅바닥의 그림이라는 문제가 있을 수 있다.
  2. 또한 blur 처리 된 경우 역시 인식이 애매할 수 있는데 이 경우에는 일전에 말한 이미지의 환경 정보, semantic information 을 동원하여 어떤 물체인지, 같은 물체인지 확인할 수도 있다.
  1. Semantic context : 인식에 있어 상황 맥락이 필요한 경우가 있다. 바로 위에서 해결책으로 잠깐 언급한 방식이다.

즉 이러한 문제들 때문에 비전 공학은 하는 사람마다 다른 방법으로 연구를 한다. 따라서 사용하는 키워드, 정석 문제 풀이 같은 것들이 타 공학에 비해 애매하기 때문에 말만 잘한다면 어떤 방법을 사용해도 상관없는 학문이다. 즉, 자신이 보기에 어? 이거 답에 도움이 될거같은데? 하는 단서들을 다 끌어와 정확도만 좋다면 장땡인 듯하다.

 

참고할 수 있는 단서들

  • Depth cues
    • Linear perspective : range information, depth information
    • Parallax : 왼눈, 오른 눈 에서 보는 것과 같이 미세하게 다를 수 있다.
  • Shape cues
    • Texture gradient
    • Shading
  • Grouping cues
    • Similarity : 색상, 텍스쳐, 등등 유사도
    • Common fate

 

 


간단 정리

  • 컴퓨터 비젼에는 수많은 어플리케이션들이 있다.
  • 비젼 문제를 풀기 위해서는 고려해야할 많은 문제점과 단서들이 있다.

 

'책장 > Computer Vision' 카테고리의 다른 글

[비전5] Frequency and Image  (1) 2021.05.03
[비전4] Edge  (0) 2021.04.20
[비전3] filters  (0) 2021.04.20
[비전2] linear algebra  (0) 2021.04.20