【发布时间】:2016-03-08 01:23:07
【问题描述】:
我的应用程序应该使用欧元硬币作为参考来估计物体的长度(以毫米为单位)。这是一个截图示例:
为了得到所拍摄硬币的直径,我首先计算了一个圆通过表格中这 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 毫米。 我想我应该应用一个校正因子或考虑其他因素使微积分复杂化,但是哪个?你能给我一些提示吗?任何帮助都会对我有用。
【问题讨论】:
-
您可能应该考虑 iPhone 的倾斜,除非您确定拍照时它会完全平坦。
-
这正是我在想的,但我不知道要得到那个倾斜还是在微积分中使用它......
-
为了做到这一点,您必须以 3D 形式表示空间,这在 iPhone 上并不容易。但是,您可以访问 iPhone 的倾斜信息 (stackoverflow.com/questions/7135934/ios-gyroscope-api),并且仅在 iPhone 足够平坦时才允许用户拍照(请考虑一些误差范围)。这可能会改善您的测量结果
-
您的错误似乎很大归因于倾斜,尤其是在上面发布的示例图像中。我会检查你的方法。还尝试根据直径(仅两个点)计算像素大小以进行比较。最后,您应该计算硬币上的参考点偏离 1,2,3 像素时的误差,从而知道计算出的另一个对象大小的误差范围。
-
找到硬币的最小和最大直径,这些是你的平面的基向量,你应该有更好的测量值......每个基向量使用不同的比例
标签: ios swift image-processing geometry measurement