disclaimer - kofod.or.kr

50
저작자표시 2.0 대한민국 이용자는 아래의 조건을 따르는 경우에 한하여 자유롭게 l 이 저작물을 복제, 배포, 전송, 전시, 공연 및 방송할 수 있습니다. l 이차적 저작물을 작성할 수 있습니다. l 이 저작물을 영리 목적으로 이용할 수 있습니다. 다음과 같은 조건을 따라야 합니다: l 귀하는, 이 저작물의 재이용이나 배포의 경우, 이 저작물에 적용된 이용허락조건 을 명확하게 나타내어야 합니다. l 저작권자로부터 별도의 허가를 받으면 이러한 조건들은 적용되지 않습니다. 저작권법에 따른 이용자의 권리는 위의 내용에 의하여 영향을 받지 않습니다. 이것은 이용허락규약 ( Legal Code) 을 이해하기 쉽게 요약한 것입니다. Disclaimer 저작자표시. 귀하는 원저작자를 표시하여야 합니다.

Upload: others

Post on 23-Mar-2022

1 views

Category:

Documents


0 download

TRANSCRIPT

저 시 2.0 한민

는 아래 조건 르는 경 에 한하여 게

l 저 물 복제, 포, 전송, 전시, 공연 송할 수 습니다.

l 차적 저 물 성할 수 습니다.

l 저 물 리 목적 할 수 습니다.

다 과 같 조건 라야 합니다:

l 하는, 저 물 나 포 경 , 저 물에 적 된 허락조건 명확하게 나타내어야 합니다.

l 저 터 허가를 면 러한 조건들 적 되지 않습니다.

저 에 른 리는 내 에 하여 향 지 않습니다.

것 허락규약(Legal Code) 해하 쉽게 약한 것 니다.

Disclaimer

저 시. 하는 원저 를 시하여야 합니다.

석사학위논문

손동작 인지에 의한 원격 영상 제어

Remote Image Control by Hand Motion Detection

제 출 자:임 정 근

지도교수:한 경 호

2012

전자전기공학과

컴퓨터응용전공

단국대학교 대학원

손동작 인지에 의한 원격 영상 제어

Remote Image Control by Hand Motion Detection

이 논문을 석사학위논문으로 제출함.

2012년 12월

단국대학교 대학원

전자전기공학과

컴퓨터응용전공

임 정 근

임정근의 석사학위 논문을

합격으로 판정함

심 사 일:2012. 12. 11.

심사위원장 인

심 사 위 원 인

심 사 위 원 인

단국대학교 대학원

- i -

(국문초록)

손동작 인지에 의한 원격 영상 제어

단국대학교 대학원 전자전기공학과

컴퓨터응용전공

임 정 근

지도교수: 한 경 호

본 논문에서는 마우스나 키보드 등의 기존의 입력 장치 대신에 마이크로소

프트사의XBOX360의 Kinect 센서를 영상정보 입력 장치로 사용하고, 오픈소

스라이브러리인 OpenCV를 사용하여, 손동작으로 원격의 영상의 크기와 각도

를 제어하기 위한 UX 인터페이스를 제안하고 이를 PC 의 윈도우 시스템에

서 구현하였다.

최근 스마트 TV 와 모바일기기 등의 제품에서 복잡하고 다양한 제어기능

을 사용자의 직관적 경험에 의하여 손쉽게 제어하기 위한 UX(User

Experience) 기반의 GUI 가 사용되고 있다. 특히 몸동작은 문자 및 언어 보

다 더 많은 양의 정보를 간단한 방법으로 전달하는 수단으로 UX에서 가장

중요한 입력 인터페이스 방법이 되고 있으며 게임 등의 분야에서 많이 발전

하고 있다.

Kinect에서 출력되는 3차원 depth map에서 사용자의 양손의 위치와 거리의

차이를 읽어내고, 이미지 처리용 개방형 라이브러리인 OpenCV를 사용하여,

- ii -

양손 사이의 거리 및 양각도의 변화에 따라 양손의 기울기만큼 이미지가 회

전하고, 양손의 거리만큼 이미지의 크기가 제어되는 방법을 제안하고 PC와

윈도우 환경에서 실험하여 그 동작을 확인하였다.

이러한 쉽고, 직관적인 입력방법은 스마트 TV 등에서 원격으로 영상을 제

어하는 명령으로 사용 될 수 있고, 장애인 재활치료 등의 다양한 분야에 응

용될 수 있다.

- iii -

감사의 글

본 논문이 완성되기까지 오랜 시간동안 아낌없는 지도를 해주신 한경호 교

수님께 진심으로 감사를 드립니다. 대학원 생활을 하는 동안 많은 경험을 하

게 해주시고 아낌없는 가르침을 주신 신인철 교수님, 논문심사를 맡아주시

고, 지도를 해주신 김현진 교수님께도 감사드립니다.

대학원 생활을 하는 동안 힘이 되어 주신 미국에 계신 송영상 박사님과,

물심양면으로 많은 도움을 주신 대성이형, 많은 인맥을 쌓을 각오를 하게 만

들어 주신 호원이형, 연구실에서 2년 가까이 동고동락했던 먼저 졸업한 성원

이와 유광이, 전자전기공학과 대장 영주, 힘든 일 마다않고 도와준 04학번

이하 전자전기공학부 후배님들, 기술적인 지원을 해주었던 신호 및 시스템

연구실의 팽소호 박사님과 연구실 분들, 열정적으로 생활하는 메이즈 및 연

구방 후배님들, 오랜 시간 친하게 지내온 재성이와 비상 사람들, 대학원 생

활에 활력을 넣어준 분자생물학과 조교님, 모바일과 조교님, 학교를 무사히

졸업할 수 있도록 많은 편의를 봐주신 TVLogic 연구소장님과 팀장님을 비롯

한 모든 회사분들, 멀리 있지만 마음의 안식이 되어주시고 인생의 목표를 심

어주신 PT선생님께 진심어린 감사를 드립니다. 향긋한 커피에 엄마의 정성

과 마음을 담아주신 메이슨카브 어머님께 진심으로 감사를 드립니다.

끝으로 이 세상에서 제일 사랑하고 소중한 나의 가족. 항상 작은아들 걱정

을 해주시는 자상한 어머니, 표현은 잘 안하시지만 작은아들이 잘되길 바라

고 기대해주시는 아버지, 듬직하고 누구보다 장남다운 형, 때론 누나 같고,

때론 친구 같은 동생 혜나, 세상에서 시동생이 최고로 여겨주시는 형수님,

힘들 때마다 웃음을 잃지 않게 해주시는 존재만으로도 감사한 조카님들, 부

족한 아들이자, 동생이고, 오빠이며, 삼촌인 저를 믿고 의지가 되어주신 저의

소중한 사랑하는 가족들에게 감사의 마음을 전해 드립니다.

짧지 않은 대학원생활 이었습니다. 남들보다도 조금은 더 오래 다니게 된

대학원 생활이라 그런지 좀 더 많은 아쉬움과 미련이 남는 것도 같습니다.

제가 지금까지 있게 해주시고 도움을 주신 많은 분들께 진심으로 감사를 드

립니다.

- iv -

목 차

국문초록··················································································································· ⅰ

감사의 글················································································································· ⅲ

표목차······················································································································· ⅴ

그림목차··················································································································· ⅵ

수식목차··················································································································· ⅷ

Ⅰ. 서 론 ················································································································· 1

Ⅱ. 정지영상의 크기 및 회전 변환····································································· 4

1. 크기의 변환······································································································ 4

2. 회전 변환·········································································································· 7

Ⅲ. Depth map에 의한 Skeleton Image 생성 및 손목 트래킹······················ 9

