'AR'에 해당되는 글 1건

  1. 2009/01/13 증강 현실 (Augmented Reality) - Marker Detection 구현 (11)
C#2009/01/13 21:21

이번시간에는 지금까지 제 블로그에서 한번도 다루어 지지 않았던 새로운 주제인 증강현실에 대해 간략히 소개하고 증강현실에서 필요한 요소중의 하나인 Marker Detection에 대해서 살펴보고자 합니다. 먼저 증강현실이 무엇인가에 대해서 살펴봐야겟죠, 증강현실의 사전적 의미를 살펴보면, "사용자가 눈으로 보는 현실세계와 부가정보를 갖는 가상세계를 합쳐 하나의 영상으로 보여주는 가상현실" 이라고 정의되어 있습니다.


간단하게 말하면 증강현실은 현실과 컴퓨터 환경을 혼합하여 보여주는 기술이라 할 수 있겠습니다.  일반적으로 증강현실은 위 그림과 같이 현실세계에 컴퓨터가 인지할 수 있는 Marker를 두고 사람이 바라보는 시점에 따라 Marker에 정보를 표현 해 주는 방식으로 구현을 합니다.

증강현실과 관련된 라이브러리로는 대표적으로 ARToolKit(http://www.hitl.washington.edu/artoolkit/)이 있습니다. ARToolKit은 증강현실을 초보자도 쉽게 구현하도록 하기 위해 제공되는 라이브러리로, 하나의 Marker를 인식하는데 최적화된 라이브러리 입니다.  컴퓨터와 연결된 카메라를 가지고 Marker를 비추게 되면 마커를 인식하여 마커위에 정보를 표현 할 수 있습니다.

이번시간에는 증강현실 라이브러리를 사용하지 않고 카메라에서 입력받은 영상을 처리하여 Marker를 추출해 내는 방법에 대해서 소개합니다. 아래는 구현완료 동영상입니다.


동영상에는 하나의 Marker를 사용하여 촬영했지만, 실제로는 2가지 이상의 Marker도 추출이 가능합니다. 간단하게 구현하는 방법을 소개하기 위해 카메라에서 영상을 받아오고, 영상을 라벨링 하는 알고리즘은 .Net Framework를 기반으로 오픈소스 이미지 프로세싱 라이브러리인 Aforge.Net(http://code.google.com/p/aforge/)을 사용하여 구현했습니다.

먼저 영상에서 마커영역을 추출하기 위해서는 아래와 같은 과정을 거치게 됩니다.


간단하게 설명하면 영상을 입력받고 적정 임계치를 적용하여 영상을 이진화 한뒤 라벨링 알고리즘을 수행하여 영역을 분리 합니다. 그리고 분리된 영역중 정사각형인 영역을 분리하여 마커를 인식하게 됩니다. 아래는 Marker Detection 소스 코드입니다. 소스코드가 긴 관계로 추가적인 설명은 생략하고 주석으로 대체하겠습니다.

코드 열기

붙여넣고 보니 코드가 엄청나게 길군요;; 살펴보시다가 이해가 가지 않으시는 부분이나 기타 궁금하신 사항은 리플이나 이메일 주시면 답변드리도록 하겠습니다.

----------------------------------
1월 13일 화요일 오후 9시 19분 추가
----------------------------------
위 코드 이후에 작업에 대해서 언급을 하지 않았었네요;; 위 코드는 단순하게 영상에서 Marker를 추출하는 코드고, 실제 사용하기 위해서는 추출될 Marker를 Template Matching을 하여 Marker ID를 취득한 뒤 ID에 맞는 정보를 보여주면 됩니다.

PS. 포스팅하고 나서 확인한건데.. 전체 프로젝트 코드를 안올렸더군요.. (이미 지워버렸는데......ㅠㅠㅠㅠㅠㅠ)
      혹시 필요하신 분들은 요청해주세요. 이미 삭제해서 프로젝트 파일은 드릴수는 없지만.. 기타 설명은 더 해드리겠습니다.


크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 곡스