如何生成多项式失真修正的VPI变形图?

0 投票
0 回答
18 浏览
提问于 2025-04-12 03:59

我可以按照这里的示例算法来处理鱼眼镜头的校正: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),其中camMatrixnewcameramtxcoeffs是从

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 个回答

暂无回答

撰写回答