1. Depth map 생성····························································································· 10

2. 사용자 인식에 의한 Skeleton 이미지 생성·············································· 15

3. Kinect 센서에 의한 동작인식······································································ 16

Ⅳ. 실험 ···················································································································· 20

Ⅴ. 결론 ···················································································································· 35

참고문헌··················································································································· 36

Abstract ···················································································································· 37

- v -

표목차

표 1. 오감형 인지 인터페이스 기술··································································· 2

표 2 Kinect와 Xtion 재원······················································································ 9

표 3 개발환경········································································································· 20

표 4. 양손을 벌린 경우의 좌표 변화································································ 27

표 5. 양손을 오므린 경우의 좌표 변화···························································· 28

표 6. 다음 이미지 선택 동작 시 좌표변화······················································ 31

표 7. 이전 이미지 선택 동작 시 좌표변화······················································ 31

표 8. 양손을 시계반대방향으로 회전시키는 경우의 좌표 변화·················· 33

표 9. 양손을 시계방향으로 회전시키는 경우의 좌표 변화·························· 34

- vi -

그림목차

그림 1 크기변환시의 좌표이동············································································ 5

그림 2. 정방향 매핑······························································································· 6

그림 3. 실수 좌표··································································································· 7

그림 4. 실수 좌표의 값 비례식··········································································· 7

그림 5. 임의의 각에 대한 이미지 회전····························································· 8

그림 6 키넥트 센서······························································································· 10

그림 7 Kinect 센서의 구조·················································································· 11

그림 8 Kinect Sensor의 IR 동작원리································································· 12

그림 9 Primesense의 3D sensor ········································································· 12

그림 10 Depth map 좌표····················································································· 13

그림 11 OpenNI에서 생성하는 신체좌표·························································· 14

그림 12 Kinect for windows SDK에서 생성하는 신체좌표··························· 14

그림 13 middleware로서의 OpenNI ···································································· 15

그림 14 초기 Skeleton 이미지 ·········································································· 16

그림 15 Kinect 응용프로그램의 흐름도 ·························································· 16

그림 16 유효동작의 손동작 범위······································································· 17

그림 17 양 손을 벌린 경우················································································· 18

그림 18 양 손을 오므린 경우············································································· 18

그림 19 양 손을 회전 시키는 경우··································································· 19

그림 20 구현된 프로그램의 흐름도··································································· 21

그림 21. 프로그램 실행 초기·············································································· 22

그림 22. 단일 피사체의 움직임 인식 ······························································ 22

그림 23 단일 피사체에 대한 인덱스································································· 23

- vii -

그림 24. 여러 피사체의 움직임 인식 및 Skeleton 이미지 생성················· 23

그림 25. 여러 피사체에 대한 인덱스 및 Skeleton 이미지 생성················· 24

그림 26. 이전 프레임과 현재 프레임의 양손과 몸의중심의 x, y, z 좌표 25

그림 27. 양손의 트래킹 ························································································ 25

그림 28. 원본 영상 ································································································ 26

그림 29. 영상 확대 동작······················································································ 27

그림 30. 확대된 영상 ···························································································· 27

그림 31. 영상 축소 동작······················································································ 28

그림 32. 축소된 영상 ···························································································· 28

그림 33. 이전 영상 선택 동작 ············································································ 29

그림 34. 다음 영상 선택 동작 ············································································ 30

그림 35. 이전 영상 선택······················································································ 30

그림 36. 다음 영상 선택······················································································ 30

그림 37. 반시계방향 회전 동작·········································································· 32

그림 38. 시계방향 회전 동작·············································································· 32

그림 39. 반시계방향 이미지 회전······································································ 33

그림 40. 시계방향 이미지 회전·········································································· 33

- viii -

수식목차

수식 1 이미지 크기변환 행렬식·········································································· 5

수식 2 크기변환시의 확대비율············································································ 5

수식 3. 역방향 매핑시의 원본좌표····································································· 6

수식 4. 좌표 값을 위한 비례식··········································································· 7

수식 5. z의 좌표 값 계산공식············································································· 7

수식 6. 임의의 각에 대한 회전 행렬식····························································· 8

수식 7. 회전식에 대한 원 좌표값······································································· 8

수식 8 두 좌표사이의 거리 ··············································································· 18

수식 9 두 좌표사이의 기울기············································································· 18

- 1 -

Ⅰ. 서 론

1937년 벨연구소에서 최초의 전자식 컴퓨터가 개발 된 이래로 20세기 말까지 컴퓨터

의 발전은 처리속도와 게이트 집적도의 향상에 초점이 맞춰져있었다. 또한 인공지능이

라는 학문 분야가 생기면서, 학습 가능한 컴퓨터를 개발하고자 하는 연구가 진행 되어오

고 있다. 1960년대 미국에서 위성으로부터 전달받은 달 표면 사진을 복원하는 방법에 관

한 연구가 이루어지면서 디지털 영상 처리의 연구가 시작되었다.

개인용 컴퓨터의 발달과 보급에 힘입어 영상을 다양한 방법으로 활용하고자 하는 시

도가 진행 되었으며, 멀티미디어, 인터넷, 컴퓨터, 휴대용 단말기 등의 발달과, 디지털 카

메라, 디지털 캠코더 등의 보급으로 일상생활 전반에서 영상이 사용되어지고 있다. 영상

을 이용하여 사람을 인식하고, 컴퓨터 및 그 외의 기계장치와 사람간의 소통방식에 관한

다양한 연구가 활발히 이루어지고 있다. 특히 정보화 사회에서 컴퓨터 산업은 사회에서

중추적인 역할을 하며, 인간 생활 주변에 밀접한 존재로서 자리를 잡고 있다. 다양한 미

디어의 활용과 컴퓨터의 응용 분야가 확대되면서 보다 쓰기 쉬운 컴퓨터 및 기계 장치

의 요구가 강해지고 있다.[1]

21세기에는 컴퓨터의 처리속도 향상뿐만 아니라 사용방법에 관한 연구가 활발해 지고

있다. 특히 스마트 폰 등의 소형이면서 복잡한 기능을 가진 시스템을 사용자 중심의 편

의성과 사용자가 장치를 사용하면서 갖는 느낌 및 경험에 중점을 두어 장치를 쉽게 제

어하고자 하여 사용자와 컴퓨터의 상호작용을 쉽게 다루고자하는 개념의 UX(user

experience)는 학문분야임과 동시에 산업분야로서, 사용자의 편의성을 위한 연구를 핵심

적으로 주도하고 있다. UX는 사용자의 편의를 중요시한 인터페이스를 구현하는 UI(user

interface)로부터 시작되었으며, 그 예가 GUI(graphic user interface)이다. 사용자 중심의

인터페이스 구현에서 더 나아가 사용자의 경험까지도 고려해서 개발하는 UX로 넘어가

고 있으며, 그 결과 마우스나 키보드, 버튼뿐만 아니라 터치스크린, 카메라, 음성입력 장

치 등 다양한 형태로 HCI(Human–computer interaction) 분야에서 개발 및 발전되어 오고

있다. 이러한 방식의 적용은 게임에서부터 산업분야 및 공공시설물까지 다양하게 활용

되며, 장치의 편의성과 가치를 향상하는데 이용되어지고 있다. 애플사의 아이폰에서 손

가락 동작으로 화면을 확대 및 축소하는 것으로, 스마트 기기에서 UX를 구현하여 사용

자의 직관 및 경험에 기반으로 한 입력 방법을 보였다.

표 1에 나타나 있듯이, 사람의 오감을 활용한 사용자의 경험을 중요시하는 입력 방법

들이 관심을 받고 있는 추세이다. 최근에 마이크로소프트사를 통해 개발된 Kinect 센서

