2017-01-17 9 views
1

저는이 일을 이해하기가 정말로 어려워요. 저는 파이썬에서 초보자 일 뿐이며,이 코드에 대한 설명을 찾을 수 없습니다.Python OpenCV Stereo 객체 포인트를 조정하십시오.

# prepare object points, like (0,0,0), (1,0,0), (2,0,0) ....,(6,5,0) 
objp = np.zeros((6*9,3), np.float32) 
objp[:,:2] = np.mgrid[0:9,0:6].T.reshape(-1,2) 

일본어 9는 I 9, 6 체스 판 패턴의 열 및 행의 내측 모서리에 각각 제하다고 가정하고,이다. (그래서 내 체스 판은 실제로 10x7입니다.)

이제 체스 판에있는 사각형의 크기를 알 수 있습니다. 알아낼 수없는 것은 거기에 넣을 위치입니다.

objpoints.append(objp) 

그리고 나는 항상 또 다시 같은 개체를 추진하는 것 볼 수 있습니다

모든 이미지의 모든 반복으로, 내가 찾은 코드는이 작업을 수행.

두 가지 질문 : 모든 반복에서 objpoints.append(objp)은 어떤 차이가 있습니까?

어떻게 코드에서 정사각형 크기를 지정할 수 있습니까? 내가 어디에 써야 할까?

개체 점수가 체스 판의 각 사각형의 3d 점임을 알고 있습니다. 그래서 나는 매 반복마다 매 개조조차하지 못하기 때문에 매우 혼란 스럽습니다.

감사합니다.

편집 : stereocalib에 대한 내 코드 : http://pastebin.com/pw5n3pme

난 당신이 this code 또는 이와 유사한 하나의 작업중인 가정합니다

+0

완전한 대답을 원한다면 코드 전체를 링크해야합니다. 나는 어쨌든 대답하려고 노력할 것입니다. – marcoresk

답변

1

(그것은 개별 카메라 보정 단지 수정 된 버전입니다).

첫 번째 질문 모든 반복에 (objp를) objpoints.append 않는 방법

은 차이를 만들어? 그렇지 않습니다. 당신이 게시 라인에서, 특정 체스 판에, 항상 동일, 체스 판의 모서리의 처분을 계산하는 다음이

objp[:,:2] = np.mgrid[0:9,0:6].T.reshape(-1,2) 

봐. 반복 할 때마다 카메라에서 다른 이미지 점을 찾습니다 체스 보드의 같은 지점에 대해.

(가) 같은 포인트가 아니었다면, 당신은

두 번째 질문

어떻게 내가 코드에 지정할 수있는 교정, 사각 크기를 수행 할 수 없습니다? 내가 어디에 써야 할까?

내가 게시 한 자습서에 Python과 OpenCV 용으로 정사각형 크기를 지정하면 안됩니다. 그것은 모노 교정이므로 정사각형 크기는 스케일 팩터에만 관련이 있으며, 모노 카메라에서는 (쓸모가 없습니다. 정의되지 않은 (또는 1 일 수도있는) 축척 비율로 올바른 카메라 행렬을 얻습니다.

코드가 다른 경우 (예 : 스테레오 교정) 게시하고 사각형 치수를 입력해야하는 위치를 찾으려고합니다.

+0

답장을 보내 주셔서 감사합니다 @marcoresk 여기 내 stereocalib.py의 pastebin입니다 http://pastebin.com/pw5n3pme 거기서 왼쪽 및 오른쪽 카메라에 개별적으로 보정 된 매트릭스를 사용했습니다. 그것은 동시에 두 대의 카메라를 보정하는 것이 아니라 나를 위해 일했습니다. – Wreigh

+0

을 stereocalib에 넣었습니다. 링크 된 코드를 복사 한 다음 한 번에 두 카메라에서 사용하고 카메라 보정 대신 stereoCalibrate 메서드를 사용했습니다. – Wreigh

+0

@WreighChristianSantos 코드는 자습서 일뿐입니다. 사각형의 크기를 삽입하려면 objp와 함께 사용해야합니다. 읽기 [이 다른 답변] (http://stackoverflow.com/questions/37310210/camera-calibration-with-opencv-how-to-adjustches-boardsquare-size) – marcoresk

1

나는 또한 파이썬과 OpenCV에서 스테레오 카메라 보정을하고 있는데, 나는 두 번째 질문에 대한 답변을 이미 알고있다.

어떻게 코드에서 정사각형 크기를 지정할 수 있습니까? 내가 어디에 써야 할까?

여기에 정사각형 크기가 30mm라고 가정하면이 값에 objp[:,:2]을 곱하십시오. objp[:,:2]로서이

objp[:,:2] = np.mgrid[0:9,0:6].T.reshape(-1,2)*30 # 30 mm size of square 

같은 (0,0)로 주어 checkboard 코너 점 세트 (0,1), (0,2) ... (8,5)이다. (0, 0) 점은 왼쪽 상단 가장 사각형 모서리이고 (8,5)는 오른쪽 가장 낮은 사각형 모서리입니다. 이 경우이 점에는 단위가 없지만이 값에 정사각형 크기 (예 : 30mm)를 곱하면 (0,0), (0,30), ..... (240,150)이됩니다. 실세계 단위입니다. 이 경우 번역 벡터는 mm 단위 인입니다.