이번시간에는 Depth 카메라를 출력, 그리고 얻어진 Depth 값을 이용하여 거리에 따라 0~255값으로 바뀌게 해보겠습니다.

일단 먼저 저번시간에 했던 프로젝트를 다 다운받아주세요~

링크 : http://tommyhsm.tistory.com/entry/Tommys-Kinect-vol2-Kinect-SDK를-이용한-간단한-프로젝트

(아 또 친절하게 링크까지... 당연한건가?? -_ㅜ)



이번에는 image를 한개 더 가져와서 2개를 띄웁니다.



다음으로 RGB 카메라와 같이 설정을 해줍니다.

그런데 살짝 다릅니다.

같이 한번 볼까요??

Initialize 할때 UseDepth를 추가 해줍니다. (Depth 를 이용할꺼니깐요 -_- , 맨날 당연한소리만 하네요 하하 ㅋㅋ)

일단 레졸루션은 320 X 240 을 씁니다.

물론 640 X 480 으로 하셔도 상관없습니다. 그런데 최적화는 320 X 240 으로 되있으니 권장 하는대로 쓰겠습니다.

그리고 imagetype 을 depth 로 두고 합니다.

마지막으로 매 프레임마다 depth 값을 얻어올 함수를 이벤트 핸들러를 통해 등록해줍니다.


자 다음으로 메세지 핸들러에 추가되는 함수를 구현 해봅시다.

뭐 설정은 비슷합니다.

대신 여기서 유의하실점은 BGR32 가 아닌 Gray16을 쓴다는점, 16비트를 쓰기 떄문인데요, 이는 거리 화상 데이터 구조가 보통 16비트로 되있어서 이렇게 쓴다고 합니다. (저도 잘 몰라서 검색해서 알게된 사실..)



자 그럼 한번 출력 해볼까요?? ^^




나오긴 하는데.. 뭔가 Depth 영상이 시원찮네요;;

맘에 안들어 -_- 쳇..

그래서 0~255로 Normalize 시켜 봅시다.

일단 노멀라이즈 시키기 위해서는 거리를 알아야겠죠,

그 식이 아래와 같은데요, or 첫번째 영상 데이터와 두번째 영상 데이터중 두번째꺼를 시프팅 시켜서 비트연산을 하면 그 거리가 나온다고 하네요.

이건 저도 잘 몰라서 찾아보고 있는중입니다;; 혹시나 자료를 찾게 되면 다시 한번 올리겠습니다.



어째뜬 거리가 나오면 그 값을 이용하여 노멀라이즈 시키면 되겠지요 :)

이제는 노멀라이즈 시키는 부분입니다.

Byte array를 생성 해주고요~ (아 참고로 BGR32 를 쓸껍니다. 그래서 32bit 이기때문에 4바이트, 즉 *4를 더 해줍니다.)

그리고 노멀라이즈 시켜줍니다. 255 에서 나온 거리를 계산한 값과 연산함으로써 가까울수록 255, 멀수록 0 이 되겠습니다.

왜냐하면 BYTE는 unsigned char 즉, 0 ~ 255 만으로 값을 표현하는데, 영상처리에서 그레이 영상을 표현할때 이렇게 표현하지요 :)

(자세한건 영상처리 책에 아~~주 자세하게 설명 되어있습니다.)

배열 index와 r,g,b index를 이용하여 컬러 테이블을 만들어 줍니다.

그리하여 0 ~ 255 사이의 값으로 노멀라이즈 된 Byte array 가 완성 되었습니다.



마지막으로 이미지를 얻어와야겠죠,

위에서 언급한대로 bgr32 를 이용, 그리고 color table을 이미지영상으로 적용, 16비트 영상이기 때문에 *2 를 해줍니다.



이제 한번 구동 해볼까요??

Let's Start~!!


이제 좀 Depth 영상 같네 ㅋㅋㅋ 그죠잉??

근데 주의하셔야 할 사항이 있습니다.

최소한 50cm 정도는 떨어져야 제대로 된 영상이 나옵니다.

너무 가까우면 아예 검정색으로 나오는데, 이는 카메라 두개가 보는 시야에서 사라지기 때문이라고... 들었답니다.

그래서 검정색으로 표현되게....했다고 합니다.

(이놈의 습자지 지식 -_-;;;)


어째뜬 나는 그레이 영상이 싫타!! 좀 Colorful 하게 해보고 싶다, 이러한 분들은 조금만 응용해보시면 이렇게 하실수도 있겠네요 ^^

거리에 따라 R,G,B 색으로 바뀌게 해 보았습니다.

(조건문은 1500mm, 3000mm, 4500mm 으로 했습니다.)



이상으로 Depth 카메라를 이용하여 간단한 프로젝트를 진행 해보았습니다.

