Tub*_*bbs 17 c++ math computer-vision mathematical-expressions
我正在使用C++构建识别程序并使其更加健壮,我需要能够找到图像中对象的距离.
假设我的图像距离8.5 x 11图像22.3英寸.系统正确识别尺寸为319像素×409像素的框中的图片.
将实际高度和宽度(AH和AW)以及像素高度和宽度(PH和PW)与距离(D)相关联的有效方法是什么?
我假设当我实际使用方程式时,PH和PW将与D和AH成反比,并且AW是常量(因为识别的对象将始终是用户可以指示宽度和高度的对象).
我不知道你是否在某个时候改变了你的问题,但我的第一个回答对于你想要的东西来说很复杂。你可能可以做一些更简单的事情。
1) 长而复杂的解决方案(更一般的问题)
首先,您需要知道对象的大小。
你可以看看计算机视觉算法。如果你知道物体(它的尺寸和形状)。您的主要问题是姿势估计问题(即找到物体相对于相机的位置),由此您可以找到距离。可以看[1][2](比如有兴趣可以找其他文章)或者搜索POSIT、SoftPOSIT。您可以将问题表述为优化问题:找到姿势以最小化真实图像和预期图像(给定估计姿势的对象的投影)之间的“差异”。对于当前参数,该差异通常是每个图像点 Ni 与对应对象 (3D) 点 Mi 的投影 P(Mi) 之间的(平方)距离之和。
从中您可以提取距离。
为此,您需要校准相机(粗略地,找到像素位置和视角之间的关系)。
现在您可能不想自己编写所有这些代码,您可以使用计算机视觉库,例如 OpenCV、Gandalf [3] ...
现在您可能想做一些更简单(和近似)的事情。如果您可以找到距离相机相同“深度”(Z)的两点之间的图像距离,则可以将图像距离 d 与实际距离 D 相关联: d = a D/Z(其中 a 是与焦距相关的相机,您可以使用相机校准找到的像素数)
2)简短的解决方案(为你简单的问题)
但这是(简单,简短的)答案:如果您在与“相机平面”平行的平面上拍照(即它完美地面向相机),您可以使用:
PH = a AH / Z
PW = a AW / Z
Run Code Online (Sandbox Code Playgroud)
其中 Z 是图片平面的深度,a 是相机的内在参数。
作为参考,针孔相机模型将图像协调 m=(u,v) 与世界协调 M=(X,Y,Z) 相关联:
m ~ K M
[u] [ au as u0 ] [X]
[v] ~ [ av v0 ] [Y]
[1] [ 1 ] [Z]
[u] = [ au as ] X/Z + u0
[v] [ av ] Y/Z + v0
Run Code Online (Sandbox Code Playgroud)
其中“~”表示“成比例”,K 是相机的内在参数矩阵。您需要进行相机校准才能找到 K 参数。这里我假设 au=av=a 和 as=0。
您可以从这些方程中的任何一个中恢复 Z 参数(或取两者的平均值)。请注意,Z 参数不是与物体的距离(随着物体的不同点而变化),而是物体的深度(相机平面和物体平面之间的距离)。但我想这就是你想要的。
[1]线性N点相机姿态确定,龙泉和中单兰
[2] A Complete Linear 4-Point Algorithm for Camera Pose Determination, Lihong Zhi 和Jianliang Tang
[3] http://gandalf-library.sourceforge.net/
| 归档时间: |
|
| 查看次数: |
4797 次 |
| 最近记录: |