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

Sag*_*tam 4 python opencv pixel image-processing

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

Pau*_*rez 5

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

镜头场景到传感器投影(垂直轴)

您可以将图像像素中感兴趣对象的高度表示为150像素:

h_ {obj} = 150像素

你说图像大小的总高度为800像素,假设这是传感器分辨率:

h_ {sensor} = 800像素

您有兴趣找到物体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}(像素)} {h_ {sensor}(像素)}\cdot\frac {h_ {sensor}(mm)} {f(mm)} = H_ {obj}

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

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

3dimefield视图

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

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

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

H_ {obj} = D\cdot\frac {h_ {obj}(像素)} {h_ {sensor}(pixels)}\cdot V_ {FOV}(弧度)

视野是您无法完成计算的参数.为了完成这个例子,我们假设它是90º:

V_ {FOV} =\frac {\ pi} {2}(弧度)

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

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


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

距离D处的垂直分辨率

V_ {分辨率@D(米)} \左(\ frac {mm} {像素} \右)=\frac {1000(mm)} {1(米)}\cdot D(米)\ cdot\frac {V_ {FOV}(弧度)} {V_ {传感器}(像素)}


有关视野的更多信息: