- 밝기 값을 결정짓는 요소들 1. Source : 조명 (known) 2. n: 해당 지점의 표면 방향 (Unknown) 3. Reflectance : 해당 지점의 표면이 빛나는 성질 (known)
Photometric Streo
- 이미지 intensity로부터 물체의 3D 형태를 추정하는 문제를 푸는 알고리즘 => 여러장을 써서 푸는 task => Depth Z를 구한다.
Surface Gradient and Normal
p, q의 정의에 대해서 정확히 알고 있자.
Gradient Space
Z=1 평면 전체 => 밑으로 향하는 방향성은 고려 X (카메라의 반대 방향)
Reflectance Map R(p,q)
가정) object에 떨어지는 모든 빛들은 동일한 방향으로 떨어진다. / reflect 성질도 다 똑같다. => 이 방향일 때 밝기 값이 얼마일 것이다 미리 계산이 가능하다.
- 방향성 p,q를 알면 밝기 값이 얼마로 빛날 것이다라고 예측해 놓은 map
=> p,q를 알면 얼마로 빛날 것이다 미리 구할 수 있다.
cf) Photometrix stero는 Reflectance map을 반대로 추정하고 싶은 것 => 밝기 값을 알고 있는데 p,q를 알고 싶은 것
# Lambertian Surface (= Diffuse Surface)
균일하게 거칠거칠한 표면 ex) 찰흙
=> 가장 간단한 경우, Reflectacne가 어떤 Viewing Direction에서 보더라도 동일한 반사 성질을 가지는 표면
Reflectance Map : Lambertian Surface
- Lambertian Surface일 때 Image Intensity는?
Q) 단일 이미지로 표면의 기울기 (p,q)를 구할 수 있을까?
A) NO!
=> 각 픽셀의 밝기 I(x,y)는 Iso-brightness contour 상에 존재한다. 답이 너무 많고, 단일 해가 아니다.
==> 여러장을 쓰자
Photometric Stero
- 여러 장의 영상을 찍는데 찍을 때마다 lighting direction을 다르게찍자 => 이를 통해 surface orientation의 모호성 해결 (source만 달라진다 / s1,s2,s3)
[Step] 1. light source direction을 알고 있어야 한다. 이를 바꿔가면 k장을 찍는다. 2. BRDF를 알고 있고 이를 가지고 어떤 입사각과 반사각에서 얼마나 빛나는지 Reflectance map(k개)을 만들어야 한다. 3. 모든 pixel에 대해서 p,q를 찾는다. k개의 curve가 교차하는 지점을 찾고 이 위치가 (x,y)에서의 surface normal => BRDF가 복잡할 수록 최소한 필요한 k개가 달라진다.
Photometrix Stero : Lambertian Case
3개의 light source에서 이미지 밝기 측정
Q) 위 값이 언제 구해지지 않는가?
A) S가 invertible 하지 않으면 (S is not invertible) = S가 역행렬이 존재하지 않으면 해를 구할 수 없다.
== 3개의 방향이 서로 linearly independent => invertible 풀 수 있다.
== 하나를 나머지 2개로 표햔 가능? => 풀리지 않는다.
- 3개의 light source 방향 s1,s2,s3가 서로 linearly independent 해야한다.
- 만약 s3 = αs1 + βs2처럼 표현 가능(세 벡터가 같은 평면에 존재)하면 해를 구할 수 없다.
# 필요한 최소 개수보다 많은 광원을 사용하는 경우
더 좋은 결과는 얻기 위해 3개보다 많은 light source(K>3)를 사용
- S가 정방 행렬이 아니어서 역행렬을 구할 수 없다.
- Lesat Squared Estimation을 사용하여 역행렬을 구하여 최적의 N을 구한다.
# Lambertian Surface일 때 (Effective point source)
- 두 개의 light source가 있을 경우 두 light source의 합으로
- 여러개의 light source가 있는 경우에도 벡터의 합으로 하나의 Effective source처럼 modeling
Calibration Based Photometric Stereo
크기, 모양, 반사율이 같은 Calibration object를 사용한다. - 같이 찍은 두 object(light source direction은 같다.) / 구(sphere)는 어느 위치가 어떤 표면 벡터를 가지는지 알 수 있다. => Reflectance Map 역할을 한다. => Scene의 표면 벡터들을 손쉽게 구할 수 있다.
Orientation Consistency : 동일한 표면 법선(surface normal)을 가지는 지점은 조명이 달라도 동일한 밝기 값을 가진다. => 같은 방향성을 가지면 밝기 값이 같을 것이다.
Calibration Sphere : Reflectance map을 구하기 위한 object => 보통 구하고자 하는 scence과 같은 reflectance를 가지는 물체를 사용
[Step]
1. Step 1: 서로 다른 K개의 light source 조건에서 K장의 이미지를 촬영 => 구의 각 점은 K개의 밝기 값을 가진다.
2. Step 2: 구의 크기를 이용해 각 점의 surface normal (p,q,1)을 계산한다.
4. Step 4: scene object를 동일한 K개의 light source 하에 촬영
5. Step 5: lookup table을 통해 각 픽셀의 (p, q) 값 추정 (l1, l2, ...lk) => (p,q)
=> 구(Sphere)는 Calibration을 위한 기준 객체로 사용되며, Reflection map을 구성하는데 이용된다.
=> 구에서 얻은 정보로 Scene 전체의 Surface Normal을 추정할 수 있다.
Shape From Surface Normals
Gradient Map(Normal Map)으로부터 3D shape(깊이정보)를 복원하는 과정
표면의 기울기 정보 => 적분 => 깊이 맵 복원
[Differentiation] * Gradient map : 표면의 기울기 ( p(x,y), q(x,y) ) 여기서 p와 q는 아래와 같다.
* Surface Normal은 보통 (p,q,1)의 방향을 나타낸다.
[Integration] - Depth Map을 복원하는 과정 (Z(x,y)를 구하는 것) => 표면 형상 복원
- (x0,y0)는 기준점이며, Z(x0,y0)는 보통 0으로 둔다.
상대적인 깊이를 알 수 있다. 단점) 다 부드럽게 이어져야 표면을 구할 수 있다.-> 불연속 있으면 Integration할 수 없다. 하더라도 틀리게 복원이 된다
# Integration 방법들은 아래와 같다.
Naive Algorithm for Estimating Shape
Integration 방법으로 Naive하게 경로를 따라 적분한다.
1. 기준점 (0,0)의 깊이를 0으로 설정한 뒤 2. 먼저 세로 방향으로 q를 이용해 depth 누적 3. 다음으로 가로 방향으로 p를 사용해 depth 누적
Noise Sensitivity of Computed Shape
- 좌측그림 : 실제 표면과 노이즈가 있는 표면 법선 - 우측그림 : 경로에 따라 적분 결과가 다르며 모양도 달라진다. => surface normal이 noisy하게 구해졌기 때문에 중간 쯤가면 삐뚤빼뚤해진다.
<solution> ==> 다양한 경로로 적분해 여러 개의 depth map을 만든 뒤 평균을 계산
Estimating Shape Using Least Squares
- 목적) surface normal로부터 Z를 추정하겠다. - Error term을 설정해서 이를 최소화하는 방식
=> D를 최소화하는 z(x,y)를 찾자
# Frankot-Chellappa Algorithm
완벽히 이해 X / 간단히 컨셉만
- 위를 최적화하는 알고리즘 / fourier transform을 활용한다.
- 이렇게 하면 Error term이 간단해진다.
Q) 한 장의 이미지로부터 shape을 구하는 것은 정말 안되는 것일까?
A) Shape from Shading!
Shape from Shading
- 한 장 가지고 한 장의 밝기 값으로부터 shape을 알아내는 방법 => 한 장으로 shape from shading을 하려면 여러가지 Assumption과 Constraint를 줘서 해결할 수 있다.
[Stereographic Projection] : fg Space
pq Space
- 기존의 pq Space는 Θ가 작은 법선벡터(위를 보는)는 p,q로 표현하는데 문제가 없지만
n이 누워버리면 p,q가 엄청 커지는 문제가 발생한다.
=> Θ가 커질수록 표현이 어럽다.
fg Space
- pq Space의 발전형이다.
- f와 g 방향, Z=1 평면상에 있는 것도 동일하다.
- Z=1(0,0,-1)인 점에서 n의 끝을 지나도록 직선을 긋는다.
=> 이 직선을 연장해서 Z=1과 만나는 점을 (f,g)로 정의한다.
Q) 위와 같이 fg Space를 표현하는 어떤 장점이 있나?
A) n이 극단적으로 누워있으면 p,q는 plane infinity로 갔었다. (pq Space)
f,g 는 항상 반지름이 2인 원안에 떨어지게 된다.
Reflectance Map
- 표면 법선 방향이 f,g일 때, source direction s에 따라pixel 밝기 I를 표현하는 함수
- surface normal에서 밝기 변환 함수의 역할을 한다.
Occluding Boundaries
- Viewing Direction과 n이 항상 직각
- 물체의 edge 방향(접선 방향)과 n이 항상 직각
Image Irradiance Constraint
컨셉만 본다.
- 내가 관측하는 밝기 값이 내가 구한 (f,g)의 reflectnace와 같아야 한다. => 밝기 값이 내가 관측한 값과 추정한 값이 같아야 한다. => 이를 Erro term으로 둔다.
Smoothness Constraint
컨셉만 본다.
- object가 가지는 surface가 smooth할 것이다라는 가정 => f와 g가 pixel 값마다 있는데 이게 부드럽게 변할 것이다. Error term이 크지 않도록 정의
다시 돌아와서..
Shape from Shading
- 모든 image point에 내해서 Surface Gradient (f,g)를 찾고 이 함수를 최소화해야 한다.
- Surface gradient (f,g)에 관한 Occluding boundary와 constraint를 알고 있다. 최적화하는 것 정확히 알 필요 X