티스토리 뷰

Processing

[Processing] DepthMap In SimpleOpenNI

생각많은 소심남 2012. 7. 4. 10:13

지난 포스트에서는 프로세싱을 통해서 받은 이미지에서 각각의 RGB값을 취하는 것에 대해 알아봤습니다. 실제로 기본적인 코드를 바탕으로 2~3줄 정도 추가해준 것에 비해 얻을 수 있는 정보가 늘어나지요. 코드 자체도 어렵지 않고요.

 이번에 해볼 내용은 SimpleOpenNI 라이브러리에서 제공하는 depthmap 속성을 이용해서 DepthImage로부터 사용자까지의 거리를 구하는 식을 구해보고자 합니다. 전체적인 형식은 전의 코드와 비슷합니다.

 우선은 라이브러리를 추가해주고 SimpleOpenNI형 자료형을 선언해줍니다. 그 후에 다음과 같이 코드를 구성해봅니다.



자 이제 mousePressed부분을 채워야 하는데 고려해볼 사항이 있습니다. 

전 시간에 잠깐 말한 바로는 키넥트가 컴퓨터로 데이터를 넘길때는 frame단위로 넘긴다고 했습니다. 그런데 실제로 이게 어떤 방식으로 전달이 되는 건지 감은 안 잡히실텐데 일종의 배열단위로 움직입니다. 실상 생각하는 바로는 배열의 차원을 고려해야 겠지만 편의를 위해서 1차원 배열로써 작성을 해줍니다. 이에 따라서 자료형은 다음과 같이 선언됩니다.




그러면 1차원 배열 안에 해당 프레임에 대한 정보가 픽셀단위로 들어갈겁니다. 우리가 프로세싱을 통해서 Image 창을 640*480으로 지정했습니다. 이 640*480중 하나의 픽셀이 배열안에 들어가있다는 겁니다. 만약 창 우측 상단에서 다음 픽셀로 넘어가려면 기존의 위치는 (0,639)에서 (1,0)로 바뀌게 될겁니다. 이게 1차원 배열로 저장이 되어있다니..


 이때는 mouse가 선택하는 y좌표에 640을 곱해주면 되겠지요. 그러면 창의 픽셀이 1차원 배열과 매핑이 되서 해당 픽셀의 정보를 찾을 수 있게 됩니다. 다음과 같이 작성해주면 됩니다.



이렇게 작성해주면 해당 픽셀의 정보를 배열에서 찾을 수 있습니다. 결과를 한번 확인해보겠습니다.




외부요인으로 인해서 거리가 측정되지 않는 곳을 제외하고는 거리값이 정상적으로 콘솔창에 뜨는 것을 확인할 수 있습니다.

이를 이용한다면 거리를 이용한 색상 부여앱같은것도 구현할 수 있지 않을까 싶네요.

댓글