- 원래 맺히는 곳과 image plane 사이의 거리가 커지면 커질수록 blur 사이즈도 커진다.
[Image Defocus & Aperture Size]
- lens는 그대로 두고 (focal length 고정) 빛이 들어올 수 있는 구경 사이즈를 줄인다.
=> D가 작아지면 Blur circle size 지름도 작아진다.
PSF(Point Spread Function)
- 점을 찍어놓고 점이 얼마나 어떻게 퍼지나를 함수로 만든 것 - 카메라 시스템이 impulse에 대해 어떻게 반응하는지를 나타낸다. 중앙에 점이 있고, 그 점이 반지름 b/2 내에서 균등하게 퍼지는 모델
# pillbox : 가운데 점이 하나 있고 그 점을 퍼뜨리는 데 지름 b만큼 균등하게 퍼뜨리는 것(기둥 형태 - 지름 b)
- PSF는 별 이야기가 없으면 Gaussian으로 modeling 하는 것이 일반적이다.
=> blur의 반지름을 σ(=b/2)로 설정
Defocus as Convolution / in Fourier Domain
- Defocus(초점이 맞지 않은 현상)는 Convolution으로 표현될 수 있다. - Defocus는 linear(선형적) and shift invariant(변위 불변)하므로 Conv 형태로 표현 가능
Fourier transform으로 주파수 Domain으로 옮겨준다. => image domain에서 Convolution 계산이 곱셈으로 변한다.
=> Defocus is a low-pass filter (저주파 영역 살리고 고주파 영역 죽인다).
Depth from Focus
- Focus가 맞는 영역의 사진을 여러장을 찍어서 Depth를 구해보자. (focus를 다르게 해서 여러장 찍는다.) - focal length는 유지한 채 image plane을 이동하며 여러장을 찍는다.
- 각 small image patch마다 best focused를 찾는다.
- 위의 Gaussian Lens Law를 사용하여 s와 f를 알면 o값을 구할 수 있다.
EX) 같은 위치에서 4장에 대해서 Focus Measure를 구해본다.
- 이런 방식으로 이미지 복원을 해보면 아래과 같이 나온다. => 무늬가 좀 있어야 한다. (없다면 focus measure 값이 거의 안나온다.) (High frequency 성분이 어느 정도 있어야 한다.)
# Focus Measure
- 컴퓨터 비전으로 어떻게 focus가 잘 맞았냐를 측정 => 일반적으로 Laplacian을 변형하여 사용
Gaussian Interpolation
- Focus Measure Curve의 peak는 Gaussian과 유사하다. EX)
=> Gaussian의 주변 값들 평균을 이용
[Step] 수식은 중요하지 않다. 이런 단계를 거친다 정도만
- 결과적으로 Gaussian Interpolation을 이용하면 아래와 같이 계단보단 부드러운 형태로 복원이 가능하다.
Summary : Depth from Focus
[장점] 아주 미세하게 조정만 할 수 있다면 쉽고 빠르게 Depth를 구할 수 있다. [단점] 여러장을 찍어야 한다. (8~10장은 있어야 한다.)
Depth from Defocus
- 한장에서 blur된 정도를 추정할 수 있다면(PSF를 구할 수 있다면) - 한장으로도 Depth를 구할 수 있을 것이다. (blur의 size를추정하여 Depth를 구하겠다.)
i : 상이 맞는 곳까지의 거리 o : object까지의 거리 (알고 싶은 값)
EX)
- 주어진 것) blur된 image patch 하나 => Equation 하나인데 Unknown이 2개(안풀린다.)
- focus(혹은 image plane - s)를 다르게 2장을 찍으면 => Equation 2개인데 Unknown 3개(수식 하나 추가하면 풀린다!)
세번째 수식을 구해보면
# Thrid Equation
- 같은 Scene을 blur size를 다르게 하여 2번 찍는다. (D로 조절)
=> 2장 찍는다. (1장 가지고는 못한다.)
# Naive DFD Algorithm 두 이미지의 Fourier 변환을 사용해서 PSF size를 추정하겠다.
- Noise 많이 껴있으면 잘 안되더라 => Error를 설계해서 이를 낮추는 최적화 방식 물체의 거리 O (Depth) 계산
[Method1: D(조리개)크기 변경] => D를 다르게 하여 blur 크기 조절 [Method2 : Sensor 위치 이동] => image sensor s를 앞뒤로 이동시켜 초점을 일부터 blur하게 만든다.
* 실시간으로 복원하고 싶다. => 동시에 2장을 찍는다.
Active Illumination Methods
조명을 조절해가며 Depth를 알아낸다.
Point Based Range Finding
=> Camera ray와 Light ray가 정확히 어디서 만나는지 구하면 Scene Point를 구할 수 있다.
Detecting the Illuminated Point
=> 문제는 모든 점에 대해서 이를 다 해줘야 한다.
이런 문제를 해결하기 위해 아래 방식이 고안되었다.
Light Stripe Based Range Finding
=> 점으로 쏘지 말고 직선으로 쏘자!
그럼 한번에 한줄씩 말고 여러줄씩 찍으면?
대응점을 찾을때 문제점이 발생 => 이는 Binary code를 심어서 해결!
Binary Coded Structured Light
- 몇번째 선에 해당하는 지를 code를 짠 후 3장을 찍을 때 패턴에 맞춰서 껐다 킨다.
Q) 이를 하는 이유는? A) multiple stripe를 하기 위해서 몇번 째 줄이 몇번 째 줄에 대응되는지를 모른다. 이를 쉽게 알 수 있도록 stripe에 번호를 주고 번호를 Binary로 Coding하자
[장점] 무늬가 없어도 된다. [단점] Light Blending : 0과 1이 바뀌는 구간에서 번지는 문제가 발생한다. ==> 이는 바뀌는 구간을 Translation하여 해당 구간을 줄여준다.
K-ary Methods
Ternary: 반쯤 켜놓는는 것을 둔다. K-ary : 밝기 값을 k level로 하겠다. => 이미지를 더 적게 찍어도 된다. / 같은 이미지로 더 많은 Stripe 복원 가능하다.
# Color Coding with R, G, B
=> k-ary로 하면 휠씬 더 적은 이미지로 똑같은 stripe를 복원 가능하다.
* Color Coding 시 문제점
배경도 color 다 보니깐 색이 섞여서 이를 구분하기 힘들 수 있다.
위 문제점을 해결하는 방법으로 아래 방법들이 있다.
Intensity Ratio Method
- 모든 pixel에 대해서 밝기 값을 다르게 주겠다. Finding Correspondnece
적당히 어두운 것으로 background를 하나 찍는다. 조명을 조정하여 한쪽은 어둡게, 한쪽은 밝게 찍는다. (실제 실현하기가 어렵다.) 비율에 맞게 몇번째 선에 해당하는 지 구할 수 있다. (2장으로 구할 수 있다.)
Phase Shift Method
- 조명에 cos 세기를 준다. Finding Correspondence
밝기 패턴을 가장자리는 밝게, 가운데는 어둡게 phase를 바꿔가며 3장을 찍어야 한다. (겹치는 영역 없도록 phase 다르게 3장 찍어야 한다.2) 내개 찍은 값 I1,2,3 => 이 값이 phase shift 상에서 어느 위치에 해당하는지 알면 Xp를 구할 수 있다.
Summary : Structured Light for Depth Recovery (★★★) (작년 기출)