gpt4 book ai didi

image - getOptimalNewCameraMatrix 在 OpenCV 中有什么作用?

转载 作者:太空宇宙 更新时间:2023-11-03 21:44:02 53 4
gpt4 key购买 nike

我正在按照教程校准我的相机。我了解了使用棋盘求相机内参和畸变系数的整个过程。我不明白的是,为什么在那之后,我们调用getOptimalNewCameraMatrix ?特别是与 alpha范围。已经阅读了文档,但可能因为缺乏相机校准的知识,我真的无法理解它。

所以,这是原始图像。 Original image

以下是上述图像的未失真图像示例(使用 OpenCV 的 undistort)。

对于这个,我只是使用获得的内在相机和失真系数直接对图像进行失真处理。
Directly undistorted image

至于这个,我调用getOptimalNewCameraMatrixalpha=0 (左)和 alpha=1 (右)在我解开它之前。 Distorted image with alpha

据我所知,getOptimalNewCameraMatrix是在不丢失信息的情况下保留原始图像吗?我希望有人能解释这个函数的真正作用。

如果我想用来自运动的结构 (SfM) 和来自这台相机的图片构建一个 3D 模型,我应该首先拨打 getOptimalNewCameraMatrix 吗? ?

谢谢。

最佳答案

如果您想获得与原始图像形状相同的图像,则必须丢失一些像素。

opencv 文档中的“alpha”参数描述说明...

Free scaling parameter between 0 (when all the pixels in the undistorted image are valid) and 1 (when all the source image pixels are retained in the undistorted image)



对我来说,这意味着值为 0 时,所有像素都将进行几何变换以包含在内。径向和切向失真将被移除,但您的图像在几何上将不正确。
getOptimalNewCameraMatrix用于使用来自具有相同校准的同一相机的不同分辨率。

当我使用 getOptimalNewCameraMatrix 时,我得到了最好的结果然后对同样返回的感兴趣区域应用裁剪。

这是我为此目的使用的python片段。
newcameramtx, roi = cv2.getOptimalNewCameraMatrix(mtx, dist, (w, h), 1, (w, h))
mapx, mapy = cv2.initUndistortRectifyMap(mtx, dist, None, newcameramtx, dim, 5)
image = cv2.remap(image, mapx, mapy, cv2.INTER_LINEAR)

x, y, w, h = roi
image = image[y:y + h, x:x + w]

这应该拍摄您的最后一张图片(右侧的针垫)并为您提供最有用的图片。

我也分手了 undistort方法分为两部分,因为您可以继续调用 remap在从相机接收到的新图像上,前提是它们具有相同的分辨率

关于image - getOptimalNewCameraMatrix 在 OpenCV 中有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39432322/

53 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com