- 2 -

는 다양한 방식으로 UX를 구현해 낼 수 있는 장치로서 크게 관심을 모으고 있다. Kinect

센서는 3D 입체 영상을 측정하는 기기로서, 별도의 컨트롤러 없이 신체를 이용하여 다

양한 어플리케이션을 경험할 수 있는 기기로서 Microsoft사의 콘솔게임기인 Xbox360의

입력 장치이다. 2009년 ‘Project Natal’이란 이름으로 진행이 발표 되었으며, 2010년

Kinect라는 명칭으로 Microsoft사에 의해 공식 출시되었다.

인터페이스 기본 기능

음성/청각자연스러운 발성에 대한 음성인식 기술과 풍부한 감정 표현이 가능한

음성 합성 기술

영상/시각홍채 인식을 통한 개인 인증뿐만 아니라 동작인식, 안구추적 기능을

이용한 인터페이스

제스처/모션 제스처의 의미를 인지하며 이에 대한 감정(emotion)을 해석

촉각 터치방식의 입력 및 감촉을 느끼는 신경자극에 의한 인터페이스 구현

후각발향기술 구현 및 디스플레이 방식에 대한 연구를 통해 실감형 인터

페이스를 구현

미각미각 처리기술을 이용하여 감별처리 및 디스플레이 기술연구로 실감

인터페이스를 구현

오감융합 여러 가지 오감인식 및 자극을 통하여 실감형 인터페이스 구현

생체신호 생체신호 및 뇌파를 이용한 인터페이스 구현

표 1. 오감형 인지 인터페이스 기술

Kinect 센서는 RGB 카메라 및 IR 프로젝터와 IR센서 시스템을 통해 몸동작을 인식하

고 그 동작들을 입력 신호로 사용할 수 있다. 게임을 목적으로 만들어진 기기이지만, 동

작이 감지되는 동안 다양한 오퍼레이션을 적용할 수 있기 때문에 실제 생활에 응용하는

것에 많은 관심이 쏠리고 있고, 학계와 여러 기업에서 연구가 진행되고 있다. Kinect 센

서는 제스쳐와 영상 및 시각을 이용한 사용자의 경험을 응용한 입력 방법을 구현해 낼

수 있는 장치이다.

본 논문에서는 Kinect 센서의 IR 센싱부에서 생성하는 3차원 영상을 입력 받아서

skeleton 이미지를 생성하고, 생성된 skeleton을 트래킹 하여 양손의 좌표의 이동을 감지

해내고, 유효명령을 분석한 다음, OpenCV(Open Source Computer Vision)라는 C언어 라

이브러리와의 연동을 통해서 양손의 손동작을 가지고 원격으로 정지영상을 처리하는 것

- 3 -

에 대한 구현을 하였다. 이는 UX 구현 및 응용에 대한 하나의 방법을 제시하였고, 스마

트 TV등 의 스마트 장치에 응용될 수 있다.

- 4 -

Ⅱ. 정지영상의 크기 및 회전 변환

영상처리는 20세기 중반까지 아날로그 방식으로 이루어졌다. 이후 영상을 처리할 수 있는

능력을 가진 컴퓨터가 개발이 되면서부터 디지털 방식의 영상처리가 발전하기 시작하였다.

1970년대에는 의료 영상 처리, 위성사진처리 등의 분야에서 주로 연구가 진행 되었으며, 개

인용 컴퓨터의 성능 향상과 보급, 인터넷의 발달 및 디지털 카메라의 보급으로 영상처리 기

술들이 점점 일상생활 속에서 활용되고 있다.[11]

OpenCV 라이브러리는 영상처리, 기계학습 및 컴퓨터 비전 기능을 갖는 소스가 공개된 라

이브러리이다. 초기에는 Intel에서 C언어로 개발된 IPL(Image Processing Library)을 기반으로

만들어졌으며, 2000년에 공개되었다. 현재 2.4버전이 배포되고 있으며, 대표적인 컴퓨터 영상

처리 라이브러리 이다.[9][10] Windows, Linux, MAC, Android, iOS등의 다양한 OS를 지원한다.

OpenCV 라이브러리를 이용하여, 영상의 화질향상, 소실된 정보의 복원, 데이터의 압축 및

얼굴인식 등의 다양한 디지털 영상처리를 할 수 있다. 이는 의료, 산업, 보안 및 감시 시스

템, 증강현실 등에 활용되고 있다.

OpenCV 라이브러리는 영상처리, 기계학습 및 컴퓨터 비전 기능을 갖는 소스가 공개된 라

이브러리이다. 초기에는 Intel에서 C언어로 개발된 IPL(Image Processing Library)을 기반으로

만들어졌으며, 2000년에 공개되었다. 현재 2.4버전이 배포되고 있으며, 대표적인 컴퓨터 영상

처리 라이브러리 이다.[9][10] Windows, Linux, MAC, Android, iOS등의 다양한 OS를 지원한다.

OpenCV 라이브러리를 이용하여, 영상의 화질향상, 소실된 정보의 복원, 데이터의 압축 및

얼굴인식 등의 다양한 디지털 영상처리를 할 수 있다. 이는 의료, 산업, 보안 및 감시 시스

템, 증강현실 등에 활용되고 있다.

1. 크기의 변환

양손의 움직임에 따른 거리와 기울기의 변화에 따른 명령입력에 의해서 정지영상의 크기

와 기울기를 변환시키기 위해서 오픈소스 라이브러리인 OpenCV를 사용하여 구현할 수 있다.

OpenCV 라이브러리에서 제공하는 정지영상의 크기 변환에 대한 원리는 다음과 같다. 정지

영상의 크기를 가로방향으로 배 늘리고, 세로 방향으로 배로 변환하는 행렬식은 수식 3

과 같다.[9][10]

- 5 -

′′

수식 1 이미지 크기변환 행렬식

그림 1에서 원래이미지의 길이가 가로 a이고 세로 b라고하면, n배로 확대된 길이는 가로

na, 세로 nb가 된다. 따라서 가로방향과 세로방향의 확대비율 , 는 수식 1 과 같

다.[8][9]

x

y

0 a

b

na

nb

(x,y

) (x’,y’)

그림 1 크기변환시의 좌표이동

수식 2 크기변환시의 확대비율

원본이미지를 순방향 매핑을 사용하여 변환을 하게 되면, 그림 1 과 같은 빈공간이 존재하

는 이미지가 나타나게 된다.[9]

- 6 -

1 2

1 2 3 4

3 4 ⇒

그림 2. 정방향 매핑

빈공간이 없는 크기가 변환된 결과영상을 나타내기 위해서 결과 이미지의 픽셀에 들어갈

값들을 원본 이미지의 픽셀의 위치를 찾아 그 위치에서의 픽셀 값을 읽어오는 역방향 매핑

방법을 이용한다. 역방향 매핑에서 원본영상의 좌표(x, y)와 결과영상(x', y')의 관계식은 수식

3 과 같다.

′ ′

수식 3. 역방향 매핑시의 원본좌표

이때 각 픽셀의 좌표는 정수이어야 하는데, 정수가 아닌 실수 좌표들을 정수좌표로 만들어

주기 위해서 OpenCV 라이브러리에서 제공하는 여러 보간법들 중에, 실수좌표를 둘러싸고

있는 네 개의 좌표들에 가중치를 곱한 값들의 선형 합으로 결과 영상의 좌표를 구하는 양선

형 보간법을 사용하게 된다.

간단히 역방향 매핑에 의해 참조해야하는 원본의 좌표가 (w+m h+n)이라고 하자. 이때 w와