프로젝트 파일도 함께 첨부합니다.






사실 이번 블로깅까지는 저번에 준비해놨기때문에 빨리 빨리 진행이 되었는데,

다음번은 언제 올라올지 모르겠네요,

빠른 시일내에 더 공부하여 올리도록 하겠습니다.

조언이나 기타 다른 문의사항있으시면 언제든지 글남겨주세요 ^^

이상 Tommy 였습니다.

Posted by Tommy™
,

이번시간에는 C# - WPF를 이용하여 RGB 카메라를 한번 출력 해보겠습니다.

먼저 VS2010을 켜주시구요~ C#에서 WPF 응용 프로그램을 선택 제작~

만들고 나면...

이렇게 나오겠지요?? (당연하잖아 -_-;;)


이제 왼쪽 항목에 보면 '참조' 란이 있습니다.

저기서 우클릭, 참조추가를 하면 다이얼로그 박스가 하나 뜨는데, 거기서 ,Net 항목중 Microsoft.Research.Kinect 항목이 있습니다.

더블클릭하여 추가~!!



그리고 MainWindow.xaml.cs 를 더블클릭하여 using Microsoft.Research.Kinect.Nui; 를 입력 해줍니다.
(다들 using namespace 아실꺼라 생각합니다. 모르시는분은 다른 블로그 검색해보세요 , ^^;; 무책임하군 -_-)


다음으로 MainWindow.xaml로 가서 오른쪽 도구창에서 Image를 드래그 해서 놓아봅니다.

이곳은 이미지가 나올 창입니다.


다음으로 메인 윈도우 부분을 더블클릭하여 초기화를 할 부분인 Window_Loaded 함수를 만들어봅니다.



다음으로 키넥트 클래스명인 Runtime 확장자명으로 생성합니다. 저는 _Kinect 로 했습니다.

그리고 초기화를 해주는데요,

먼저 연결되어있는 키넥트번호를 설정, 그리고 RGB카메라를 이용할거라고 Initialize 해줍니다.

(참고로 RGB 카메라는 640 X 480 , Depth 카메라는 320 X 240 이 가장 최적화 되있다고 합니다. (어디서 줏어 들은거는 있어가지고 -_-) )

그리고 기본 레졸루션을 설정, 이벤트 핸들러를 통해 최종적으로 이미지가 불려질 함수를 지정 해줍니다.



다음은 영상을 매 프레임 얻어 줄 이벤트 함수 부분을 만듭니다.

역시나 필요한 정보들을 기입 하여 적어줍니다.

(척 보면 매개변수가 뭔지 대~충 눈으로 볼수 있겠죠??;; 아닌가??;;)




자~ 이렇게 해서 이제 RGB 카메라가 동작합니다 :)




프로젝트 파일도 함께 첨부합니다.


자 이제 한발자국 걸어왔습니다.

저도 공부하면서 진행하는거라 많이 느리고 설명이 미흡한면이 많을겁니다.

그런점은 겸허히 봐주시구요, 질타 언제든지 감사합니다 (__)


이상 Tommy 였습니다.

Posted by Tommy™
,

안녕하세요,

오늘부터 부족하게나마 키넥트 관련 블로깅을 해보려 합니다.

부족 하게나마 허접한 예비 석사생이니.. 하면서 봐주시면 감사하겠습니다. ^^;;





- Windows 7 
└≫ Kinect SDK가 윈도우7부터 지원한다고 하네요;;

- Kinect Sensor
└≫ 당연히 키넥트를 쓰려면 키넥트 센서가 당연히 있어야 겠지요?? ^^



- Visual Studio 2010 
└≫ Visual Studio 2008도 되긴 하던데, 그냥 권장사항대로 2010을 사용 하겠습니다.

- Kinect SDK (ver 1.0 -  beta 2) ( homepage : http://kinectforwindows.org/ )
└≫ 저 링크를 따라가면 마.소(Micro Soft) 홈페이지가 나오면서 SDK를 다운 받으실수 있습니다.


(조~기 Download Now 보이시죠?? ^^)

- Emgu CV ( homepage : http://www.emgu.com/wiki/index.php/Main_Page )
└≫ 역시 저 홈페이지 들어가면 download 란이 있어서 바로 다운 받으실수 있습니다.



설치하시면 간단하게 Sample이 있어서 구동해보실수가 있어요~

그중 한개는 관련 검색해서 다른 블로그에서 퍼왔습니다. (http://tramper2.blog.me/100130707276)




오늘은 여기까지~ :)

다음번에는 SDK를 활용하여 간단한 프로그램을 만들어보겠습니다.

이상 Tommy 였습니다.

Posted by Tommy™
,