在调整角度的同时计算图片中梯形的面积

时间:2011-07-26 00:15:49

标签: ios math computer-vision

这是一个普通的数学问题,我希望有人可以帮助我。我的应用程序让用户拍摄屋顶的照片,然后标记屋顶的周长。我想计算用户绘制的梯形区域。然而,由于屋顶是倾斜的,我需要根据这个事实进行调整。

有人能指出我正确的方向吗?我的数学技能非常生疏(并且从未特别强大)。

- 照片可能有所帮助。用户可以使用红线勾画出如下所示的屋顶。但是如果屋顶可以神奇地旋转到与地面垂直,那么它看起来可能会填充更接近蓝线的空间。所以,我想知道的是,有什么数学可以做到这一点吗? (我意识到还有其他选择,例如使用单独的图片计算双面的长度并将它们相乘。)

An example of the type of picture I need to use to calculate area

2 个答案:

答案 0 :(得分:3)

从单纯的图片中获取实际屋顶的区域是不可能的。你不知道这张照片是在5米还是50米处拍摄的,所以在图片中看起来很小的屋顶可能是巨大的。你需要一张深度图来获得屋顶的实际尺寸,即使这样也很棘手。

答案 1 :(得分:2)

这是可能的,但前提是你可以在拍摄照片的情况下添加一系列约束:

  1. 如果您知道用于拍摄照片的镜头的开启角度,并且您知道拍摄照片时相对于屋顶的确切距离(相机与装订线之间的距离),并且照片的拍摄方式完全如同你的样品的顶部垂直于摄像机轴,摄像机直接指向排水沟的水平中心,你知道屋顶是矩形的,然后它非常简单。如果你不介意被10%到25%之间的东西拒之门外。 (取决于各种测量的准确性)。
  2. 如果您无法知道镜头的开启角度(因为图片不是由您控制的相机拍摄的,或者因为照片是由带变焦镜头的相机拍摄的),但是有一个已知尺寸的物体,与图像中相机的已知距离然后它仍然非常简单,因为您可以确定已知对象的打开角度。图像中的物体需要非常大(图像中水平宽度的50%左右),但它可以更接近摄影师,所以它不必像屋顶那么大。
  3. 如果您无法控制拍摄照片的确切位置(即不会直接在排水沟中心对面拍摄),那么您的准确性就会偏离。
  4. 如果您知道相机的水平开启角度alpha,相机与装订线之间的距离Dgut,装订线的宽度(以像素为单位Wgut)和图像的宽度像素Wim,然后您可以从以下位置确定排水沟Lgut的大致长度:

    Dpixgut= Wim/(tan(alpha/2)) # distance to the gutter in pixel space
    tan(anggut) = Wgut/Dpixgut # tan of half "opening angle" of the gutter 
    Lgut= 2*tan(anggut)*Dgut
    

    因为您知道Ltop(屋顶顶部的长度)等于Lgut(这是约束之一),您可以使用顶部的宽度(以像素为单位Wtop计算到屋顶顶部的距离Dtop

    Dpixtop=Wim/(tan(alpha/2)) #dist to top in pixel space
    tan(angtop)=Wtop/Dpixtop
    Dtop=Ltop/(2*tan(angtop)) #dist to roof in real space (note that Ltop=Lgut)
    

    Dtop-Dgut可以粗略估算出屋顶的Lroof长度,因此Dgut*Lroof是该区域的粗略近似值。更确切地说,您必须包含一些类似于上述计算的计算,以确定排水沟的高度和相机轴上方屋顶的顶部,然后为此调整Lroof

    请注意,这种近似就是这样。近似值。尝试一些你知道该区域的屋顶的例子,以了解准确性(我担心这可能会非常糟糕)。