700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 相机视场角和焦距_相机视场角估计

相机视场角和焦距_相机视场角估计

时间:2022-09-19 12:05:32

相关推荐

相机视场角和焦距_相机视场角估计

上一篇文章说明了如何通过已知点来计算相机的姿态信息:MagicVanish:相机姿态反求​

其中关键的一步需要根据画面上的像素坐标计算从相机中心发射出去的向量,这便需要相机的视场角等相关参数。

除了渲染用的虚拟相机可以明确知道视场角外,真实的物理相机的视场角就不那么好确定了,虽然可以收集感光元件尺寸、光圈大小和焦距等数据来计算,但终究不够精确。

那么是否可以通过相机拍摄的画面来计算呢?

上一篇文章中构造的误差函数,使用了四个已知点的数据,但只在相机视场角已知(即向量方向较为准确)的情况下才能求得较为准确的距离值。为了反推视场角的数据,我们需要用更多的已知点,来构造误差函数。

按照四个已知点的误差函数的经验,我们可以给出多个已知点的误差函数。设 n 个已知点在相机空间的向量方向为 Ri ,距离为 ti ,已知点之间的距离平方用 Dij 表示,则误差函数为:

要估计相机的视场角,我们可以先假定多个数值作为视场角,然后求出向量 Ri 并代入到上面的误差函数,通过梯度下降法求得误差函数的极小值。如果视场角偏差过大,那么误差函数的极小值也会很大;而如果视场角接近真实值,那么误差函数的极小值就会接近 0 。

下面举个实际的例子,这是我手机拍摄的一张照片,为了能够方便地获取已知点的坐标,拍摄的对象是坐标系:相机拍摄的图像

图中用红圈标注了九个点作为已知点,因为它们都在一个平面上,所以 z 值都视为 0 。然后九个已知点两两组合得到误差函数,假定相机的(垂直)视场角在 20°~90° 之间(显然),我们可以绘制出梯度下降收敛后的误差函数图像:误差函数图像

可以看到在视场角小于 45° 时,误差值都很大,但是在迅速减小;大于 55° 时,误差缓慢增加,所以可以判定相机真实的视场角在 50° 左右。误差函数细节

放大图像后可以看到在 51° 左右有最小值。实际程序的结果给出,相机的视场角为 51.46° 左右,而百分之一的角度精度已经足够使用需求了。

误差函数不仅能判定相机的视场角,同时收敛后的向量长度值也可以用于计算相机的姿态数据,且精度会比之前只用四个已知点的数据更精确。可以说已知点的数量越多,计算出来的相机姿态数据更好。

而上图程序计算给出的相机姿态数据为:相机姿态数据

为了验证结果,我们使用虚拟相机来渲染坐标系上的点,及原图包含的函数图像 y=sin(x)x :渲染对照

可以看到,渲染的点大多都很接近坐标系上的点,但仍有少许误差,毕竟从误差函数图像上可以看到,误差的最小值依旧是大于 0 的。

我们上述所有的讨论其实都基于理想化的相机模型,但实际的相机因为硬件的诸多限制,总是会有些误差,造成图像的畸变。具体的要校正这些误差就涉及到相机标定中相机内参的计算了,在此不做讨论。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。