我不确定这是否可行,但我确实不确定。

我目前有一个球体的照片,我已对其半径进行了物理测量。从照片和所有内部相机参数知道球体的视在大小,是否有可能估算从相机到球体的距离?

有一个方程式,在镜头成像中更多用,很有用:

object_image_size =(real_object_size * lens_focal_length)/物体距离

问题是我的object_image_size以像素为单位,我需要将其转换为现实尺寸,最好是实际上出现在传感器上。

#1 楼

我可能会误解您的要求,但是如果您知道传感器的大小和对象中像素的数量,那么就可以计算出对象的大小。例如,佳能7D的APS-C传感器为22.3 x 14.9mm和5184 x 3456像素。达到〜0.0043mm /像素。因此,如果您有一个250像素宽的对象,那么该对象在传感器上的投影将是250像素* 0.0043mm /像素= 1.075mm宽。

编辑:
所以只是为了好玩,我尝试了一下。我拿了一个300mm的尺子,将它放在距相机1米的地方,然后用50mm镜头在佳能7D上拍摄。根据Photoshop中的标尺工具,其宽度为3734像素。那给了我以下等式:

3734 * 0.0043 =(300 * 50)/ 1000



16.0562 = 15.0

好吧,这很接近,但并不确切。 (超过7%。)我的猜测是传感器的位置尺寸实际上比0.0043mm略小,或者传感器的尺寸比报告的尺寸稍大。实际上,相机的规格说有效尺寸为18MP,但实际传感器尺寸为19MP。所以我不确定这意味着什么,但是我猜它解释了我的实际结果和计算结果之间的差异。 (或者是我在Photoshop中误读了长度,实际上它应该是3488像素而不是3734像素。)但是尝试尝试很有趣!

第二编辑:Photo Stack Exchange上的这个问题解释了它。相机镜头通常比要求的长度更长或更短,但四舍五入到最接近的良好焦距。因此(假设我的计算和测量是正确的),我的镜头实际上是一个〜53.5mm镜头。

评论


$ \ begingroup $
这样可以估计现实世界物体的距离吗?
$ \ endgroup $
– joojaa
16年7月14日在14:13

$ \ begingroup $
我不确定。我试图解释您提出的方程式。但今晚回家后,我会用尺子尝试一下,并将结果发布在这里。
$ \ endgroup $
–user1118321
16年7月14日在15:55

$ \ begingroup $
这正是我想要的转换系统。直接从传感器尺寸看还不够好,因为相机通常会裁剪其接收到的图像的一部分。值得庆幸的是,尽管大多数相机都具有像素大小(通常以微米为单位),这恰恰是为此所需的转换量度!
$ \ endgroup $
– Kronephon
16年7月14日在19:15

$ \ begingroup $
焦距也受相机对焦的影响。因此在拍摄过程中,焦距会略有变化,因为通过移动元素可以实现对焦。这就是为什么您在图像上使用大量测量值和ransac来更好地估计实际值的原因。因此,您的有效值不仅与规格有所不同,而且在每个相机和每个镜头中的区别都不同。此外,您的尺子可能无法与相机和相机完美对齐。这可能不是完美的针孔等。
$ \ endgroup $
– joojaa
16 Jul 24 '19:44



$ \ begingroup $
也许您可以在标尺上执行几个实验来校准相机的参数。或者只是使用样本通过回归直接估算参数。
$ \ endgroup $
–TheBusyTypist
16年7月26日在16:29

#2 楼

是的,从理论上讲,对于球体而言,对于图像中的其他事物而言,是不可行的。如果有可能加剧这种情况,那么就可以衡量您可以更可靠地跟踪的任何事物。首先,要知道可以成功跟踪的对象的比例是获取图像比例的必要条件,因为相机会丢失所有比例信息。但是,仅凭此要求是不够的。

实际上,您不知道摄像机的其他设置(除非先用立体几何进行校准),否则在进行真正的摄像机跟踪时会出现各种问题。如真实的相机镜头并不理想。通过跟踪场景中的两个以上功能,您可以自动估计实际的焦距和相机失真。更重要的是,您可以对数据进行错误估计。

一种方法是在场景中以不同角度拍摄两张具有足够深度变化的照片(对于静止的对象,这非常容易)。然后,您可以使用立体几何来解决作为特殊效果包的一部分而存在的许多此类跟踪器应用程序的深度,并且制作自己的跟踪器并不是完全不可能的(有趣的链接,基本的矩阵乐曲)。第二种方法是拥有一个已知平面,可以通过知道4个点及其相对位置来求解该平面。实际上,最好将更多点用于误差和镜头校正估计。第三种方法是使用结构化光(例如激光点云,或一条线)对点距离进行三角测量。或者您可以使用光场相机。