h는 정수이고 m과 n은 0에서 1사이의 실수라고 하자. 이때 이 실수 좌표를 둘러싸는 네 개

의 좌표는 (w, h), (w+1, h), (w, h+1), (w+1, h+1)이 된다. 이 좌표들의 픽셀 값을 각각 a, b,

c, d라고 하자. 그림 3에 나타내었다.

- 7 -

(w,h)

(w+1,h)

(w,h+1) (w+1,h+1)

c

a

b

d

wh

1-m

1-n

그림 3. 실수 좌표

a

c

b

d

x

y

z

그림 4. 실수 좌표의 값 비례식

x와 y의 값은 비례법칙에 따라 수식 4 에 의해서 구할 수 있다.[9][10]

수식 4. 좌표 값을 위한 비례식

그림 18에서 실수 좌표의 좌표 값 z는 x와 y를 이용하여 수식 5 와 같이 구할 수 있다.

수식 5. z의 좌표 값 계산공식

2. 회전 변환

이미지의 회전변환을 할 때 사용된 OpenCV 라이브러리의 원리를 설명하면 다음과 같다.

이미지를 회전할 때는 기준 점을 정하고, 이 기준점으로부터 원하는 각도만큼 회전을 시킬

수 있다. 좌표(x, y)를 임의의 각 θ로 회전하여 (x‘, y’)로 변환하는 행렬식은 수식 6 과

같다.

- 8 -

′′

cos sinsin cos

수식 6. 임의의 각에 대한 회전 행렬식

크기변환을 할 때와 마찬가지로 비어있는 픽셀이나 실수좌표가 생기지 않기 위해서 역방

향 매핑을 사용하고, 양선형 보간법을 사용한다. 변환된 영상의 좌표를 원본영상에서 읽어오

는 식은 수식 7 과 같다. 그림 5는 임의의 각에 대한 이미지의 회전의 예를 보이고 있다.

(x’,y’)

(x,y)

x

y

0

nh

nw

h

w

그림 5. 임의의 각에 대한 이미지 회전

cos·′ sin·′ sin·′ cos·′

수식 7. 회전식에 대한 원 좌표값

- 9 -

Ⅲ.Depth map에 의한 Skeleton Image 생성 및 손목

트래킹

기존의 Kinect 센서를 개발할 당시의 목적은 Microsoft사의 XBOX360 콘솔 게임기를 위한

입력 장치였다. Microsoft사에서 투자를 하고, Primesense라는 회사가 개발을 담당하였다.

Kinect 출시 약 1년 후에 PrimeSense사와 ASUS사에서 합작하여 Xtion이라는 Kinect 센서와

같은 기능을 가진 모듈을 출시하였다. Kinect와 Xtion의 IR 센서 부분의 재원은 표 2 와 같

다.

구분 Kinect Sensor Xtion

Depth stream 1.2 to 3.5 m 0.8 to 3.5 m

Field of View 43°(V), 57°(H) 45°(V), 58°(H)

Depth Image Size 320x240 / 30Frame320x240 / 60Frame

640x480 / 30Frame

OS support

Windows 7, Windows Server

2008, Windows Server 2008

R2, Windows Vista

Win 32/64 : XP , Vista, 7

Linux Ubuntu 10.10: X86,32/64

bit

Android

Programming

Language

C++, C#, or Visual Basic

(visual studio

2010)(recommended)

C++/C# (Windows)

C++(Linux)

JAVA

표 2 Kinect와 Xtion 재원

기본적인 사양은 비슷하나 Xtion이 Kinect 센서의 이후 모델이기 때문에 기능적으로 다소

향상된 것을 알 수 있다. 두 기기의 시스템은 Kinect 센서, 혹은 Xtion을 컴퓨터 및 기타 입

력을 필요로 하는 장치에 연결하고, 라이브러리를 사용하여 센서와 인터페이스 프로그램 사

이를 연결하는 방식으로 구성된다. 이러한 방식으로 이용자의 동작과 방향등을 감지하고, 정

해진 절차에 의해 원하는 방식으로 구동시킬 수 있다. 현재 Kinect 센서를 지원하는 라이브

러리는 Kinect for Windows SDK 와 OpenNI로 크게 2가지이며, 이를 활용하고 응용하기 위한

다양한 오픈소스 형태의 모듈이 개발되어 지고 있다. Kinect 센서의 경우 Microsoft에서

Kinect SDK 라는 명칭으로 총괄적으로 개발 및 배포를 하고 있으며, Xtion의 경우 OpenNI라

는 개발자 그룹을 통해서 오픈소스의 형태로 개발 및 배포가 된다. 또한 OpenNI의 경우

- 10 -

Kinect 센서까지도 지원을 하고 있다. 각 라이브러리에 따라서 지원하는 OS와 프로그래밍 언

어 또한 다르다. 두 하드웨어의 기본적인 구조가 동일하기 때문에 OpenNI 라이브러리의 경

우 Kinect 센서에도 적용할 수 있다.

본 논문에서는 하드웨어 장치로는 게임용으로 배포되어 좀 더 많은 사용자를 가진 Kinect

센서를 이용하고, 소프트웨어로는 OpenNI 라이브러리를 사용하였다. OpenNI를 사용한 이유

는 오픈소스의 특성상 여러 개발자들의 피드백과 자료의 다양성 때문이다. Kinect 센서에 장

착된 IR 프로젝터와 IR 카메라를 이용하여, 2차원 평면뿐 아니라 피사체와의 거리에 의한 3

차원 인식이 가능하다.

Kinect 센서는 depth map 이라는 형태로 PC등의 수신 장치에 피사체의 거리 및 평면좌표

값을 전달하게 된다. 이를 이용하여 Kinect 센서가 바라보는 방향에 대한 거리를 측정할 수

있게 된다. 이렇게 수신된 depth map에서 Skeleton 이미지를 생성 할 수 있다. 생성된

Skeleton 이미지에서 신체의 주요 관절에 대한 x, y, z의 3차원 좌표를 읽어 올 수 있다. 명

령의 구분에 있어서는, 인식된 사람의 손동작을 트래킹 하여 유효명령일 때 양 손의 위치변

화에 따라 화면의 영상을 확대, 축소 및 회전하고 한 손의 위치변화에 의하여 이전 또는 다

음 영상을 선택하도록 하였다. 유효명령의 결과로서 정지영상의 처리를 위해서 OpenCV 라

이브러리를 이용하여 영상의 변형에 응용하였다.

1. Depth map 생성

Kinect 센서는 그림 6과 같은 모양을 가지며 IR프로젝터가 전면의 피사체에 IR을 주사하여

피사체와 거리에 대해 320x240의 해상도의 depth map을 초당 30 프레임을 생성한다.

그림 6 키넥트 센서

그림 6은 Kinect 센서의 구성을 각각 기능을 하는 모듈별로 간략하게 나타낸 것이다.

Kinect센서는 RGB카메라와 마이크로폰 어레이, Tilt 모터, 그리고 IR부분으로 구성되어있다.

- 11 -

Tilt 모터의 경우 상하로 이동할 수 있도록 구성되어있어, 각기 키가 다른 사용자를 트래킹

할 때 사용할 수 있다. 마이크로폰 어레이의 경우 소리가 나는 음원의 방향과 거리까지도 감

지해 낼 수 있다. RGB 카메라의 경우 640x480의 해상도를 가지는 일반적인 카메라와 동일하

다.

IR 센서

Tilt 모터

RGB 카메라IR 프로젝터

마이크로폰 어레이

그림 7 Kinect 센서의 구조

본 논문에 중점적으로 사용된 IR 프로젝터와 IR 센서의 동작은 그림 7과 같다. IR 프로젝

