일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 삼성전자 소프트웨어멤버십 SSM
- Friendship
- 멤버십
- 고려대학교
- 패턴인식
- 동아리
- 빅데이터
- 물걸레로봇청소기추천
- 갤럭시탭S8울트라
- BAM
- 구글 앱 엔진
- 삼성
- NarwalFreo
- SSM
- 인공지능
- 신경회로망
- 파이썬
- Bidirectional Associative Memory
- 신경망
- 증강현실
- 가상화
- 물걸레자동세척로봇청소기
- Google App Engine
- 패턴 인식
- Python
- hopfield network
- 삼성소프트웨어멤버십
- 하이퍼바이저
- Neural Network
- 나르왈프레오
- Today
- Total
정보공간_1
[2기 강남 이인표]증강현실의 이해 I 본문
안녕하세요? 멤버십 21-2기 이인표입니다. 반갑습니다.
제가 소개할 내용은 증강현실의 기초로서 2차원 기하에서 사용되는 호모그래피(homography)와 관련된
내용입니다. 자 그럼 시작합니다!
1. 증강현실
우선 증강현실(Augmented Reality)에 대해서 간략하게 이야기하고 넘어가겠습니다.
증강현실이란,
'가상현실(Virtual Reality)의 한 분야로 실제 환경에 가상 사물이나 정보를 합성하여 원래의 환경에 존재하는 사물처럼 보이도록 하는 컴퓨터 그래픽 기법이다.'
라고 위키백과(http://ko.wikipedia.org/wiki/%EC%A6%9D%EA%B0%95%ED%98%84%EC%8B%A4)에
정의되어 있습니다. 그럼 우리 그림 좀 볼까요?
|
|
영상 출처 : http://www.entigi.com/ |
이 기법을 이용하여 게임을 만들기도 하고, 다양한 정보를 표현하는 수단으로, 광고 등 기업의 프로모션으로
사용되고 있습니다. 자, 그럼 이런 증강현실을 어떻게 구현할 수 있는지 그 원리에 대해서 알아볼까요?
2. 증강현실의 원리
증강현실은 위에서 설명한 것 처럼 실세계에 마치 존재하는 것처럼 실시간으로 영상을 합성하는 기법입니다.
기본적으로 카메라로부터 입력된 영상을 분석하여 필요한 정보를 추출하고, 이미 알고있는 실세계의 실제
정보와 영상에서 추출한 정보와의 대응관계를 통해 실세계에서 존재하는 카메라의 위치를 알아내야합니다.
알아낸 카메라의 정보를 통해서 3차원 실제 세계와 일치하는 가상의 월드를 구성(OpenGL, DirectX 등)하고
실제 카메라와 일치하는 가상의 카메라를 만들어서 영상과 동시에 합성을 하면 되는 것이죠..
글로 쓰니까 참 난해합니다. 그래서 준비했습니다.
|
이 그림을 보면 감이 오시나요?
왼쪽의 그림에서는 원점을 중심으로 우리가 실제로 측정한(자와 같은 측정 도구를 이용하여 측정한) 카메라의
위치를 나타내고, 오른쪽 그림의 가상 세계는 우리가 컴퓨터와 같은 도구를 이용하여 실제 세계와 같은
배율을 갖는 가상의 세계를 표현한 것 입니다. 다시 말하면, 실제 세계에서 카메라의 위치와 가상 세계에서의
카메라의 위치가 같은 배율로 일치되도록 만드는 것이죠. 원리는 아주 간단합니다.
여기서 의문이 하나 생기실 텐데요, '그렇다면 어떤 정보를 이용해서 실제 세계와 가상 세계를 일치시켜야
하는 것인가?' 이것이죠.
자 이것을 이해하기 위해서는 카메라에 대한 이해가 필요합니다.
2.1. 카메라 파라미터
우리가 흔히 가정으로 사용하는 카메라 모델은 핀홀(Pinhole Camera) 모델 입니다. 이 모델은 아주 작은
구멍을 통해 세상을 바라보는 카메라를 의미합니다. 이 카메라는 2개의 파라미터(Parameters)를 갖습니다.
하나는 카메라 내부 파라미터(Camera Intrinsic Parameter)이고, 또 하나는 카메라 외부 파라미터
(Camera Extrinsic Parameter)입니다. 아래 그림을 본 후 설명하겠습니다.
|
위의 그림을 보면 카메라의 내부 파라미터와 외부 파라미터가 어떤 관계를 가지고 있는지 알 수 있습니다.
찬찬히 살펴보면, 실제 세계에서 (X, Y, Z)의 위치에 존재하는 한 점 M이 실제 세계의 원점으로부터 R만큼
회전하고 t만큼 이동한 카메라 C의 렌즈를 통해서 중심을 (u0, v0)를 원점으로하는 영상 평면의 한 점 m에
사영되었을 경우, M과 m의 관계는 식(2.1)과 같이 표현할 수 있습니다. 이때 A는 카메라의 내부 파라미터로
각 축에 대한 초점 거리(focal length) α, β와 영상 평면의 뒤틀림 정도인 γ, 영상 평면의 중심인 u0, v0를 갖고
있으며 행렬로 식(2.2)의 형태로 표현합니다. 즉 카메라 내부 파라미터는 카메라가 제조될때 결정되는
(초점 거리는 줌인, 줌아웃의 기능이 있는 카메라는 고정되어있지 않습니다.)
파라미터들로 다시 말씀을 드리면, 렌즈와 실제 영상이 맺히는 평면(CCD 등)과의 거리, 카메라 렌즈의
왜곡 정도, 영상평면의 중심을 의미하며, 프로젝션과 아주 밀접하게 관련되어 있습니다.
카메라 외부 파라미터는 위의 그림에서 (R, t)로 표현된 값으로 R은 실제 세계의 원점을 중심으로
회전(Rotation)한 양(3x3 행렬)을, t는 실제 세계의 원점으로부터 이동한 양(3x1 벡터)를 의미합니다.
즉, 카메라 외부 파라미터는 카메라가 원점으로 부터 움직인 양을 3x4 행렬로 나타낸 것 입니다.
다시 식(2.1)로 돌아가서보면 실제 세계에 있는 한 점 M에 카메라의 파라미터들을 곱한 결과가 카메라를 통해
사영되어 영상에 맺힌 이미지 좌표라는 것을 알 수 있습니다. 따라서 카메라 내부 파라미터와 외부 파라미터의
곱으로 표현되는 행렬은 사영행렬(Projection Matrix)이므로 P로 표기할 수 있습니다.
자, 다시 처음으로 돌아가서 우리가 증강현실을 하기 위해서는 카메라의 정보가 필요하다고 언급하였습니다.
여기서 말하는 카메라의 정보는 방금 설명드린 카메라 내부, 외부 파라미터들로서 사영행렬이 되겠습니다.
그렇다면 이 값들을 실제로 구하기 위해서는 어떻게 해야할까요?
지금부터는 그것을 알아보겠습니다.
2.2. 카메라 보정(Camera Calibration)
카메라 보정은 2.1에서 설명한 카메라의 파라미터들을 구하는 것 입니다.
이것을 하는 방법은 여러가지가 있습니다. 그 중 평면기하를 이용하는 대표적인 방법으로
"A Flexible New Technique for Camera Calibration"
(Zhengyou Zhang, December 2, 1998)
에 기술되어 있는 2차원 카메라 보정 방법에 대한 내용을 중심으로 설명하겠습니다.
2.2.1. 호모그래피(Homography)
호모그래피는 2차원 사영기하에서 두 평면사이의 관계를 의미합니다.
|
영상 출처 : http://www.gen-eng.florence.it/duomosiena/01_phsurv/phsurv_obj.htm |
위의 그림에서 볼 수 있듯이 실세계에 존재하는 평면 1234가 카메라를 통해 사영되어 평면 1'2'3'4'가 됩니다.
두 평면은 카메라 사영행렬을 통해서 관계를 설명할 수 있습니다.
|
위의 수식에서 실제 세계에서 입력되는 한 점의 좌표에서 Z값이 0이기 때문에 행렬의 곱에 의해 사영행렬의
3열의 값은 0이 됩니다. 따라서 이 식을 정리하여 P를 3x3 행렬로 표현할 수 있으며, 이것을 호모그래피라고
합니다.
|
위와같이 표현된 식에서 H를 호모그래피라고 부르며, 사영 기하에서 두 평면의 관계를 나타내는,
즉, 실제 세계에서의 평면과 그 평면이 카메라를 통해 맺힌 영상 평면과의 관계를 의미하는 것을
알 수 있습니다. 그리고 또한 호모그래피는 위의 예에서 볼 수 있듯이 평면간의 대응관계
(correspondance relation)만 존재한다면 얼마든지 계산할 수 있습니다.
2.2.2. 호모그래피를 이용한 카메라 보정
이제까지의 설명으로 알 수 있는 것은 평면의 대응관계를 통해 호모그래피를 구할 수 있고, 호모그래피는
카메라의 내부, 외부 파라미터 중 Z축과 관련된 값이 빠진 행렬이라고 이해할 수 있습니다. 그렇다면
호모그래피를 이용해서 어떻게 카메라 보정을 할 수 있을까요?
|
|
위의 두 식 위의 식에서 좌변은 H를 각 축의 열벡터를 포함하는 행렬로 표현한 것입니다.
r1과 r2는 서로 직교하는 정규벡터이므로(회전 행렬은 orthonormal한 성질을 가짐) 식(2.19), 식(2.20)으로
전개할 수 있습니다. A는 상삼각행렬(Upper-triangular matrix)이므로 A-TA-1을 전개하여 정리하면,
|
식(2.21)로 표현할 수 있습니다. B행렬은 대칭행렬(Symmetric matrix)이므로 총 6개의 원소로 표현이 가능하며
그것을 식으로 표현하면 다음과 같습니다.
|
다시 식(2.19)로 돌아가서 A-TA-1대신 B를 대입하면
|
식(2.24)를 얻을 수 있습니다.
자, 그럼 위의 식의 형태를 보아 우리가 많이 보아왔던 Ax=0의 형태가 되었죠? 그럼 우리는 이제 A도 0이
아니고, x도 0이 아니기 위한 최적의 해답을 찾으면 되는 것입니다.
|
위의 식에서 우리는 b를 구하기위해서 SVD(Singular Value Decomposition)을 사용하여 b를 구합니다.
|
B의 원소들을 이용해서 위와 같이 표현할 수 있고 실제로 구해진 값에 대입하면, 카메라의 내부 파리미터를
계산할 수가 있습니다. 그렇다면 이제 카메라 외부파라미터를 구해보겠습니다.
|
우리는 카메라 내부 파라미터를 알고 있으므로, 식 (2.1)에 대입을 통해 위와 같은 식들을 얻을 수 있고, 카메라
외부 파라미터를 계산할 수 있습니다. 역시 회전행렬의 직교정규 성질을 이용해서 r3를 구할 수 있죠.
이때 λ는 다음과 같이 계산할 수 있으며,
반드시 계산을 해주어야 올바른 값을 구할 수 있습니다.
3. 증강현실에 적용
우리는 이제 카메라 보정을 마쳤고, 카메라의 파라미터들을 알 수 있습니다. 그럼 이것들을 이용해서 어떻게
증강현실을 구현할 수 있는지 간략하게 설명하고 포스팅을 마치도록 하겠습니다.(적용에 대한 자세한 내용은
다음 포스팅에서...ㅠㅠ)
우선, 카메라 내부 파라미터는 영상의 크기가 변하거나 줌 인, 줌 아웃이 되지만 않으면 바뀌지 않습니다.
따라서 우리는 위의 방법을 이용하여 카메라 내부 파라미터는 미리 계산하여 상수로 고정을 시켜놓습니다.
카메라 내부 파라미터를 알고 있기 때문에 역행렬을 구해서 바로 외부 파라미터를 구할 수 있는 것이죠.
따라서 우리는 실시간으로 입력되는 영상을 통해 호모그래피를 구하고, 카메라 내부 파라미터의 역행렬을
이용해 호모그래피로부터 내부 파라미터를 제거해주고, 카메라 외부 파라미터를 구해 가상의 세계에 있는
카메라에 적용 시켜주면 되는 것 입니다. 가상의 카메라와 실제 세계의 카메라가 일치를 이루므로
가상 세계에서 3차원으로 그린 오브젝트를 카메라를 통해 입력받은 영상위에 그려줌으로서 실시간으로
영상합성이 되는 것이고, 결국 사용자에게 증강된 정보를 보여줌으로서 증강현실이 되는 것입니다.
그럼 마지막으로 중요한 부분만 정리를 하고 포스팅을 마치겠습니다.
4. 정리
- 카메라는 내부 파라미터와 외부 파라미터를 갖는다.
- 내부 파라미터는 초점거리, 영상 평면 중심, 뒤틀림 계수를 가지고 있으며, 사영에 큰 영향을 미친다.
- 외부 파라미터는 실세계의 원점으로부터 카메라가 회전하고 이동한 값을 의미한다.
- 호모그래피는 Z값이 0인 사영행렬이므로 이를 통해서 카메라 파라미터를 구할 수 있다.
자, 그럼 여러분. 저는 다음 포스팅을 약속하며, 이만 물러가겠습니다. 그럼 안녕히 계세요~ ^^
마지막으로 참고한 자료와 전세계에서 카메라 추적을 가장 잘한다는 팀의 영상을 투척하겠습니다.
감사합니다.
|
* 참고자료 *
- Emerging Topics in Computer Vision, Section 1. Chapter 2. Camera Calibration- A Flexible New Technique for Camera Calibration, Zhengyou Zhang, 1998.
- Introductory Techniques for 3-D Computer Vision, Emanuele Trucco, Alessandro Verri 저
(http://www.youtube.com/watch?v=Df9WhgibCQA,http://www.doc.ic.ac.uk/~ajd/)
'IT 놀이터 > Elite Member Tech & Talk' 카테고리의 다른 글
[2기 강북 강정인] 스마트폰 환경에서의 SSL Strip 공격 (0) | 2012.08.18 |
---|---|
[2기 대전 김호원]Concerto MCU 1. 개발환경 구축 (0) | 2012.08.17 |
[2기 광주 박정태]C language - type cast (0) | 2012.08.14 |
[2기 부산 이환승]Google App Engine 시작하기 (2) | 2012.08.12 |
[2기 부산 노형식] JQM를 이용한 Mobile PR Web App 제작 (4) | 2012.08.10 |