如何在给定图像的情况下找到物体的高度?

时间:2010-05-18 19:14:59

标签: image-processing computer-vision photogrammetry

这不完全是一个编程问题。我只是想知道你的方法对于数字图像处理中的常见问题。

假设您有jpg格式的几棵树的图像。你会如何找到这些树木的高度?照片是您唯一的输入。

我想知道你没有编码的方法。因此,如果您的答案含糊不清或非DIP-ish无关紧要。

小修正: 高度不必是树的实际高度。高度可以达到任何比例。但应该与图片中的所有对象保持一致。

6 个答案:

答案 0 :(得分:8)

是的,这是可能的。您所描述的内容围绕着整个行业,称为Photogrammetry

答案 1 :(得分:4)

该领域有大量的计算机视觉研究。假设您不知道摄像机的限制,您必须对场景和摄像机进行假设,以确定高达比例因子的高度。请注意,如果没有相机约束或图像中的参考高度,则无法区分从远处拍摄的高大树或近距离拍摄的短树之间的区别。一个很好的开始是Criminisi的Single View Metrology工作。

答案 2 :(得分:4)

使用摄影测量法从图像中找到对象的大小很简单。 摄影测量是从照片进行测量的科学。 为此,我们需要了解两件事,

  • 相机与图像平面之间的距离(相机与物体之间的距离)。
  • 焦距(以毫米为单位,每毫米像素数)或图像传感器的物理尺寸。

以下是步骤:

校准相机

使用openCV校准相机。您可以使用源代码中提供的OpenCV calibrate.py工具和Chessboard pattern PNG生成校准矩阵。完成摄像机校准以查找摄像机参数。我从网络摄像头拍摄了大量的棋盘照片照片(用于校准我的网络摄像头)。有关详细信息,请查看openCV camera calibration

我们将从校准矩阵中获取f_x,f_y,c_x,c_y。

检查拍摄照片的详细信息,您将找到照片的原始分辨率(heightXwidth),在EXIF headers中可以找到焦距值(f)。这些项目可能因您的相机而异。

每毫米像素数

我们需要知道图像传感器上每毫米的像素数(px / mm)。

<强> F_X = F * m_x

<强> f_y = F * m_y

由于每个公式都有两个变量,我们可以求解m_x和m_y.I只需要平均f_x和f_y来得到f_xy。

<强> M = f_xy / focal_length_of_camera

插入图片

插入您需要查找图像实际尺寸的图像。你应该知道物体和相机之间的距离。找到图像的尺寸(height1Xwidth1)

查找对象大小(以像素为单位)

确定对象的大小(以像素为单位)。我只是使用距离公式来查找所选行的长度。您可以采用任何其他方法。

转换分辨率较低的px / mm

pxpermm_in_lower_resolution =(width1 * m)/ width

图像传感器中对象的大小

size_of_object_in_image_sensor = object_size_in_pixels /(pxpermm_in_lower_resolution)

对象的实际大小

可以使用上述数据找到对象的实际大小,

real_size =(dist * size_of_object_in_image_sensor)/ focal_length

答案 3 :(得分:1)

假设它们距离相同,所有都可以扩展,您需要找到一个可以保证的单一测量单位。例如,如果照片中有一个人,同样的比例,并且你知道它们正好是6英尺高,那么你可以将它作为衡量标准。然后你接受它,并计算堆积多少树。例如,如果您需要此人的3.5,那么:

3.5 * 6 = 21

给你一棵21英尺高的树。

如果没有针对所有内容的单一参考点,或者如果它们都在不同的尺度上,那么您需要的信息量远远超过您在没有的情况下可以获得的信息。

答案 4 :(得分:0)

我会依赖于已知尺寸的物体出现在图片中。例如,一个男人。

或许,我们可以使用EXIF数据根据相机的传感器尺寸,镜头和使用的焦距来反向设计物体的大小。这又取决于角度。当相机垂直于拍摄对象时,我们应该获得最准确的结果。

答案 5 :(得分:-4)

如果您的图像是3 * 3并且您想要找出图像的大小(即3x3..so 3x3 = 9),现在我们有8个像素,从0到8开始。所以9/8 =(___) KB。

如果你想以MB为单位找到图像的大小,就像上面的例子一样,只需这样做(9/8)/(1024)=(----)MB ..

所以你会得到Mb的结果。