터에서 CRT TV의 레스터가 각 픽셀에 색을 주사하듯이 전방을 향해 정해진 해상도로 IR을

주사한다. Kinect 센서의 경우 320x240의 주사선을 가진다. 주사된 IR이 물체에 반사되어 오

는 것을 IR 센서가 수신을 하게 되고, 수신된 빛을 인식 및 처리하여, 픽셀 당 거리를 측정

하게 된다. Kinect 센서가 IR 프로젝터와 IR 센서를 이용하여 depth map을 생성하는 전반적

인 흐름은 그림 8에서 볼 수 있다. 측정된 픽셀 거리를 Kinect 센서 내부에 구현되어있는

software를 통해서 320x240 해상도의 depth map을 초당 30 프레임 생성하게 되고 이를 통해

서 피사체의 움직임을 표현한다. 이렇게 생성된 depth map은 필요로 하는 장치 즉 PC나

XBOX306 등의 어플리케이션이 구현되어 있는 장치에 전송하게 된다.

- 12 -

그림 8 Kinect Sensor의 IR 동작원리

그림 9 Primesense의 3D sensor

- 13 -

IR을 이용한 depth map 생성에 있어서 Kinect 센서의 장점은 IR을 주사하는 부분을 가지

고 있기 때문에 조명에 상관없이 실내외에서 사용할 수 있다는 점이다.

Depth map의 각 픽셀은 x, y, z의 3차원 좌표 값을 가진다. 3차원 좌표에 대한 방향은 그

림 10 에서 나타내었다. 여기서 x는 수직좌표이고, y는 수평좌표이다. z는 피사체와 Kinect

센서의 거리에 대한 좌표이다. 이렇게 하나의 픽셀에 대해서 3가지 값을 가지는 좌표를

Kinect 센서는 320x240 해상도의 프레임을 초당 30 프레임까지 생성하게 되고, Xtion의 경우

는 320x240 사이즈의 프레임을 초당 60프레임까지, 640x480 해상도의 프레임을 초당 30 프레

임까지 생성을 할 수 있다.

이렇게 생성된 depth map 데이터를 Microsoft사의 Kinect for Windows SDK 혹은 OpenNI

라이브러리를 이용하여 그림 11과 12에 나타난 것과 같이 사람의 신체를 15개 혹은 20개의

관절을 포인트로 구분한 skeleton 이미지를 생성하게 된다[5].

이때 OpenNI 라이브러리는 그림 13과 같이 전체시스템의 middleware로서 구동하며, Kinect

센서와 어플리케이션의 중간 단계로서 depth map의 활용과 Skeleton이미지의 생성을 담당하

고, OS에 대하여 디바이스 드라이버를 제공한다.

그림 10 Depth map 좌표

- 14 -

그림 11 OpenNI에서 생성하는 신체좌표

그림 12 Kinect for windows SDK에서 생성하는

신체좌표

- 15 -

그림 13 middleware로서의 OpenNI

2. 사용자 인식에 의한 Skeleton 이미지 생성

Kinect for Windows SDK의 경우 IR 프로젝터가 주사하는 범위 내에 사람이 감지되면 자동

으로 사람을 인식하고 Skeleton 이미지를 생성할 수 있도록 구현되어 있고, OpenNI 라이브러

리의 경우 초기인식 동작이 필요하다. 두 라이브러리 모두 Kinect가 인식하는 범위 내에 여

러 개의 움직임이 있는 피사체가 존재하는 경우, 각 피사체 마다 콘텍스트의 형태로 각각의

객체를 생성하고 개별적으로 트래킹을 하게 되며, 각 객체로 Skeleton 이미지를 생성할 수

있다. OpenNI 라이브러리의 경우 초기 인식 동작을 행한 콘텍스트에 대해서 Skeleton 이미지

를 생성하게 되어있고, Kinect SDK의 경우 이를 자동으로 수행 하도록 구현이 되어있다. 이

렇게 여러 개로 생성된 Skeleton 이미지를 Index별로 관리하고, 응용할 수 있다.

본 논문에서는 최초 인식된 사용자를 명령입력자로 한다. 초기인식 동작에서 사람의 형태

로 인식이 되면, 이를 가지고 Skeleton 이미지를 생성할 수 있다. 그림 14는 OpenNI 라이브

러리를 사용한 경우이고, 초기동작을 취하고 있다.

- 16 -

그림 15 Kinect 응용프로그램의 흐름도

그림 14 초기 Skeleton 이미지

3. Kinect 센서에 의한 동작인식

생성된 skeleton 이미지에서 각각의 관절 포인트에 대응하는 3차원 좌표 값을 구할 수 있

게 된다. 본 논문에서 제안하는 방법은 양손의 손목에 대한 좌표 값만을 이용하는 것으로,

손목 관절의 포인트의 움직임과 위치 변화에 대한 데이터를 Kinect 센서의 3차원 영상정보에

서 얻어지며 이에 따라 화면의 영상을 제어하게 된다. 이를 위한 응용프로그램의 흐름도는

그림 15와 같다.

Kinect 센서의 초기화가 마무리되면, depth map을 생성하게 되고, 이를 활용하여 사람인지

아닌지를 판단하고 사람으로 인식되면 양손을 트래킹 하게 된다. 양손의 움직임이 유효동작

으로 판단되면, 이를 정지영상의 이미지 변환의 입력으로 활용하는 것으로 프로그램이 진행

- 17 -

된다. 양 손이 움직이는 범위를 그림 16과 같이 사용자의 양손이 몸통을 중심으로 좌, 우측

으로 양손이 닿을 수 있는 범위와 머리부터 허리까지의 범위를 유효한 동작으로 사용하도록

하였으며 변화의 범위는 사용자마다 초기 과정에서 정한다.

그림 16 유효동작의 손동작 범위

영상의 제어를 위한 값으로 3차원의 위치 좌표 값 중에서 양손의 3축 좌표를 이용하고, x

축과 y축에 대해서는 거리와 기울기의 형태로 값을 계산한 후 이를 이미지를 처리하는 파라

미터로 활용한다. 이유는 사용자가 Kinect 센서 앞에서 정지한 상태로 양손을 움직이는 것을

인식하는 것이 목적이기 때문에 양손의 기본적인 평면위치 값인 가로축(x)과 세로축(y) 방향

의 좌표 값을 영상제어에 사용하는 것이다. 나머지 거리(z)방향의 좌표는 명령으로서의 손동

작과 명령이 아닌 손동작의 구분을 위한 기준 으로서 사용한다. 15개의 신체에 대한 관절 포

인트로 구성된 Skeleton 이미지에서 몸통의 중심의 좌표를 가지고 와서, 몸통의 z좌표와 양

손의 z좌표와의 차이가 일정 거리 이상일 때만 유효동작으로 인식하도록 하였다. 3축의 좌표

를 이처럼 사용했을 때의 얻을 수 있는 이점은, 사용자가 Kinect 센서의 IR이 인식할 수 있

는 범위 내에서 좌우전후로 이동을 하여도 사용자의 위치와는 상관없이 양손의 거리와 기울

기를 계산할 수 있고, 또한 몸의 중앙을 나타내주는 Skeleton좌표의 거리와 손목의 거리의

차이가 일정기준 이상일 때만 유효손동작으로 인식하는 것으로 위치와 depth map 내의 어느

위치에 있어도 원하는 결과 값을 얻을 수 있다.

Kinect 센서에서 x, y, z 좌표 값은 1초에 30번 입력되는 프레임에서 depth map 데이터에

서 추출할 수 있으며 현재 프레임과 다음 프레임에서 각각 양 손의 depth 데이터를 얻고 여

기서 양 손의 위치를 얻게 된다. 이렇게 얻어진 전후의 양손의 위치에서 기울기와 거리차이

