happy_quokka.log
로그인
happy_quokka.log
로그인
[Perception Application] 3. Distortion
happy_quokka
·
2024년 1월 10일
팔로우
0
Perception
0
자율주행 Perception
목록 보기
14/19
Distortion
실제 카메라는 pinhole camera model에서의 작은 구멍이 아닌 렌즈로 빛을 모은다
완벽한 pinhole 카메라는 빛이 하나의 점을 통과하지만 렌즈는 크기를 가지는 물체이기 때문에 빛이 굴절된다
빛의 굴절은 이미지 센서에 보이는 이미지를 왜곡한다
이유 1. 렌즈의 특성
이유 2. 렌즈와 이미지 센서의 관계
카메라 렌즈
렌즈의 형상이 곡률을 가지는 구면 형태이기 때문에 왜곡이 발생한다
따라서 이미지 중심부(주점)에서 멀어질수록 표현의 비율이 달라지기 때문에 발생한다
PD
Predicted Distance
피사체를 찍었을 때 예상되는 위치
AD
Actual Distance
실제로 이미지 상이 맺힌 위치
D
왜곡 정도
D
(
%
)
=
A
D
−
P
D
P
D
×
100
%
D(\%) = \frac{AD-PD}{PD} \times 100\%
D
(
%
)
=
P
D
A
D
−
P
D
×
1
0
0
%
Distortion의 종류
방사 왜곡, 접선 왜곡
수학적 모델에 의해 보정이 가능하고 왜곡의 영향을 제거할 수 있다
광학의 원리와 카메라에서 발생하는 왜곡
원근 왜곡
3차원 공간이 2차원 공간으로 투영되면서 발생하는 왜곡
방사 왜곡
radial distortion
방사 왜곡은 이미지의 중심으로부터 멀어질수록 왜곡의 정도가 심해진다
방사 왜곡은 대표적으로 2가지 형태로 표현된다
Barrel distortion
중심부가 외각부보다
큰
형태로 발생
가운데가 볼록한 형태
Pincushion distortion
중심부가 외각부보다
작은
형태로 발생
안쪽으로 모이는 형태
no distortion
positive radial distortion(Barrel distortion)
negative radial distortion(Pincushion distortion)
접선 왜곡
tangential distortion
접선 왜곡은 카메라 제조 공정에서 발생하는 왜곡이다
렌즈와 이미지 센서와의 수평이 맞지 않은 경우 발생한다
요즘에는 접선 왜곡이 거의 발생하지 않는다
타원 형태로 발생한다
원근 왜곡
perspective distortion
왜곡으로 인해 원근감이 손실되고 이는 복구할 방법이 없다
이미지를 촬영하는 환경에 따라 다양한 왜곡이 있다
카메라 투영의 기하학적 정의
3차원 공간에 존재하는
P
W
P_W
P
W
는 projection line(파란색 점선)에 따라 2차원 이미지에 점(빨간색 점)으로 투영되기 때문에 같은 line에 존재하는 무수히 많은 점들(주황색 점)이 모두 동일한 위치에 표현된다
따라서 부가적인 정보, 조건 없이 이미지에서 출력된 정보만으로 3차원 공간 정보로 복원하는 것은 불가능하다
여기서 부가적인 정보는 아래의 3가지를 의미한다
사물의 실제 크기
사물과 주변의 관계
추정이 가능한 기하학적 구조
손실된 원근감 복구 방법
다수의 카메라를 사용하는 방법
2개 이상의 카메라로 동일한 시점에 촬영한 각 1장의 이미지듣ㄹ로 3차원 위치 정보를 추정할 수 있다
각 카메라의 extrinsic parameter를 알아야 정확한 정보를 추정할 수 있다
2장 이상의 이미지를 사용하는 방법
같은 카메라로 카메라가 움직이는 환경에서 연속된 이미지 정보를 활용하여 3차원 위치 정보를 추정할 수 있다
카메라의 움직임 정보를 정밀하게 측정, 추정해야 정확한 정보를 얻을 수 있다
Distortion 보정
이미지의 기하학적 정보를 해석하는데 방해하는 요소이기 때문에 이미지에서 왜곡을 보정하여 사용한다
1. undistort 좌표 계산
카메라 좌표계를 기준으로 3차원 공간상에 존재하는 객체를 투영하는 모델 계산
s
[
x
y
1
]
=
[
f
x
s
k
e
w
_
c
f
x
c
x
0
f
y
c
y
0
0
1
]
[
r
11
r
12
r
13
t
1
r
21
r
22
r
23
t
2
r
31
r
32
r
33
t
3
]
[
X
W
Y
W
Z
W
1
]
s \begin{bmatrix}x\\y\\1\\ \end{bmatrix} =\begin{bmatrix}f_x & skew\_cf_x & c_x\\0 & f_y & c_y\\0&0&1\\\end{bmatrix}\begin{bmatrix}r_{11}&r_{12}&r_{13}&t_{1}\\r_{21}&r_{22}&r_{23}&t_{2}\\r_{31}&r_{32}&r_{33}&t_{3}\\\end{bmatrix} \begin{bmatrix}X_W\\Y_W\\Z_W\\1\\\end{bmatrix}
s
⎣
⎢
⎡
x
y
1
⎦
⎥
⎤
=
⎣
⎢
⎡
f
x
0
0
s
k
e
w
_
c
f
x
f
y
0
c
x
c
y
1
⎦
⎥
⎤
⎣
⎢
⎡
r
1
1
r
2
1
r
3
1
r
1
2
r
2
2
r
3
2
r
1
3
r
2
3
r
3
3
t
1
t
2
t
3
⎦
⎥
⎤
⎣
⎢
⎢
⎢
⎡
X
W
Y
W
Z
W
1
⎦
⎥
⎥
⎥
⎤
extrinsic calibration은 왜곡 모델에 불필요하다
-> extrinsic 영향이 없다고 가정하면 행렬은 identity matrix가 된다
normalized image plane에 투영된다고 하면 intrinsic matrix를 연산할 필요가 없다
그러면 아래와 같은 결과가 나온다
s
[
u
v
1
]
=
[
X
C
Y
C
Z
C
1
]
s \begin{bmatrix}u\\v\\1\\ \end{bmatrix} = \begin{bmatrix}X_C\\Y_C\\Z_C\\1\\\end{bmatrix}
s
⎣
⎢
⎡
u
v
1
⎦
⎥
⎤
=
⎣
⎢
⎢
⎢
⎡
X
C
Y
C
Z
C
1
⎦
⎥
⎥
⎥
⎤
이를 정리하면
[
u
n
u
v
n
u
]
=
[
X
C
/
Z
C
Y
C
/
Z
C
]
\begin{bmatrix}u_{n_u}\\v_{n_u}\\\end{bmatrix} = \begin{bmatrix}X_C/Z_C\\Y_C/Z_C\\\end{bmatrix}
[
u
n
u
v
n
u
]
=
[
X
C
/
Z
C
Y
C
/
Z
C
]
여기서 u는 undistort의 약자이다
2. distortion 모델 적용 (왜곡x -> 왜곡o)
[
u
n
d
v
n
d
]
=
(
1
+
k
1
r
u
2
+
k
2
r
u
4
+
k
3
r
u
6
)
[
u
n
u
v
n
u
]
+
[
2
p
1
u
n
u
v
n
u
+
p
2
(
r
u
2
+
2
u
n
u
2
)
p
1
(
r
u
2
+
2
v
n
u
2
)
+
2
p
2
u
n
u
v
n
u
]
\begin{bmatrix} u_{n_d}\\ v_{n_d}\\\end{bmatrix} = (1 + k_1r^2_u + k_2r^4_u + k_3r^6_u) \begin{bmatrix} u_{n_u}\\v_{n_u}\\\end{bmatrix} + \begin{bmatrix} 2p_1u_{n_u}v_{n_u} + p_2(r^2_u + 2u^2_{n_u})\\ p_1(r^2_u + 2v^2_{n_u}) + 2p_2u_{n_u}v_{n_u}\\\end{bmatrix}
[
u
n
d
v
n
d
]
=
(
1
+
k
1
r
u
2
+
k
2
r
u
4
+
k
3
r
u
6
)
[
u
n
u
v
n
u
]
+
[
2
p
1
u
n
u
v
n
u
+
p
2
(
r
u
2
+
2
u
n
u
2
)
p
1
(
r
u
2
+
2
v
n
u
2
)
+
2
p
2
u
n
u
v
n
u
]
(
1
+
k
1
r
u
2
+
k
2
r
u
4
+
k
3
r
u
6
)
(1 + k_1r^2_u + k_2r^4_u + k_3r^6_u)
(
1
+
k
1
r
u
2
+
k
2
r
u
4
+
k
3
r
u
6
)
은 radial distortion(방사 왜곡)을 의미한다
[
2
p
1
u
n
u
v
n
u
+
p
2
(
r
u
2
+
2
u
n
u
2
)
p
1
(
r
u
2
+
2
v
n
u
2
)
+
2
p
2
u
n
u
v
n
u
]
\begin{bmatrix} 2p_1u_{n_u}v_{n_u} + p_2(r^2_u + 2u^2_{n_u})\\ p_1(r^2_u + 2v^2_{n_u}) + 2p_2u_{n_u}v_{n_u}\\\end{bmatrix}
[
2
p
1
u
n
u
v
n
u
+
p
2
(
r
u
2
+
2
u
n
u
2
)
p
1
(
r
u
2
+
2
v
n
u
2
)
+
2
p
2
u
n
u
v
n
u
]
은 tangential distortion(접선 왜곡)을 의미한다
r
u
2
=
u
n
u
2
+
v
n
u
2
r^2_u = u^2_{n_u} + v^2_{n_u}
r
u
2
=
u
n
u
2
+
v
n
u
2
이다
normalized image plane을 image plane으로 변환하면
[
x
p
d
y
p
d
1
]
=
[
f
x
s
k
e
w
_
c
f
x
c
x
0
f
y
c
y
0
0
1
]
[
u
n
d
v
n
d
1
]
\begin{bmatrix}x_{p_d}\\y_{p_d}\\1 \end{bmatrix} = \begin{bmatrix}f_x & skew\_cf_x & c_x\\0 & f_y & c_y\\0&0&1\\\end{bmatrix} \begin{bmatrix}u_{n_d}\\v_{n_d}\\1 \end{bmatrix}
⎣
⎢
⎡
x
p
d
y
p
d
1
⎦
⎥
⎤
=
⎣
⎢
⎡
f
x
0
0
s
k
e
w
_
c
f
x
f
y
0
c
x
c
y
1
⎦
⎥
⎤
⎣
⎢
⎡
u
n
d
v
n
d
1
⎦
⎥
⎤
그 결과
x
p
d
=
f
x
(
u
n
d
+
s
k
e
w
_
c
f
x
v
n
d
+
c
x
)
x_{p_d} = f_x(u_{n_d} + skew\_cf_xv_{n_d} + c_x)
x
p
d
=
f
x
(
u
n
d
+
s
k
e
w
_
c
f
x
v
n
d
+
c
x
)
y
p
d
=
f
y
v
n
d
+
c
y
y_{p_d} = f_yv_{n_d} + c_y
y
p
d
=
f
y
v
n
d
+
c
y
3. 왜곡 제거
앞서 계산한 image plane에 투영한 normalized image plane의 계산식을 역으로 계산하면 된다
왜곡 보정이라는 과정은 왜곡된 이미지로부터 왜곡이 제거된 이미지로의 mapping을 의미한다
OpenCV의 undistort 함수 또는 initUndistortRectifyMap & remap 함수를 이용하면된다
happy_quokka
팔로우
이전 포스트
[Perception Application] 2. Camera Intrinsic Calibration
다음 포스트
[Perception Application] 4. Intrinsic Calibration 구현
0개의 댓글
댓글 작성