티스토리 뷰

Kinect

[Kinect 프로젝트] ColorStream에도 변화를 줘보자!

생각많은 소심남 2012. 5. 8. 18:39

지난 포스팅에서는 Color Stream을 내보내는 것을 언급했습니다. 하지만 이 부분은 SDK를 설치하면 내장되어있는 Kinect Explorer를 유심히 보기만 해도 그 원리를 알 수 있는 내용들이었습니다.


하지만 분명 키넥트를 활용하려는 사람들이라면 뭔가의 변화가 필요하다는 것을 느끼실 겁니다. 그래서 이번 포스팅에서 다뤄볼 내용은 바로 ColorStream에 색상을 입히는 것입니다. 

자 지난 시간에 다뤘던 ColorFrameReady 부분을 한번 다시 볼까요?




여기서 색을 조절하기 위해서는 중간에 있는 PixelData를 건드려야 됩니다. 사실 Kinect로부터 컴퓨터에 전달되는 ColorStream, 즉 여기서는 ImageParam 라고 정의했었지요. 이 Stream이 들어가는 것은 CopyPixelDataTo 메서드를 통해서 pixelData라고 지어진 byte형 배열이 될 것이고 bitmapImage는 Create 메서드를 통해서 이 pixelData를 읽고 화면상에 뿌리게 됩니다. 그럼 만약.. 이 pixelData의 값을 변화시킨다면 어떨게 될까요? 한번 다음의 예시를 통해서 살펴보겠습니다.

 

 

위와의 차이는 중간에 for 루프가 들어가 있는 겁니다. PixelData에서 정보를 읽어오면서 i 번째와 i+1번째 배열의 값들은 초기화시키는 겁니다. 여기서 유심히 봐야할 부분은 지금 작성한 부분이 아니라 밑에 잡혀있는 PixelFormats.Bgr32라는 겁니다. 이 정보로 보았을때 pixelData의 정보는 Blue Green Red 이런식으로 저장된다는 것을 알 수 있습니다. 지나간 포스팅에서 언급한 내용이 있는지는 모르겠지만 다음과 같은 순서로 저장됩니다.

 

 

이를 바탕으로 위를 분석해보지요. 지금 같은 경우는 ImageParam의 한 단위만큼 정보를 읽어오는 게 되므로 지금 초기화가 되는 값은 바로 Blue와 Green이 되는 겁니다. 그럼 남는 값은 여러분도 알다시피 Red가 되겠습니다. 한번 결과를 확인해볼까요?

 

 

 

감이 잡히시나요? 지금 이렇게 보여드리는 것이 간단하게 처리하는 Image Processing의 예 입니다. 물론 다른 값들을 초기화시킨다면 역시 해당하는 값만 나오게 될 겁니다.

 

 

이 말고도 Pixel Shader라는 것을 이용해서 더 세밀하게 처리할 수 있는 것이 있습니다. 이 부분은 저도 공부하고 있는 중이라서 나중에야 언급드릴 수 있을 것 같습니다. 이 PixelData의 값들을 수정하면 다양한 결과값을 얻을 수 있습니다. 물론 하나하나씩 직접 해보면서 결과를 얻는 것도 나쁘지 않겠지요? 몇가지 간단한 효과를 보여드리겠습니다. 물론 구현은 여러분들 자유입니다.

 

 

모든 PixelData를 논리적으로 반전처리를 하면 위와 같은 효과를 냅니다. 필름에서 많이 보신 내용이시죠?

 

 

그레이스케일 처리한 결과입니다. bgr 중에서 가장 큰 값을 선택해서 그값으로 bgr에 다시 정의하면 나옵니다.

 

 

마지막으로 High Saturation된 영상입니다.  저런 건 보통 카메라에서도 효과를 이용해서 표현하기도 합니다.

지금까지 말씀드린 내용은 키넥트가 하는 일이 아닙니다. 키넥트는 단순히 카메라로부터 받은 이미지를 컴퓨터로 보내주는 역할만 합니다. 위와 같은 효과를 주는 것은 사용자가 pixelData의 값을 어떻게 수정하느냐에 따른 것이지요.

댓글