를 수식 8과 수식 9를 사용하여 계산 할 수 있다.

- 18 -

수식 8 두 좌표사이의 거리

수식 9 두 좌표사이의 기울기

또한 양 손동작을 인식하는 예민도를 이전 프레임과 다음 프레임의 양 손의 변화량이 일

정 수준일 때만 인지하도록 조정할 수 있다. 이는 심장박동 등의 사용자가 의도하지 않은 손

동작으로 인한 명령을 제거하기 위함이다. 양 손을 벌리고 오므리는 동작은 초당 30 프레임

의 skeleton 이미지에서 양 손목 관절의 포인트의 x, y 축의 좌표의 변화를 프레임 마다 계

산하여 현재 프레임에서 양 손의 거리와 다음 프레임에서 양 손의 거리의 비율만큼 현재 프

레임에 대한 영상의 크기를 확대 또는 축소하여 다음 프레임 영상의 크기를 조정한다.

그림 17과 18에서 현재 프레임에서 얻은 양손의 위치인 (x1,y1), (x2,y2)에서 얻은 양 손의

거리 D1 와 다음 프레임에서 얻은 양 손의 위치인(x1’,y1’), (x2’,y2’)에서 얻은 양 손의

거리 D2 를 비교한다. 그림 17은 양 손을 벌리는 상태로 D1 보다 D2의 값이 크며 D1 대비

D2의 늘어난 비율만큼 영상을 확대하도록 한다, 그림 18 은 양 손을 오므리는 상태로 D1 보

다 D2 의 값이 작으며 역시 D1 대비 D2의 줄어든 비율만큼 영상을 축소하도록 한다[6][7].

그림 17 양 손을 벌린 경우

그림 18 양 손을 오므린 경우

- 19 -

양손의 각도의 변화, 즉 기울기의 변화량으로 정지영상의 각도를 변화시키며 그림 19와 같

다. 양 손의 각도 변화 역시 현재 프레임에서 얻은 양손의 위치인 (x1,y1), (x2,y2) 를 잇는 직

선 D1 와 다음 프레임에서 얻은 양 손의 위치인(x1’,y1’), (x2’,y2’)를 잇는 직선 D2의 기

울기 변화를 비교한다. 두 직선 D1과 D2 의 기울기 차이만큼 영상을 시계 방향 또는 반시계

방향으로 회전하도록 한다.

D1D2

그림 19 양 손을 회전 시키는 경우

양 손의 거리 변화와 기울임의 변화가 동시에 있어도 거리의 변화량과 기울기의 변화량을

각각 계산하여 영상의 확대 축소 및 회전을 제어하는데 이용할 수 있다.

- 20 -

Ⅳ. 실험

본 논문에 실험을 구현하기 위하여 사용된 개발환경은 표 3과 같다.

Operating System WINDOWS 7 Enterprise k

CPU AMD Phenom 9950 Quad-Core

Language Tool Microsoft Visual studio 2008

Main Memory 4G byte

표 3 개발환경

Microsoft Kinect SDK 라이브러리를 사용경우, 권장환경은 Windows 7, Visual Studio 2010

이다. OpenNI의 경우 여러 OS를 지원할 뿐만 아니라, 다양한 개발언어와 환경을 지원하기

때문에 위의 표와 같은 환경에서 개발이 가능하였다.

본 실험에 사용된 위해 구현된 소프트웨어의 흐름도는 그림 20 과 같다.

OpenNI 라이브러리가 PC환경에 정상적인 설치가 되어있다는 조건과, Kinect 센서의 초기

화 과정은 이루어졌다는 조건에서, 구현된 프로그램이 동작하게 되면, Kinect는 IR 프로젝터

와 IR 센서를 이용해서 depth map을 생성하고 middleware 인 OpenNI 라이브러리 쪽으로 전

달을 한다. 이때 PC와 Kinect 센서의 연결은 USB로 이루어진다. OpenNI 라이브러리는 kinect

센서에서 생성된 depth map에서 움직임이 있는지 없는지를 판단하고, 움직임이 있으면 움직

이는 물체에 대한 context 생성하고, 트래킹을 실시하게 된다. 이후 초기 입력동작으로 사람

임을 인식시키면, OpenNI 라이브러리를 활용해서 Skeleton 이미지를 생성하게 된다. 초기 입

력동작을 해야 하는 이유는 본 논문에서 사용된 OpenNI버전은 입력 값을 받도록 개발이 되

어있다. 이렇게 생성된 Skeleton 이미지에서 각 신체 관절을 대표하는 포인트들의 좌표 값을

읽어 올수 있다. 다음단계는 어플리케이션 단계로서 Skeleton 이미지에서 읽어온 필요 신체

포인트들의 좌표 값들을 적절하게 연산하고 활용하게 되는데, 본 논문에서는 양손의 위치와

Kinect 센서와 몸의 중심좌표의 거리 및 양손의 Kinect 센서와의 거리 등의 좌표를 사용하여

기울기 및 양손의 거리를 계산하고, 이를 정지영상의 파라미터 값으로 전달하는 부분과

OpenCV 라이브러리를 사용해서 이미지의 크기변환 및 회전변환에 사용하고, 윈도우즈 라이

브러리를 활용하여 정해진 경로내의 이미지 파일을 선택하는 부분으로 나뉘게 된다.

Skelton 이미지가 생성되고 나면, OpenCV 라이브러리를 사용하여 선택된 폴더 내에 있는

- 21 -

첫 번째 이미지를 화면상에 그리게 된다. 이후 Skelton 이미지를 활용하여 유효동작일 때 명

령으로서 OpenCV 라이브러리에 전달되고 이에 상응하는 동작을 하게 된다.

그림 20 구현된 프로그램의 흐름도

1. 사용자 인식

실험을 위하여 Kinect 센서용 OpenNI 라이브러리 1.3.4.3 버전을 사용하여 사용자를 인식하

고 skeleton 이미지를 생성하였다. 프로그램은 C++로 작성 되었으며 Microsoft Visual studio

2008 버전을 사용하여 코딩하고, 윈도우7 Ultimate k 환경에서 수행되었다. 정지영상의 확대

및 축소를 위해서 OpenCV 1.0버전을 사용하였다. 1.3.4.3 버전의 OpenNI 라이브러리는 프로

- 22 -

그램의 실행 초기에는 즉 피사체의 움직임을 감지하기 전에는 사용자를 인식하지 않으므로

Kinect 센서의 이미지는 그림 21 과 같으며 skeleton 이미지가 생성되지 않았다.

그림 21. 프로그램 실행 초기

Kinect가 측정중인 전방에 움직임이 발생하면 움직이는 피사체를 감지하게 된다. 그림 22

은 움직임이 하나일 때를 나타낸 것이고, 이때 발생되는 사용자 인덱스가 그림 23에 나타나

있다.

그림 22. 단일 피사체의 움직임 인식

- 23 -

그림 24는 피사체가 여러 개 움직일 때를 나타낸다. 그림 25은 사용자 인덱스 1번부터 4번

까지 인식이 된 후, 2번과 3번 사용자 인덱스에 해당하는 피사체가 Kinect 센서의 감지 범위

에서 사라진 경우이다. 최종적으로 2개의 피사체만이 화면에 나타나고, 사용자 인덱스가 생

성되고 사라지는 과정을 그림25에 나타내었다. 이 후 사용자 인덱스 4번인 피사체가

Skeleton 이미지를 생성하기 위하여 초기 동작을 시도하는 그림은 그림 24에 나타나 있고,

그림 25에서 Skeleton 이미지의 생성을 위한 초기동작을 확인하는 것을 볼 수 있다. 본 논문

