如何生成多项式失真修正的VPI变形图?
我可以按照这里的示例算法来处理鱼眼镜头的校正:https://docs.nvidia.com/vpi/sample_fisheye.html#sample_fisheye_code,但是我想使用多项式校正。我找到了一个方法
vpi.WarpMap.polynomial_correction(grid: vpi.WarpGrid, Kin: 2D array, X: 2D array, Kout: 2D array, rcoeffs: 1D array, tcoeffs: 1D array = None)
来替换
vpi.WarpMap.fisheye_correction(grid: vpi.WarpGrid, Kin: 2D array, X: 2D array, Kout: 2D array, coeffs: 1D array, mapping: vpi.FisheyeMapping)
但参数列表有点不同,我搞不清楚怎么创建这些参数。在openCV的文档中,没有简单的方法可以替代第102行的cv2.fisheye.calibrate(...)
(我最初是通过这个生成鱼眼校正参数)的多项式失真。
不过,我能按照这个教程来去除照片的失真:https://docs.opencv.org/4.x/dc/dbb/tutorial_py_calibration.html,但我想使用VPI。我该如何生成一个用于多项式失真校正的VPI变换图?我尝试了vpi.WarpMap.polynomial_correction(grid=grid, K=camMatrix[0:2, :], X=np.eye(3, 4), rcoeffs=coeffs)
,其中camMatrix
是newcameramtx
,coeffs
是从
ret, mtx, dist, rvecs, tvecs = cv.calibrateCamera(objpoints, imgpoints, gray.shape[::-1], None, None)
newcameramtx, roi = cv.getOptimalNewCameraMatrix(mtx, dist, (w,h), 1, (w,h))
那个OpenCV教程生成的dist[0]
,但它并不奏效(生成的图像失真得太严重了)。
谢谢!任何指导都很感激。
0 个回答
暂无回答