【发布时间】:2015-03-25 07:12:02
【问题描述】:
我在四轴飞行器上使用 Microsoft Lifecam HD 3000 进行自主着陆。 我希望计算四轴飞行器上的机载摄像头与印有矩形的着陆垫之间的距离。然后可以将该距离作为误差馈送到 PID 控制器。我正在使用python对此进行编码。任何人都可以提出一个简单的方法来找到距离。
PS:我不需要距离的确切值
【问题讨论】:
标签: python opencv image-processing distance
我在四轴飞行器上使用 Microsoft Lifecam HD 3000 进行自主着陆。 我希望计算四轴飞行器上的机载摄像头与印有矩形的着陆垫之间的距离。然后可以将该距离作为误差馈送到 PID 控制器。我正在使用python对此进行编码。任何人都可以提出一个简单的方法来找到距离。
PS:我不需要距离的确切值
【问题讨论】:
标签: python opencv image-processing distance
如果着陆矩形大小已知/不变,那么它是可行的
需要准备的一些数据
在已知距离处拍摄着陆矩形的图像。使用您的 Microsoft Lifecam HD 3000 与直升机上的相同设置(或自行使用)并计算/测量以像素为单位的矩形大小并存储它。所以你有:
xs0,ys0 - 矩形大小 [px]d0 - 距离相机图像的距离 [m]拍照
找到上面的矩形并尝试将其投影为垂直于相机视图轴。然后以像素为单位计算其大小xs,ys
计算距离
使用三角形相似度
这张图片是为这个 Q/A 制作的:Specifiyng speed from visual size 可以提供帮助。所以
h 是每个轴上的矩形大小(以像素为单位)z 是到相机焦点的距离所以改写为上面你得到的名字
dx=d0*xs/xs0 [米]dy=d0*ys/ys0 [米]dx 和dy 应该是相同的,但是如果您的图像不是垂直的或有其他失真,那么它们会有点不同。所以距离是它的平均值或最小值或最大值取决于安全原因。例如
d=0.5*(dx+dy) [米][备注]
距离是从相机的投影点开始测量的,因此如果您不知道其位置,则从距已知点的 2 个已知距离获取矩形图像并计算焦点位置 ...
【讨论】: