21

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

假设您有一张 jpg 格式的几棵树的图像。您将如何找到每棵树的高度?照片是您唯一的输入。

我想知道你不必编码的方法。因此,您的答案是否含糊或非 DIP-ish 都没关系。

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

4

6 回答 6

8

是的,有可能。你所描述的是围绕它的整个行业,称为摄影测量

于 2010-05-18T19:25:06.470 回答
4

在这个领域有相当多的计算机视觉研究。假设您不知道相机约束,您将不得不对场景和相机做出假设,以确定达到比例因子的高度。请注意,如果没有相机限制或图像中的参考高度,就无法区分从远处拍摄的高大树木或近距离拍摄的矮树之间的差异。Criminisi的Single View Metrology工作是一个很好的开始。

于 2010-05-19T11:36:37.640 回答
4

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

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

以下是步骤:

校准相机

使用openCV校准相机。可以使用OpenCV calibrate.py工具和源码中提供的棋盘图案PNG生成校准矩阵。完成相机校准以找到相机参数。我用我的网络摄像头(为了校准我的网络摄像头)从多个角度拍摄了十多张棋盘照片。有关更多详细信息,请查看openCV 相机校准

我们将从校准矩阵中得到 f_x,f_y,c_x,c_y。

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

每毫米像素数

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

f_x=f*m_x

f_y=f*m_y

由于每个公式都有两个变量,我们可以求解 m_x 和 m_y。我只是将 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

于 2017-04-13T08:58:05.720 回答
1

假设它们的距离都相同,都是按比例计算的,你会想找到一个可以保证的单一测量单位。例如,如果照片中有一个人,同样比例相同,并且您知道他们正好有 6 英尺高,您可以使用它作为衡量标准。然后你拿它,计算有多少堆叠成树。比如你需要这个人的3.5,那么:

3.5 * 6 = 21

给你一棵 21 英尺高的树。

如果没有对所有内容的单一参考点,或者如果它们都在不同的尺度上,那么您需要的信息比您不去那里容易获得的信息要多得多。

于 2010-05-18T19:19:03.443 回答
0

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

或者,我们可以使用 EXIF 数据根据相机的传感器尺寸、镜头和使用的焦距对物体的尺寸进行逆向工程。这又取决于角度。当相机垂直于拍摄对象时,我们应该得到最准确的结果。

于 2010-05-18T19:20:00.840 回答
-4

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

如果您想以 MB 为单位查找图像的大小,就像上面的示例一样,只需执行 (9/8)/(1024)=(----)MB..

所以你会得到 Mb 的结果。

于 2014-11-11T17:37:09.463 回答