基于相机高度的图片位置偏移

Posted

技术标签:

【中文标题】基于相机高度的图片位置偏移【英文标题】:Position shift in picture based on camera height 【发布时间】:2021-11-15 23:20:23 【问题描述】:

我有一个小问题,也许这里有人可以帮助我。

我使用相机对假人进行测量。相机图片包含一个矩形,假人应放置在该矩形中。

确定矩形的大小是没有问题的,因为虚拟大小、到相机的距离和焦距是已知的。 ( pixelsize = (size*focallength)/distance )

问题出现在使用不同的相机高度进行测量时。如果将相机放置得更高,则图片中的虚拟位置会下降。 好像前面提到的公式不能用在这里,我得到的结果是错误的。

我尝试测量不同相机高度的差异,并发现它的变化是非线性的。

所以我的问题是,是否有方法或公式可以根据相机高度确定图片中虚拟位置的移动。 我已经搜索过解决方案,但没有找到任何具体的解决方案。 提前谢谢!

【问题讨论】:

您可以通过计算和应用单应矩阵来检查镜头畸变。除此之外,如果你知道你的相机高度和目标距离......一切都应该是相当线性的。 @SneakyPolarBear 单应性不是失真造成的,而是正常透视效果造成的。 如果您的相机保持直立,则外观尺寸不会改变。所以大概你倾斜它,矩形变成梯形。你必须求助于透视投影方程。 所有透视效果都应该是线性的 afaik,镜头失真是唯一会导致非线性问题的因素 @Okayyo 正如 Yves 所说,您将不得不倾斜相机并使其更靠近假人,请查看下面我的答案中的数字。 【参考方案1】:

如上图所示:

    当您将摄像头放得更高时,您需要将其倾斜一个角度(紫色角)并靠近以将假人放入矩形(红色矩形)内 在这种情况下,当使用您的公式( pixelsize = (size*focallength)/distance ) 时,您将获得 orange 行长度,这将给出正确的较小值,您需要 green行长 你可以从橙色线条长度和紫色角度得到绿色线条长度 要获得紫色角度,如果您使用的是移动设备,您可以使用加速度计,也可以手动获得,因为您需要倾斜相机以将假人放在红色矩形内。 所以公式是orang line length / sin(purple angle) = green line length

Green = Orange / sin(Purple)

【讨论】:

对不起,我的回答迟了,但非常感谢 :)

以上是关于基于相机高度的图片位置偏移的主要内容,如果未能解决你的问题,请参考以下文章

iCarousel 显示偏移为 1/2 高度和 1/2 宽度

如何获取对象的高度和宽度?

各种位置和高度计算:.position().offset().outerHeight().scrollTop.scrollHeight.clientHeight

关于深度相机的精度问题

jquery实现高度的获取-位置函数

位置:粘性 - 结合 javascript 高度调整时滚动弹跳