initUndistortRectifyMap дает неправильное изображение - PullRequest
1 голос
/ 17 февраля 2020

Я столкнулся с трудностями при попытке получить результат, аналогичный this . После калибровки камеры я получил следующие параметры:

DIM=(800, 600)
K=np.array([[177.41548430658207, 0.0, 258.68599972062486], [0.0, 177.57591422482173, 205.71268583567885], [0.0, 0.0, 1.0]])
D=np.array([[-0.04397357230351177], [-0.03399404486757072], [0.03174104028771482], [-0.01131815456157867]])

Мое начальное изображение sh -eye выглядит следующим образом .

С следующий код:

def undistort(img_path):
    img = cv2.imread(img_path)
    nk = K.copy()
    nk[0,0]=K[0,0]
    nk[1,1]=K[1,1]
    map1, map2 = cv2.fisheye.initUndistortRectifyMap(K, D, np.eye(3), nk, DIM, cv2.CV_16SC2)  
    undistorted_img = cv2.remap( img, map1, map2, interpolation=cv2.INTER_LINEAR, borderMode=cv2.BORDER_CONSTANT)
    cv2.imshow("undistorted", undistorted_img)
    cv2.imwrite('recoPersp_wrong.jpg', undistorted_img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

реконструированное перспективное изображение выглядит следующим образом . Однако, изменив:

nk[0,0]=K[0,0]
nk[1,1]=K[1,1]

на

nk[0,0]=K[0,0]/2
nk[1,1]=K[1,1]/2

Я не получаю желаемого результата, как описано Hello Sam's answer . Вместо этого мое изображение размыто и размыто по краям , как это (это другое изображение, но проблема все еще та же) Не могли бы вы сказать мне, что я делаю неправильно?

...