2012-04-17 1 views
5

Emule/OpenCV를 사용하여 Kinect 카메라와 외부 카메라의 교정을 시도하고 있습니다. 나는 붙어있어 정말 도움이된다.기본 매트릭스를 통한 교정되지 않은 카메라의 교정

나는 기본 행렬 즉 에피 폴라 기하학을 통해 이것을 선택했다. 하지만 그 결과는 내가 예상 한대로 아닙니다. 결과 이미지는 검은 색이거나 아무런 의미가 없습니다. Mapx 및 Mapy 점은 일반적으로 모두 무한 또는 무한 또는 모두가 0.00이고 거의 정규 값을 갖지 않습니다. 이미지의 집합에서)

1) 찾기 이미지 포인트 이미지 지점의 두 개의 배열을 얻을 (한 모든 카메라 :

이 내가 정류을 시도하는 방법이다. 체스 판과 FindChessboardCorners 기능으로이 작업을 수행했습니다.

2) 기본 매트릭스 찾기

CvInvoke.cvFindFundamentalMat(points1Matrix, points2Matrix, 
_fundamentalMatrix.Ptr, CV_FM.CV_FM_RANSAC,1.0, 0.99, IntPtr.Zero); 

나는 이미지, 아니면 그냥 바로 잡기 위해 노력 두 이미지에서 전체 집합에서 수집 된 모든 지점을 통과합니까?

3) 찾기 호모 그래피 행렬

CvInvoke.cvStereoRectifyUncalibrated(points11Matrix, points21Matrix, 
_fundamentalMatrix.Ptr, Size, h1.Ptr, h2.Ptr, threshold); 

4) 가져 오기 MAPX 및 mapy

double scale = 0.02; 
CvInvoke.cvInvert(_M1.Ptr, _iM.Ptr, SOLVE_METHOD.CV_LU); 

CvInvoke.cvMul(_H1.Ptr, _M1.Ptr, _R1.Ptr,scale); 
CvInvoke.cvMul(_iM.Ptr, _R1.Ptr, _R1.Ptr, scale); 
CvInvoke.cvInvert(_M2.Ptr, _iM.Ptr, SOLVE_METHOD.CV_LU); 
CvInvoke.cvMul(_H2.Ptr, _M2.Ptr, _R2.Ptr, scale); 
CvInvoke.cvMul(_iM.Ptr, _R2.Ptr, _R2.Ptr, scale); 

CvInvoke.cvInitUndistortRectifyMap(_M1.Ptr,_D1.Ptr, _R1.Ptr, _M1.Ptr, 
mapxLeft.Ptr, mapyLeft.Ptr) ; 

내가 보정 사용하지 않는 때문에 내가 ... 여기에 문제가있다 이미지, 카메라 매트릭스 및 왜곡 계수 란 무엇입니까? 근본적인 행렬 또는 호모 그래피 행렬에서 어떻게 구할 수 있습니까?

5) 다시 매핑

CvInvoke.cvRemap(src.Ptr, destRight.Ptr, mapxRight, mapyRight, 
(int)INTER.CV_INTER_LINEAR, new MCvScalar(255)); 

그리고 이것은 좋은 결과를 반환하지 않습니다. 누군가 내가 뭘 잘못하고 있는지 말해 주시면 감사하겠습니다.

나는 25 쌍의 이미지 세트와 9x6 체스 보드 패턴을 가지고 있습니다.

답변

0

O'Reilly의 "Learning OpenCV"책에는이 특정 주제에 대한 두 개의 전체 장이 있습니다. 둘 다 OpenCV의 루틴 인 cvCalibrateCamera2()와 cvStereoCalibrate()를 많이 사용합니다. 이러한 루틴은 OpenCV 라이브러리를 유지 관리하는 사람들이보다 철저하게 디버깅 한 이점을 통해 여기에 작성한 것과 매우 유사한 코드 래퍼입니다. 둘 다 편리하지만 루틴에 필요한 입력을 얻으려면 꽤 많은 사전 처리가 필요합니다. 실제로 OpenCV 배포판의 samples 디렉토리에있는 샘플 프로그램이있을 수 있습니다.이 프로그램은 이러한 루틴을 사용하며 체스 판 이미지에서 보정/intrinsics 행렬로 이동하는 방법에 대한 예제를 제공합니다. 이 장소들 중 어느 곳을 깊이 살펴 본다면 전문가의 조언을 통해 목표를 달성하는 방법을 알 수있을 것입니다. 이미지 지점의 고유 매개 변수가 행렬 인 경우

0

이력서 :: findFundamentalMat는, 투영 이미지 포인트

를 작동 할 수없는, 즉, 작동하지 않을 수 있습니다
관련 문제