如何测量现实世界中物体尺寸的测量方法,如英寸厘米等,从像素中的物体尺寸来看?

时间:2017-02-04 02:05:48

标签: python opencv image-processing pixel

我根据包含对象的图像计算了pixel的对象大小。我想在现实世界中测量对象大小。有没有办法找出倍增因子来衡量实际尺寸?我目前正在使用python进行实施。

1 个答案:

答案 0 :(得分:5)

通常,您将使用相机通过镜头将3维场景投影到2维传感器上来获取图像。垂直(高度)投影如下图所示(我假设直线镜头):

Lens Scene to Sensor projection (Vertical axis)

您将感兴趣对象的高度(以像素为单位)表示为150像素:

h_{obj} = 150 pixels

您说图像尺寸的总高度为800像素,假设这是传感器分辨率:

h_{sensor} = 800 pixels

您有兴趣找到物体 H_ {obj} 的公制系统中的实际高度,该物体距离相机的距离 D

弧度表示角度,我们可以建立以下关系:

D \cdot \theta = H_{obj} , f \cdot \theta = h_{obj}

其中 f 是镜头的焦距。

隔离术语代替我们达成 \frac{D}{f}\cdot h_{obj} = H_{obj}

但您已经以像素表示了h_ {obj},并且您希望在公制系统中表达H_ {obj}。所以,让我们先从像素移动到毫米。

h_{obj} (mm) = \frac{h_{obj}(pixels)}{h_{sensor}(pixels)}\cdot h_{sensor} (mm)

让我们假设您不知道传感器高度,因此我们暂时将其保留为变量。重新排列,表示焦距为毫米(mm)并代入上一个等式,我们有:

D \cdot \frac{h_{obj}(pixels)}{h_{sensor}(pixels)} \cdot \frac{h_{sensor}(mm)}{f(mm)} = H_{obj}

注意这个词: \frac{h_{sensor}(mm)}{f(mm)} = \alpha (radians)

\ alpha表示相机的垂直视野(因为我们使用传感器高度),这是通常为相机和相机提供的参数。镜头计算。

3dimensional Field of View

通常以度为单位给出,所以我们只需将其转换为弧度。

\frac{V_{fov}º}{180º}\cdot \pi = V_{fov} (radians)

  • 如果您确实知道镜头的焦距和传感器的大小,只需直接计算视野。这给我们留下了以下等式:

H_{obj} = D \cdot \frac{h_{obj}(pixels)}{h_{sensor}(pixels)} \cdot V_{FOV} (radians)

视野是您缺少的参数,可以完成您的计算。为了完成这个例子,我们假设它是90º:

V_{FOV} = \frac{\pi}{2} (radians)

您现在用来表达距离 D 的单位系统将定义用于表示h_ {obj}的单位。

H_{obj} (meters) = D(meters) \cdot \frac{150}{800} \cdot \frac{\pi}{2}

另一种方法是,给定一个视野,并假设一个直线透镜,你可以计算距离相机一定距离的像素高度和像素宽度。

距离D处的垂直分辨率

V_{resolution@D(meters)} \left(\frac{mm}{pixel}\right) = \frac{1000(mm)}{1(meter)} \cdot D (meters) \cdot \frac{V_{FOV}(radians)}{V_{sensor}(pixels)}

有关视野的更多信息: