我现在没有特定的相机,只是很好奇它是如何以编程/数学方式完成的。

我有一个3D空间,一个矩形,一个摄像机朝上,向内看向内一个角落。
我在那个矩形中有一个移动物体,该物体正在传输它当前的位置。
我要获取这些坐标并将其转换为指示相机指向该位置的指令。
通常如何完成此转换?

评论

您可能需要查看游戏开发人员如何处理其游戏中的相机。这是相同的原理,可以说,他们必须处理阳光下的所有事物。

可能值得注意的是,对象不必在真实的3D空间中传输其坐标,而是可以通过位于相机的FOV中进行传输。然后,您将使用模式识别来找到对象在帧中的位置,然后移动相机以使对象居中(或通过跟踪多个帧中位置的变化并沿该方向移动来识别2D运动矢量) 。例如,我在门廊上的PTZ摄像机扫描门廊以查找不是由于平移动作引起的运动,然后锁定并跟随移动的项目,直到运动停止为止。

我的用例是一个运动分析系统,每个球员都戴着一个标签,该标签可以在球场上传输当前位置,速度等信息。所以我们已经有了位置信息。我肯定会看看模式识别。听起来很有用。

#1 楼

三角函数!
我的相机是DLink 5020-L,具有可以通过API给出的水平/垂直旋转命令。它还具有预定义的位置,也可以通过API
预初始化

将摄像机的位置定义为参考位置中的0°全景和0°倾斜=>我们将其称为Position 1


Init

将相机移动到Position 1

将相机的云台放置在某个地方,在0初始化的变量中或通过API

查看对象

将对象定位在X,Y和Y,Z平面这两个平面中
您可以获取平移(左右)角度(IoT SE中的全数学公式!) angle



别忘了保存/更新新的水平/倾斜值,因为您可能需要相对移动...

您可能会否定以前的结果,具体取决于相机的放置方式
(有时间的时候我会添加一些示意图)

评论


被@hardillb殴打;)他的配方看起来更好...

–古法利特
18 Mar 30 '18 at 9:58

不幸的是,该站点没有LaTeX支持。您也可以从CodeCogs之类的位置将其导出到图像中,以备不时之需。 (我已经为您完成了此操作;请根据需要进行编辑,如果您不想要的话,可以将其删除!)

–Aurora0001♦
18-3-30在10:07



谢谢你们的帮助。这正是我想要的。

–bot_bot
18 Mar 30 '18 at 12:31

我认为您忘记考虑了这样一个事实,即倾斜角的反正切必须相对于斜边上的z分量:将其放在y分量上可能会使您的相机无法充分地升高/降低,因为相机将要沿y分量和x分量之间直角三角形的斜边而不是y轴指向。如我错了请纠正我。 :)很好的答案,虽然。

–anonymous2♦
18-3-30在16:48



@ anonymous2也是我的想法。我认为目前提出的答案还不正确,但我现在没有足够的带宽显示出来-似乎您需要两个三角形和所有三个坐标才能获得可变值(平移或倾斜)。您可以通过可视化两个不同的极端示例来自己证明这一点:1,1,999的x,y,z与1,1,1相比将产生很大不同的平移和倾斜。古法利特的答案为两者提供了相同的底盘。

– dwizum
18 Mar 30 '18 at 17:14

#2 楼

已经有了不错的答案,我只想补充一些您应该考虑的其他事项。就像hardlib和Goufalite已经提到的那样,做到这一点的方法是三角的。我已经绘制了摄像头和IoT对象的二维图:



如您所见,摄像头的视野将更大而不是物体-如果不在近距离内,则当物体移动得更远时。

现在,您可能希望相机始终位于物体的中心。在这种情况下,您可以简单地进行hardlib引用的计算:

ϴ = arctan(y/x)


...根据惯例,它是与x轴逆时针的角度。您还需要远离水平面的角度:

α = arctan(z / ((y^2+x^2)^1/2))


显然,您必须基于所有三个轴的原点来计算摄像机位置。

另一方面,您可能宁愿不要使摄像机移动超出必要的程度,也就是说,仅当对象似乎要移出框架时才使摄像机移动。在这种情况下,您可能需要一个“压力”变量,该变量将使摄像机更有可能根据对象与框架边缘的接近程度来更改其角度。

该路线,您需要在两个视场中都知道摄像机视场的角度,以便可以确定将对象与摄像机视场进行比较的位置。

评论


这很棒!谢谢,此刻,我要保持对象在相机视场中居中。

–bot_bot
18 Mar 30 '18 at 12:36

平移/倾斜摄像机时,每个命令之间会有一定的延迟(〜0.5秒),请注意在移动摄像机时

–古法利特
18 Mar 30 '18 at 13:41

好点-绝对是要考虑的事情。

–anonymous2♦
18 Mar 30 '18 at 14:22

#3 楼

通常,这是使用基本三角函数完成的。 br />鉴于x距离将是三角形的相邻边,而y距离将是相反的,您将得到:



所以摇摄角度可以是可以通过



找到,也可以使用以下方法计算出相机和物体之间的直线距离(斜边): br />
给定:



现在,您可以以相同的方式使用h距离和z高度来计算倾斜角。 >
一旦有了角度,就可以将这些角度馈入控制相机平移/倾斜的位置。