>

내 스테레오 이미지를 왜곡하고 수정하고 싶습니다. 이를 위해 Python 2.7에서 Opencv 3.3을 사용했습니다. 내가 사용한 코드는 다음과 같습니다.

import cv2
import numpy as np
cameraMatrixL = np.load('mtx_left.npy')
distCoeffsL = np.load('dist_left.npy')
cameraMatrixR = np.load('mtx_right.npy')
distCoeffsR = np.load('dist_right.npy')
R = np.load('R.npy')
T = np.load('T.npy')
imgleft = cv2.imread('D:\python\camera calibration and 3d const\left\left60.png',0)
imgright = cv2.imread('D:\python\camera calibration and 3d const\Right/right60.png',0)

R1,R2,P1,P2,Q,validPixROI1, validPixROI2 = cv2.stereoRectify(cameraMatrixL,distCoeffsL,cameraMatrixR,distCoeffsR,(640,480),R,T,alpha=1)
print Q
# distort images
undistort_map1, rectify_map1 = cv2.initUndistortRectifyMap(cameraMatrixL, distCoeffsR, R1, P1, (640,480), cv2.CV_16SC2)
undistort_map2, rectify_map2 = cv2.initUndistortRectifyMap(cameraMatrixR, distCoeffsR, R2, P2, (640,480), cv2.CV_16SC2)
undistor_output1 = cv2.remap(imgleft, undistort_map1, rectify_map1, cv2.INTER_LINEAR)
undistor_output2 = cv2.remap(imgright, undistort_map2, rectify_map2, cv2.INTER_LINEAR)
cv2.imshow('undistor_output1',undistor_output1)
cv2.imshow('undistor_output2',undistor_output2)
while (True):
 if cv2.waitKey(1) & 0xFF == ord('q'):
    break

카메라를 따로 보정 한 다음 획득 한 행렬을 cv2.stereoRectify 에 사용했습니다.   R1,R2,P1,P2,Q 를 얻기 위해  내가 cv2.initUndistortRectifyMap 에서 사용한 행렬 . 그러나 나는 혼란스러운 이미지를 올바르게 얻지 못한다. 와 같이 보입니다. 내 행렬은 :

Q
[[  1.00000000e+00   0.00000000e+00   0.00000000e+00  -3.23097469e+02]
 [  0.00000000e+00   1.00000000e+00   0.00000000e+00  -2.40008609e+02]
 [  0.00000000e+00   0.00000000e+00   0.00000000e+00  -7.47885268e+00]
 [  0.00000000e+00   0.00000000e+00  -1.53249612e-02   0.00000000e+00]]

   cameraMartix Left
[[ 807.24668269    0.          326.78961645]
 [   0.          620.70299534  259.9187458 ]
 [   0.            0.            1.        ]]
camearMatrix Right
[[ 567.37537971    0.          278.76995505]
 [   0.          558.21417195  216.22972643]
 [   0.            0.            1.        ]]
Rotation
[[ 0.99973813 -0.02260904  0.00353613]
 [ 0.02269951  0.99934817 -0.02807079]
 [-0.00289917  0.0281437   0.99959968]]
Tranlation
[[-93.46968934]
 [ -1.48741179]
 [ 24.98692133]]

많은 답변을 읽었지만 아무 문제도 해결하지 못했습니다.

스테레오 재생 방법에 대한 직접적인 해결책 교정 및 교정 OpenCV?

* Python을 사용한 OpenCV (cv2)의 undistortPoints 잘못된 결과

cv2.remap은 아무것도 생성하지 않습니다

initUndistortRectifyMap을 사용하여 이미지 포인트를 정렬 해제

opencv cv2.remap은 이상한 이미지를 만듭니다 *

이 문제에 대한 해결책은 무엇입니까?

감사합니다.


  • 답변 # 1

    많은 것들을 시도한 후에이 특정한 문제에 대한 해결책을 찾았습니다. Python OpenCV와 Matlab을 사용하여 얻은 카메라 회전 행렬과 왜곡 행렬을 비교 한 후Python과 Matlab을 사용하여 얻은 행렬 사이에 많은 차이가 있음을 알았습니다. 따라서 다시 카메라를 보정하고 Python 및 OpenCV를 사용하여 스테레오 보정을 수행합니다. 아래 그림은 오래된 행렬 (Python에서 가져온)과 새 행렬 (Python을 사용하여 다시 보정 한 후)의 차이점을 보여줍니다. 이 그림에서 우리는 오래된 경우 ( dist coeff. right old and left old) )의 오른쪽 및 왼쪽 카메라에 대한 왜곡 계수 매트릭스 사이에 많은 차이가 있음을 알 수 있습니다  새로운 케이스 (dist coeff. right new and left new) 에 대한 좌우 카메라의 왜곡 계수 매트릭스와 비교 . 오른쪽 카메라의 경우 오래된 계수는 각각 0.78 및 -0.61에 대해 83.85 및 -19.18이었습니다. 마찬가지로 왼쪽 카메라의 경우 오래된 계수는 각각 -0.38 및 0.73에 대해 123.7 및 -1641.4입니다. 또한 오래된 왼쪽 카메라 매트릭스의 첫 번째 요소 (1,1)은 807.24로 오른쪽 카메라 오래된 매트릭스와 비교할 때 크게 다릅니다. 새로운 왼쪽 카메라 매트릭스는이 요소 값을 552.41로 생각합니다. 이 모든 새로운 행렬을 사용하고 알파 값을 0으로 변경하면 (alpha = 0)  나는 다음과 같은 결과를 얻었다.

    와이즈 비즈  다음 입력을 사용했습니다

    stereoCalbirate
    
    

    여기서 retVal, cm1, dc1, cm2, dc2, r, t, e, f = cv2.stereoCalibrate(objpoints, imgpointsL, imgpointsR, cm1, dc1, cm2, dc2, (640, 480), None, None, cv2.CALIB_FIX_INTRINSIC, criteria)

    criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 100, 0.001)

관련 자료

  • 이전 셀레늄 웹 드라이버를 사용하여 경고를로드하려면 클릭 조작을 수행해야합니다 세부 사항은 본문에 제공됩니다
  • 다음 gitk가 mac에서 시작되지 않습니다 - 알 수없는 색상 이름"lime"