에서는 이렇게 여러 개의 피사체가 움직임을 나타낼 때에는 최초로 Skeleton 이미지를 생성

한 사용자를 명령입력자로서 인식하게 구현되었다.

하나의 움직임 감지

그림 23 단일 피사체에 대한 인덱스

- 24 -

그림 24. 여러 피사체의 움직임 인식 및 Skeleton 이미지 생성

4개의 움직임 인식

Skeleton 이미지 생성

피사체 2,3 번 사라짐

그림 25. 여러 피사체에 대한 인덱스 및 Skeleton 이미지 생성

Kinect 센서가 피사체의 움직임을 감지하고 그림 24 와 같이 사용자가 초기동작을 취하게

되면, 사용자에 대한 초기 Skeleton 이미지를 생성한다. 이후 매초 30 프레임의 속도로

Skeleton 이미지를 생성하게 되고, 생성된 이미지에서 양 손의 좌표와 유효동작 판단의 기준

이 되는 몸통의 중심좌표 간의 거리를 계산한다. 초기 Skeleton 이미지가 생성된 후, 양손의

- 25 -

좌표를 추적하는 것을 그림 26 에 나타낸다. 양손과 몸의 중심점의 x, y ,z축의 좌표와 몸의

중심점의 z축과 양손의 z축의 차이를 그림 26 에서 확인할 수 있다.

이전프레임의

양손과 몸의 중심의

x,y,z 좌표

현재프레임의

양손과 몸의 중심의

x,y,z 좌표

그림 26. 이전 프레임과 현재 프레임의 양손과 몸의중심의 x, y, z 좌표

그림 27. 양손의 트래킹

- 26 -

그림 27에서 Skeleton 이미지가 생성된 후, 계속해서 사람을 인식하고 각 신체 마디에 해

당하는 좌표를 활용하여 Skelton 이미지가 생성됨을 확인 할 수 있다.

구현된 프로그램에서는 유효명령으로서 조건이 충족되어도 프레임 마다 손동작의 변화량

이 5% 이상인 경우에만 정지영상의 변환에 반영하도록 프로그램 하였으며 변경 가능하다.

2. 정지영상 크기 제어

초당 30 프레임의 속도로 입력되는 skeleton 이미지에서 양 손을 그림 29 과 같이 영상을

확대하는 동작을 하였다. Skeleton 이미지에서 각 프레임의 손의 위치거리를 구하고 전후 프

레임간의 차이를 계산하여 변화된 거리를 OpenCV 라이브러리의 파라미터로 활용한다.

Skeleton 이미지에서 양 손의 거리가 늘어나고 늘어난 비율만큼 그림 28의 영상을 확대하여

그림 30에서 보인다. 이때 몸 중심의 z 좌표와 양손의 z좌표의 차이는 정해진 값 이상이고,

이전 frame의 양손의 거리와 현재의 양손의 거리의 차이가 5%이상이다. 따라서 영상의 크기

제어로서의 유효 값이 되기 때문에 현재 사용자의 양손의 거리차이와 이전 frame에서 계산

된 양손의 거리의 차이를 반영하여 OpenCV 라이브러리의 파라미터로 전달하고 이를 반영하

여 원본영상의 크기를 확대하게 된다.

그림 28. 원본 영상

표 4는 양손을 벌린 경우에 양손의 좌표의 변화에 대한 예시이다. 양손을 벌리는 동작을

시작하고 10 프레임 후 양손을 벌리는 동작을 완료하였을 때의 양손의 좌표의 변화를 볼 수

있다. 각각 x, y, z는 시작시의 양손의 좌표이고 x’, y’, z’는 10프레임후의 양손의 좌표이

다. 표에서 음수의 좌표가 생기는 이유는 몸의 중심 좌표를 기준으로 양손의 x와 y 좌표에

대한 상대 거리이기 때문이다. z와 z’는 Kinect 센서와의 거리를 나타낸다.

- 27 -

그림 29. 영상 확대 동작

그림 30. 확대된 영상

좌표

위치x y z x’ y’ z’

왼손 -255 339 2015 -476 303 2105

오른손 134 397 1977 464 499 2079

표 4. 양손을 벌린 경우의 좌표 변화

- 28 -

그림 31 는 skeleton 이미지에서 양 손에 의하여 영상을 축소하는 동작을 보인다. 그리고

그 결과 축소된 영상을 그림 32 에서 보인다. 영상을 축소하는 동작에 있어서도 확대와 마찬

가지로 유효명령의 조건을 만족하고, 변화의 량이 5%이상이기 때문에 이전 프레임의 양손의

거리와 현재의 양손의 거리의 차이를 OpenCV의 파라미터로 전달하여 원본영상을 축소하게

된다.

그림 31. 영상 축소 동작

그림 32. 축소된 영상

좌표

위치x y z x’ y’ z’

왼손 -234 346 2028 -165 340 2025

오른손 178 360 1995 76 358 1986

표 5. 양손을 오므린 경우의 좌표 변화

- 29 -

표 5는 손을 오므리기 시작한 시점과 10프레임 후의 양손의 좌표를 각각 x, y, z 와 x’,

y’, z’로 나타내었다.

3. 전후 영상 선택

하나의 폴더에 여러 개의 영상 파일이 존재할 때 파일 이름순으로 선택하여 이전 또는 이

후의 영상을 화면에 보여주기 위한 제어 동작을 구현하였다. 윈도우 API에서 제공하는

Class를 사용하여 정해진 폴더내의 파일들에 대한 정보를 읽어오고 알파벳순으로 정렬한 후

파일들의 순서를 정하였다. 이 경우에는 양 손을 사용하지 않고 한 손은 고정하고 다른 한

손만 움직여서 영상 파일을 선택하도록 하였다. 고정된 손의 조건은 손의 y좌표가 몸의 중심

의 y좌표 보다 아래에 존재하고, 손의 z좌표와 몸의 중심의 z좌표간의 차이가 일정 수준 이

하 일 때만 고정을 간주하도록 구현하였다. 다른 손은 명령으로서의 유효동작으로 판단되는

조건은 몸의 중심좌표와 손의 z축 거리의 차이가 일정수준 이상이고, 손의 움직임 궤적이 몸

의 중심좌표의 x축 좌표를 지나가 몸 중심을 기준으로 반대쪽으로 넘어가는 경우를 파일을

선택하는 명령으로 인식하도록 구현하였다. 왼손만 움직일 경우 이전의 영상을 보이도록 하

였고 오른손만 움직일 경우 다음 영상을 보이도록 하였다. 실험 결과를 그림 33 과 그림 35

는 이전 영상을 선택하여 보이는 경우이며 그림 34 과 그림 36 에서는 다음 영상을 선택하

여 보이는 경우 이다.

그림 33. 이전 영상 선택 동작

- 30 -

그림 34. 다음 영상 선택 동작

그림 35. 이전 영상 선택

그림 36. 다음 영상 선택

- 31 -

좌표

위치x y z x’ y’ z’

왼손 -174 -182 2468 -192 -130 2505

오른손 352 323 2029 -318 303 2142

표 6. 다음 이미지 선택 동작 시 좌표변화

좌표

위치x y z x’ y’ z’

왼손 -237 344 1980 36 300 2022

오른손 219 -206 2486 224 -186 2504

표 7. 이전 이미지 선택 동작 시 좌표변화

표 6과 7의 좌표는 x, y, z를 시작으로 해서 10프레임 후의 양손의 좌표를 x’, y’, z’로

표시하였다. 표 6에서 왼손은 고정되어 있고, 오른손의 x좌표만이 양수에서 음수로 변화되는

