RSS

Monthly Archives: January 2014

Inverse of pose matrix

source : http://www.cg.info.hiroshima-cu.ac.jp/~miyazaki/knowledge/teche53.html

Advertisements
 
Leave a comment

Posted by on January 29, 2014 in Computer Vision

 

Softkinetic DS325의 depth와 RGB 카메라

ds325

위 그림과 같이 DS325를 정면에서 볼 때 왼쪽의 파리눈깔 처럼 생기고 동그랗게 튀어나온게 depth cam이고, 오른쪽에 약간 들어가서 톱니바퀴처럼 생긴게 RGB cam 이다.

두 카메라의 내부, 외부 파라미터는 C:\Program Files (x86)\SoftKinetic\DepthSenseSDK\samples\ConsoleDemo 의 샘플 프로젝트를 실행 시켰을 때, onNewDepthSample() 이라는 함수를 보면 알 수 있다.  즉, 각 기계마다 다른지 모르겠는데, 공장에서 찍어나올 때 calibration해서 프로그램에 심어 놓는거 같다.

두 카메라를 캘리브레이션 하는게 쉬운 일이 아니고, 시간이 촉박하므로 현재 쓰고 있는 DS325에 대해 함수를 불러서 읽어온 카메라 파라미터 값은 아래와 같다.  또한 C:\Program Files (x86)\SoftKinetic\DepthSenseSDK\doc\pdf\CameraModelDocumentation.pdf 에 의하면 extrinsic parameter (Rotation R, translation t)는 depth camera coordinates 상의 3D point Xd와 RGB camera coordinates 상의 3D point Xc를 다음과 같은 관계로 이어 준다고 한다.

Xc = R * Xd + t

근데, cx  cy가 정확히 이미지 사이즈의 절반인거 보면 공장에서 기계마다 각각 calibration한 거 같지는 않고, 그냥 이상적인 calibration parameter인 거 같다.

* Refer the function onNewDepthSample in C:\Program Files (x86)\SoftKinetic\DepthSenseSDK\samples\ConsoleDemo

* Refer the pdf file CameraModelDocumentation.pdf

– depth camera Intrinsics (DepthSense::IntrinsicParameters)
width    320
height    240
fx    224.50200
fy    230.49400
cx    160.00000
cy    120.00000
k1    -0.17010300
k2    0.14406399
k3    -0.047699399
p1    0.00000000
p2    0.00000000

– color camera Intrinsics (DepthSense::IntrinsicParameters)
width    640
height    480
fx    583.07898
fy    596.20300
cx    320.00000
cy    240.00000
k1    0.022575200
k2    -0.16266800
k3    0.18613800
p1    0.00000000
p2    0.00000000

– extrinsics (DepthSense::ExtrinsicParameters)
r11    0.99999738
r12    0.0012669859
r13    -0.0019156976
r21    0.0012539299
r22    -0.99997610
r23    -0.0068011540
r31    0.0019242687
r32    -0.0067987340
r33    0.99997503
t1    0.024492104
t2    -0.00050799217
t3    -0.00086258771

R =

[    r11    r12    r13    ]
[    r21    r22    r23    ]
[    r31    r32    r33    ]

t =

[    t1    ]
[    t2    ]
[    t3    ]

Note: The matrix returned in the StereoCameraParameters::extrinsics is not a proper rotation matrix as its determinant is -1 making it a matrix representing a rotation and a reflection transformation. Therefore, for the matrix to be a proper rotation matrix, the ExtrinsicParameters::r12, ExtrinsicParameters::r22 and ExtrinsicParameters::r32 coefficients should be multiplied by 1.0.

 
1 Comment

Posted by on January 29, 2014 in Smart Glasses

 

OpenGL에서 text display

