티스토리 뷰

보통 영상처리를 하면 웹캠을 활용해서 처리하는데 저는 키넥트로 하다보니까 주변에 소스도 없고 참 난감하네요. 아무튼 지난 포스트에서는 Convexhull을 활용해서 가장 외곽점을 이어주는 도형을 보여드렸습니다. 사실 손가락의 갯수는 그걸로 끝납니다. 그냥 Convexhull을 한 점에다가 cvCircle을 해주고 그렇게 해서 생긴 원의 갯수를 활용하면 손가락 몇개인지 구분이 됩니다. 하지만 거기에도 문제는 있습니다.

 그때는 손이 항상 위를 가리키고 있을 때니까 일정하게 정해진 갯수만 빼주면 되지만 만약 손이 옆에서 들어온다던가 위에서 나오면 원의 갯수가 꼭 손가락의 갯수만큼 생긴다는 걸 보장할 수 없습니다. 물론 그에 따른 보정코드도 필요할 것이고요.

 그리고 제가 못하는 건지는 모르겠는데 위에서 ConvexityDefect를 구하려고 해도 손 주변의 잡음으로 인해서 이상한 점들이 Defect로 잡힙니다. 

그래서 조금 다른 방식으로 접근하기 위해서 이것 저것 찾아다니던 중에 무게 중심을 활용한 ROI를 구하면 더 정확하지 않을까 했습니다. 원소스는 OpenCV Korea 까페의 루피네 님 글입니다. <http://cafe.naver.com/opencv?20120917105436>


거기에 따르면 픽셀 주변에 가중치를 곱해서 곱하는 방식으로 평균값을 내고 있습니다. 일련의 무게 중심을 구하는 과정이라고 합니다. 그래서 코드를 키넥트에 맞게 포팅시켰더니 다음과 같이 나옵니다.


 


기존의 DrawRectangle을 통하면 손이 팔까지 포함된 영역으로 그려지지만 위와 같이 적절히 응용한다면 손만 딱 나오게끔 ROI를 구성할 수 있는 것이지요. 이 때 손의 모양이 바뀌어도 무게 중심값은 그대로 유지됩니다. 한번 보시겠습니다.



댓글