gpt4 book ai didi

ios - 哪种方法是估计拍摄对象尺寸的最佳方法?

转载 作者:搜寻专家 更新时间:2023-10-31 19:30:31 25 4
gpt4 key购买 nike

我的应用应该使用欧元硬币作为引用来估计物体的长度(以毫米为单位)。这是一个截图示例:

enter image description here

为了得到照片中硬币的直径,我首先计算通过表格中这 3 个点的圆的方程

x^2 + y^2 + ax + by + c = 0

然后我的直径是

2 * square_root((a/2)^2 + (b/2)^2 -c)

最后我可以执行以下比例得到红笔的长度:

/* length_estimated_pen (mm) : distance_green_pins (points) = real_diameter_coin (mm) : diameter_on_screen (points) */

let distanceGreen:Double = Double(sqrt(pow(self.greenLocationA.center.x - self.greenLocationB.center.x, 2.0) + pow(self.greenLocationA.center.y - self.greenLocationB.center.y, 2.0)))

let estimatedMeasure:Double = (distanceGreen * Double(ChosenMeter.moneyDiameter)) / diameter

ChosenMeter.moneyDiameter 中存储了所选硬币的实际直径作为引用(通过单击下面 3 个按钮之一)。

我需要使用 Double 而不是 CGFloat 因为 this求解线性方程组(以获得圆方程的 a、b、c 系数)的教程适用于 Double。

问题是红笔的估计长度总是被高估 大于 10 毫米。我想我应该应用校正因子或考虑其他因素使微积分复杂化,但是哪个?你能给我一些提示吗?任何帮助都会对我有用。

最佳答案

  1. 找到硬币(绿色边界框矩形)

    手动或通过某些搜索特定颜色、图案、霍夫变换、分割...这将限制搜索后续步骤的区域

  2. 找到边界(明显的红色边缘颜色强度)

    因此创建一个硬币边界点列表(注意阴影),只需扫描强度足够高的凸起即可。

  3. 计算圆心

    只是所有边界点的平均值...

  4. 测试所有边界点到中心的min/max距离

    如果倾斜很小,那么您将有许多具有最小和最大半径的点,因此从它们中取中间点。如果 |max-min| 非常小,那么您就没有倾斜。最小/最大距离点和中心之间的线为您提供黑色基向量。

  5. 使用black基向量进行测量

    因此选择 2 个点(red 线 d)进行测量,并从它们转换 green 平行于基向量的射线。它们的交集将创建 2a,b。由此很容易:

    • d = sqrt((a*a)+(b*b))

    其中 a,b 是以单位表示的行的大小。你可以这样获得它:

    • a_size_unit = a_size_pixel * coin_r_unit/rmax_pixel
    • b_size_unit = b_size_pixel * coin_r_unit/rmin_pixel

coin

[注意]

选择此图像是为了强调倾斜,但您应该使用几乎与芯片表面平行的平面图像,以避免透视失真。这个图像不是一个很好的例子,立方体离相机比硬币更远......

要说明这一点,请参阅 selection criteria for different projections

关于ios - 哪种方法是估计拍摄对象尺寸的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34065839/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com