요 몇주간 세미나 및 행사, 그리고 출장으로 인해 프로그램을 손볼수가 없었는데,
몇일동안 다시 으쌰 으쌰 해서 진도를 좀 나갔다.
이번에 한것은 손끝점 (Finger Tip) 찾기 인데,
이런저런 방법들을 많이 써봤는데 정리를 하면..
1. ConvexHull 을 이용하여 최외곽 포인트를 손끝점으로 인정
누구나 다 쓰는 국민알고리즘??이라고 해야하나..?? 어째뜬 가장 직관적이면서 이해하기 쉬운 방법이다. 다각형을 포함하는 가장 큰 외곽 태두리를 컨벡스헐 이라고 말하는데, 이를 이용하면 손을 피든, 쥐든, 손가락을 접든간에, 최 외곽선만 따기때문에, 쉽게 검출할수있다. 하지만.. 손가락 이외의것들, 예를 들면 손목이 잡힐수도 있다. 그러하여.. 사용X
2. 세선화를 통해 가장 끝점 좌표를 매칭
세선화를 통하여 정확한 손끝점을 찾을수가 있다. 하지만.. 가장 큰 문제인 퍼포먼스... 한마디로 이야기해서 저질이다. 프레임이 뚝!! 떨어진다. 실시간으로 영상을 처리해야하는 나의 프로그램으로는 아쉽지만.. 사용X
3. K-Curvature 를 이용하여 손끝점 찾기
세점을 이용하여 사이각을 구할수가 있다. 각각 점을 이용하여 두 벡터를 구할수 있고, 이 두 벡터를 이용하여 내적공식을 사용, 사잇각을 구할수가 있다. 이를 이용하여, Contours 에서 K개 단위로 조사하여 구해진 각이 일정범위 안이면 손끝점이라고 인지하게 하는것이다.
이차함수때부터 수학에서 손을 땐 나로써는 새로운 도전이었지만, 몇개의 논문과 구글링과 네이버 검색을 통해 식을 찾고 적용시켜 보기로 했다.
[참고 논문]
- Real-time Hand Tracking and Finger Tracking for Interaction (2003)
- Vision Based hand tracking for Interaction (2008)
그리고 몇일동안 씨름을 한 결과..
나름의 결과를 얻을수가 있었다.
하지만, 아직도 정형화 되지않은 나의 코딩실력으로 인해 프로젝트 소스코드는 너무도 난잡해졌다.. OTL...
조만간 다시 시간 내어 정리해야겠다.
(프로그램은 Debug 에서 30프레임을 유지하는데, 빌어먹을 인코딩으로 인해 느리게 나왔네;; 이런 ㅋㅋ)
'[ Topics ] > Kinect 1.0' 카테고리의 다른 글
NuiInitialize() 에서 뻗는 문제점과 해결방법 (8) | 2012.08.13 |
---|---|
(151106 소스코드 추가) RGB 이미지와 Depth 이미지의 Calibration (20) | 2012.04.24 |
Kinect SDK 에서 Type 별 지원 Resolution (0) | 2012.01.18 |
Skeleton 의 Joint 와 Depth 값 구하기(130923_소스추가) (40) | 2012.01.07 |
키넥트를 이용하여 진행 할 나의 프로젝트에 대한 고찰과 Hand-Tracking 개요 (0) | 2012.01.07 |