initUndistorRectifyMap дает неправильное изображение

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

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]])

Мое исходное изображение «рыбий глаз» выглядит вот так.

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

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]

to

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

Я не получаю желаемого результата, как описано в Привет, ответ Сэма. Вместо этого мое изображение размыто и размазано по краям вот так (это другое изображение, но та же проблема) подскажите что я делаю не так?


person iodapro    schedule 17.02.2020    source источник