것을 볼 수 있다. 이는 다음 이미지를 선택하는 명령의 조건과 동일하다. 표 7에서 오른손은

고정되어있고 왼손은 음수에서 양수로 넘어가는 것을 보이고 있다.

4. 정지영상 회전 제어

영상의 크기변환과 마찬가지로 Skeleton 이미지에서 양손의 좌표 x, y, z의 좌표를 읽어오

고, 양손과 몸의 중심의 z좌표의 차이가 일정 수준이상일 경우 유효명령으로 간주하고, 양손

의 x와 y좌표를 활용하여 기울기를 산출한다. depth map의 전후 프레임간의 기울기의 차이

를 계산한 후 변화량이 5% 이상일 경우, 앞서 설명한 이미지 회전을 위한 각도 θ로서 활용

하여 OpenCV의 함수에 파라미터로 전달된다. OpenCV 라이브러리는 이용하여 영상을 회전

한다.

그림 37 는 반 시계방향으로 회전시키는 동작이며 그림 39 에서 반 시계방향으로 회전된

영상을 보인다. 그림 38 은 시계방향으로 회전시키는 동작이며 그림 40 에서 시계방향으로

회전된 영상을 보인다. 표 8과 9의 좌표는 x, y, z를 시작으로 해서 10프레임 후의 양손의 좌

표를 x’, y’, z’로 표시하였다.

- 32 -

그림 37. 반시계방향 회전 동작

그림 38. 시계방향 회전 동작

- 33 -

그림 39. 반시계방향 이미지 회전

그림 40. 시계방향 이미지 회전

좌표

위치x y z x’ y’ z’

왼손 -269 313 2035 -378 132 2117

오른손 217 336 2006 239 522 1997

표 8. 양손을 시계반대방향으로 회전시키는 경우의 좌표 변화

- 34 -

좌표

위치x y z x’ y’ z’

왼손 -319 345 2020 -225 519 2022

오른손 283 329 2006 175 61 2057

표 9. 양손을 시계방향으로 회전시키는 경우의 좌표 변화

- 35 -

Ⅴ. 결론

컴퓨터 및 기계장치들이 인간의 생활과 밀접한 관계를 가지게 됨에 따라 편리하고 직관적

인 사용법을 가진 인간친화적인 컴퓨팅은 필수적인 요소라고 할 수 있다. 다종다양한 미디어

의 활용과, 보다 쓰기 쉬운 컴퓨터 및 기기 장치의 요구가 확대되고, 소프트웨어의 생산성

향상 등으로 컴퓨터의 응용 분야가 확대되자, 종래의 컴퓨터의 입력방식과 전혀 다른 방식의

입력장치에 대한 시도가 계속되어지고 있다.

본 논문에서는 사람의 몸동작 중 가장 직관적인 의사전달 수단인 손동작을 이용하여, 사용

자 중심의 UX를 구현하는 하나의 방법을 제시하였다. Kinect 센서의 IR 프로젝터 및 IR 센서

를 이용하여 초당 30프레임의 속도로 생성되는 3차원 depth map에서 OpenNI 라이브러리를

이용하여 Skeleton 이미지를 생성하였다.

생성된 Skeleton 이미지에서 양손과 몸통의 중심 좌표를 알아내고, 몸통과 양손의 관계에

따라 유효동작을 구분해 낸 후, 양 손의 위치 변화를 프레임 단위로 인식하고 위치 변화량에

따라 영상의 크기 및 회전을 제어 할 수 있는 UX를 제시하고 실험에 의하여 구현하여 기능

을 확인하였다. 정지영상의 제어에는 OpenCV 라이브러리를 이용하여 이미지를 변환하였다.

키넥트에서 생성해 주는 depth 맵의 경우 하드웨어 적으로 1초당 30 프레임의 속도로 생

성을 해서 응용프로그램으로 넘겨주는 것으로 정해져 있는 특성을 가지고 있다. 이 depth

map에서 skeleton 이미지를 생성하는 것으로부터, 정지이미지의 크기와 기울기를 변환하기

까지 걸리는 시간은 1.5ms에서 2.5ms 정도의 속도로서 초당 30프레임의 depth 데이터가 들

어오는 간격이 약 30ms 인점을 감안하면 충분한 처리시간이다.

별도의 사용법에 대한 학습이 필요없고, Kinect 센서 앞에서 손동작을 함으로서 이미지가

변환되는 정도를 확인하면서 손의 움직임을 직관적으로 제어할 수 있다. Kinect 센서와 제공

되는 라이브러리 그리고 컴퓨터로의 연결 등의 시스템 모델은 다양한 동작을 정해진 구성에

의해서 어플리케이션으로 개발 할 수 있다는 점에서 개발자들과 연구자들에게 호소력이 있

다.

- 36 -

참고문헌

[1] 인간 친화적인 컴퓨팅 시장의 도래, KIPA, SW 산업동향 1p. 2080.

[2] 배현, 김영진, 지능형 로봇 기술 동향, 정보통신산업진흥원, 주간기술 동향 통권 1433호

5p. 2010.

[3] 백유광, 한경호, “험로 주행을 위한 다중모듈 로봇의 설계”, 전기전자학회논문지 14(2),

pp.132-137,2010.

[4] 조성원, 한경호, “영상정보에 의한 자세변화 감지 시스템”, 전기전자학회논문지 14(5),

pp.291-296,2010.

[5] Rosenfeld, A. and Pfalz J.L “Sequential Operations in Digital Picture Processing”,

Journal of the ACM, vol. 13, No. 4, pp.471-494, 1966.

[6] M.Roushdy, “Detection Coins with Different radii based on Hough Transform in

Noisy and Deformed Image”, GVIP Journal 7(1), pp.25-29, 2007.

[7] M. Pollefeys, Tutorial on 3D Modeling from Images, ECCV2000.

[8] 박양섭, 효율적인 영상정합을 위한 개선된 Harris 모서리 검출기, 금오공과대학교 대학

원, 2006.

[9] 황선규, IT EXPERT 영상처리 프로그래밍 by Visual C++, 한빛미디어, 서울, 2007.

[10] 황선규 역, OPENCV 제대로 배우기, 한빛미디어, 서울, 2009.

[11] 정성환, 이문호, OPENCV를 이용한 컴퓨터비전 실무 프로그래밍-기본편, 홍릉과학출

판사, 서울, 2007.

[12] www.microsoft.com

[13] www.primesense.com

[14] DigiEco(www.digieco.co.kr), 안세열, 김학균, 정영준, 구명완 ‘멀티모달 상황인지 인터

페이스의 최신 기술동향’

[15] 김병기, 고영웅, 송창근, 장재혁, 적외선 카메라와 웹 카메라를 이용한 마커 트래킹 시

스템, 정보과학회논문지 제16권 제7호, pp.753-758,2010.

- 37 -

(Abstract)

Remote Image Control by Hand Motion Detection

Junggeun Lim

Department of Electronics and Electrical Engineering

Graduate School

Dankook University

Advisor:Professor Kyongho Han

This paper handles the UX interface implementation for system control using

the visual input information of hand motion detection. Kinect sensor from

Microsoft is used to acquire the user’s skeleton image from the 3-D depth map

and x-y coordinate of both hands joints are acquired from the skeleton images

at a rate of 30 frames per second.

The hand motion of widening, narrowing and tilting with their amount of

distance and angle variations are used as the UX input commands to control the

size and rotation of the images. One-hand motion is used to move to next or

previous image. MS libraries and OpenCV libraries are used for image control

- 38 -

software and the experimental system is built on PC Windows environments for

experimental system for operation confirmation of proposed idea.

The proposed idea can be applied to various area in smart TV and mobile

devices, etc for improved UX interface of GUI.