void glutPrint(float x, float y, void* font, std::string text, float r = 1.0, float g = 1.0, float b = 1.0, float a = 1.0)
{
	if(!text.length()) return;
	bool blending = false;
	//    glEnable(GL_BLEND);
	//    glDisable(GL_TEXTURE_2D);
	if(glIsEnabled(GL_BLEND))
	{
		blending = true;
	}
	glEnable(GL_BLEND);
	//    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
	//    glBlendFunc(GL_SRC_ALPHA, GL_DST_ALPHA);
	//    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_DST_ALPHA);
	//    glBlendFunc(GL_ONE_MINUS_SRC_ALPHA, GL_ONE_MINUS_DST_ALPHA);

	glColor4f(r,g,b,a);
	glRasterPos2f(x,y);
	for (int i=0;i<text.length();i++) {
		glutBitmapCharacter(font, text[i]);
	}
	if(!blending)
	{
		glDisable(GL_BLEND);
	}
	//    glEnable(GL_TEXTURE_2D);

}

 

 

 

usage :

glutPrint(10, 30, GLUT_BITMAP_TIMES_ROMAN_24, "Emiya Muljomdao !!!", 1.0, 105.0 / 255.0, 180.0 / 255.0);
 
Leave a comment

Posted by on January 23, 2014 in OpenGL

 

색상과 RGB value 사이의 매핑 사이트

색상을 보여줘서 선택하기 편함.

http://www.tayloredmktg.com/rgb/

 
Leave a comment

Posted by on January 23, 2014 in Programming

 

메타이오 샘플의 카메라 사이즈와 스크린사이즈 차이에 따른 오프셋 해결

메타이오 샘플 중에 Example_CustomRenderer 프로젝트 아래에 CameraImageRenderer.cpp 에 보면 draw라는 함수가 있는데 여기보면 landscape 모드 일때와 아닐때에 대해서 오픈지엘로 처리하는게 나와있음.  진작에 알았으면 참고할 걸

 
Leave a comment

Posted by on January 22, 2014 in Augmented Reality, Smart Glasses

 

Things to check when not working

  • main pc

    • DS325 컬러카메라가 작동하는지, 즉 카메라에 불이 들어오는지…  안들어오면 camera ID를 바꿔본다. (현재 0이면 1로, vice versa).  현재 내 컴에서 (0은 built-in한테 할당되니까) 1로 하면 됬었는데, 오랜만에 하니까 0으로 해야 되는 문제가 생겼음.  희한함.

  • remote pc
    • 키넥트는 데이터를 만들어 내는데, 메인에서는 연결이 안되었다고 나올 때….
      무선으로 연결되었으면, 같은 무선 AP에 연결되어 있는지 체크. 암튼 일단 ping test해서 두 컴간에 연결이 되는지 확인.
 
Leave a comment

Posted by on January 22, 2014 in Smart Glasses

 

Stereo camera calibration의 translation 결과

Matlab calibration toolbox에서 stereo calibration하면 결과로 rotation matrix R과 translation vector T가 주어진다.

그런데, 그 R과 T는 아래의 식

X_R = R * X_L + T  (1)

를 만족시키고, 여기서 X_L과 X_R은 각각 어떤 3차원 상의 한 점이 left와 right 카메라를 기준좌표계로 했을 때 그 coordinate가 어떻게 되는지를 나타낸다.

Toolbox 자체에서는 T를 아래와 같이

Extrinsic parameters (position of right camera wrt left camera):Rotation vector:             om = [ 0.00189   -0.00040  0.00653 ] ± [ 0.00479   0.00553  0.00041 ]
Translation vector:           T = [ -89.51204   -0.21901  -0.28905 ] ± [ 0.14881   0.16062  0.78533 ]
left 카메라를 기준으로 했을 때, right 카메라의 위치 (position of right camera wrt left camera) 라고 말하고 있지만, 실상 (1) 식에 X_L = (0, 0, 0)^T를 넣으면

X_R = T  (2)

가 된다.  즉 left 카메라의 중심이 right 카메라의 좌표계 상에서 어디에 위치하느냐 하는 것이 translation 값이 된다는 것이다.  이 말은 다시 말하면 T는 “position of right camera wrt left camera” 가 아니라 반대로 “position of ㅣleft camera wrt right camera” 라고 표현하는 게 더 맞는 것 같다.  즉 부호가 반대이다.  OpenCV는 결과가 어떻게 나오는지 잘 기억이 안나는데, 굳이 간단하게 표현하자면 stereo calibration의 결과로 나오는 translation의 기준은 왼쪽이 아니라 오른쪽 카메라이다.  지금 현재로 내린 결론은 이렇다.

 
Leave a comment

Posted by on January 22, 2014 in Uncategorized