다음 사진과 같이 같은 배경을 찍은 서로 다른 두 사진이 있을 때 각각의 일치하는 부분을 매칭하는 과정을 설명하고 있다.
Image Alignment
: 같은 scene을 찍고 있지만, 다른 condition에서 찍은 사진들을 겹치는 과정
일치하는 부분을 매칭시키면 두 사진을 다음과 같이 overlaying할 수 있다.
해당되는 지점 + 카메라의 위치를 고려하면 3D로 해당 위치를 계산할 수 있을 것이다.
이 과정을 통하여 2D사진 여러개로 3D를 구현할 수 있는 것이겠지.......?
Can we localize a local image patch in another image?
이제 여기서 의문이 생기지.
그러면 도대체 어떻게 matching을 하는 것인가?
한 사진을 다른 이미지에서 어떻게 위치를 찾을 수 있는 것인가?
위의 사진과 같이 헬기를 타고 같은 scene을 다른 condition에서 찍은 두 장의 사진을 보자.
두 사진이 찍힌 시간 사이에는 몇초 또는 몇분이 있을 것이다.
뒤에서 말하는
cross correlation
을 이용하면 두 이미지가 correspond하는 부분을 찾을 수 있다!
Template Matching
: larger image 안에서 small template image의 위치를 찾는 것
: 일반적으로 size of template << size of image
위치는 어떻게 표현할까?
다음과 같이
큰 image의좌표축 i,j
와
template의좌표축 p,q
를 이용하여 나타낸다.
이때, u와 v는 두 좌표축의 위치가 얼마나 떨어져 있는지 알려주겠지.
u와 v의 값을 아는 것이 중요하고 이는
offset
이라고 부름
다시 한번 간단하게 정리하면,
imag 와 template 가 주어지고, 과 사이의 offset인 을 찾기 !
pixel intensity
: 특정 픽셀의 밝은 정도를 의미함
:예를 들어, grayscale에서 흰색이면 intensity가 255이고 검은색이면 intensity가 0이다.
이때, 원래 unknown들은 로 총 4개지만,
우리는 일단 는 고정하고 만 생각하는 것으로
우리의 목표:
해당하는 intensity value의 값의 similarity가 최대가 되게 하는 을 찾는 것 !
이제 질문이 생기겠지
그러면 similarity를 어떻게 측정하는가 ..........?
기존이 similarity 측정 방법들
다음과 같은 방법을 이용했을 때는 값이 작을수록 더 similar하다라고 얘기할 수 있겠지!
그러나 문제 발생,
다음과 같은 식은 brightness와 contrast에 의해 영향을 받기 때문에 (radiometric transformation) 적합한 방법이 될 수 없다 !
그래서 제시되는 것이 뒤에 나오는
cross correlation
방법 !
SSD나 SAD같은 기존 측정 방법들의 문제점을 해결한 것이니까
당연히 CC는 brightness와 contrast에 강한 장점이 있다.
가장 좋은 offset의 값인 은
가능한 모든 location을 조사해봤을 때
cross correlation coefficient가 가장 큰 경우일 것이다.
그렇다면 왜 brightness와 contrast의 영향을 받지 않을까?
: 각각의 variation을 사용하여 CC를 구하고 있으므로
brightness와 contrast가 발생하여 mean이 증가하더라도
모든 pixel의 값이 동일한 값으로 증가감소하기 때문에
variation은 그대로기 때문이다!
왜 라고 표현할까?
: 우리는 전체의 image에 대한 분산이 궁금한 것이 아니라
template과 겹치는 부분의 분산이 궁금한 것이기 때문이다 !
그렇다면
: 의 크기는 template의 크기와 같은 것이니까 따로 변수가 필요없지
M
: template 안에 있는 픽셀의 개수
그림으로 간단히 표현하면 다음과 같은 상황
구할 때랑 완벽하게 동일한 방법이지
공분산 개념과 동일하기 때문에 어렵지 않다. 값이 크면 클수록 비슷한 것이고 작으면 작을수록 다른 것이겠지
NCC 좋은 방법이긴 한데 ... 꽤나 구해야될게 많아서 힘든 작업이다.
(STEP1)
모든 offset 에 대하여 를 구하기
(STEP2
가 최대가 되는 offset 을 찾아내기
모든 픽셀에 대하여 작업할 경우 너무 exhaustive하므로 제안된 방법이다.
original image의 모든 location을 돌면서 값을 구할경우 complexity가 너무 증가하기 때문에 downscaled size에서 시작하여 original size로 가는 방법을 이용
A,B,C,D
: image a,b,c,d
: template
비행기에서 사진을 찍다보면 정확히 한 pixel 이동해서 다음 사진을 찍는 것은 거의 불가능하고 1.8pixel 또는 2.9pixel 등 소수점 단위가 나올 것이다.
⇒ 이런 경우를 다루기 위해 제안되었음 (정수가 아닌 소수점까지!)
- 우리가 integer값들로 얻게 된 검정색 점
- 이들을 연결한 continuous한 함수를 예측
- 이 함수의 함숫값들 중 가장 큰 NCC값을 갖는 그때의 u와 v (optimal solution)를 구함
- 초기위치 주변에서 값을 통하여 locally smooth surface 찾기
- 초기위치는 아마 NCC값이 높은 곳이 기준이 되겠지?
- local maximum 찾기
전혀 어렵지 않은 과정이지.
당연히 NCC과정에서 최적의 estimate값을 시작점으로 두고
그 주변에서 2차 함수를 찾고
1차 미분값 = 기울기가 0인 곳이 바로 극대가 될 것이니
occlusion(가림현상)