가상현실연구실 박정식 nangsik@mr.hanyang.ac.kr 증강현실 예제 가상현실연구실 박정식 nangsik@mr.hanyang.ac.kr
증강현실 구현에 필요한 것 카메라 입력 카메라 내부 파라미터 카메라 외부 파라미터 (카메라 포즈) 렌더러 오프라인 캘리브레이션 객체 추적을 통해 계산 렌더러 OpenGL, Direct3D, 또는 그래픽/게임 엔진
카메라 행렬 내부 행렬과 외부 행렬로 구성 3차원 객체를 증강하기 위해 필요
OpenGL transformation 과정 Modelview 행렬은 카메라 외부파라미터에 대응 Projection 행렬은 카메라 내부파라미터에 대응
카메라 행렬 변환(OpenGL) Instrinsic Extrinsic gluPerspective : , 영상 좌표계와 OpenGL 좌표계는 y축과 z축이 반대 컴퓨터 비전의 행렬은 행우선이나, OpenGL의 행렬은 열우선
마커기반 증강현실
ARToolkit 다운로드 http://www.hitl.washington.edu/artoolkit/downloa d/#windows
ARToolkit 프로젝트 파일
라이브러리 빌드
마커 준비 C:\ARToolKit\patterns\pattHiro.pdf 출력
SimpleTest C:\ARToolKit\bin\simpleTest.exe 실행
SimpleTest
주요 함수 AR 접두어가 붙는 자료형과 ar, arg 접두어가 붙 는 함수가 ARToolKit 라이브러리에서 제공하는 인 터페이스 arParamLoad 카메라 내부 파라미터 로드 arInitCparam arParamLoad로 로드한 카메라 내부 파라미터를 사용 하도록 지정 arLoadPatt 마커 패턴 로드
주요 함수 arDetectMarker arGetTransMat argConvGlpara 마커 검출. 영상포맷은 디폴트로 4채널 BGRA 사용 arGetTransMat 검출된 마커의 카메라 포즈를 가져옴 argConvGlpara 카메라 내부 파라미터와 카메라 포즈를 이용하여 OpenGL에서 사용가능한 행렬로 변환 상기 함수를 알면 카메라 입력과 렌더러는 다른 라이브러리로 교체 가능
example/simple/simpleTest.c 함수 Main Glut 윈도우 생성, 카메라 초기화, 윈도우 루프로 진입 mainLoop 카메라 영상 획득, 마커 검출 및 카메라 포즈 계산 Init 카메라 초기화, 카메라 파라미터 로드, 마커 로드 Draw 카메라 영상 렌더링 및 카메라 포즈를 이용하여 큐브 증강
더 해볼만한 것들 카메라 입력을 OpenCV카메라로 교체 3차원 콘텐츠 교체 모바일 포팅 Makefile 수정을 통해 모바일 포팅도 가능
특징점기반 증강현실
SURF 대표적인 특징점 기술 중 하나 Hessian 기반 특징점 검출기와 gradient기반 특징기술 자로 구성 특징기술자 매칭을 통해 객체 검출, 추적에 사용 가능
SURF를 이용한 AR 예제 필요한 라이브러리 카메라 캘리브레이션은 되어 있는것으로 가정 OpenCV OpenGL GLUT SURF는 nonfree 모듈에 포함 OpenGL GLUT 카메라 캘리브레이션은 되어 있는것으로 가정 OpenCV calibration.cpp 샘플 참고 또는 matlab toolbox 활용 http://www.vision.caltech.edu/bouguetj/calib_doc/
예제 다운로드 http://mr.hanyang.ac.kr/wp- content/uploads/2014/10/AugmentationWithSURF. zip
사용된 OpenCV 인터페이스 클래스 함수 VideoCapture SurfFeatureDetector SurfDescriptorExtractor BFMatcher 특징점 매칭 DMatch Correspondence 인덱스 저장 함수 solvePnPRansac 3D-2D Correspondence와 카메라 내부 파라미터를 이용하여 카메라 포 즈 계산 Rodrigues Rotation 벡터를 행렬로 변환
실행화면
더 해볼만한 것들 특징점 기술 교체 모바일에서 Vuforia 사용해보기 SIFT, BRISK, ORB 등 https://developer.vuforia.com/