为了获得拍摄硬币的直径,我首先计算通过该形式的3个点的圆的方程
x ^ 2 y ^ 2 ax由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毫米.
我想我应该考虑其他因素来应用校正因子或使微积分复杂化,但是哪个?你能给我一些提示吗?任何帮助对我都有用.
手动或通过搜索特定的颜色,图案,霍夫变换,分割……这将限制搜索后续步骤的区域
>找到边界(颜色强度明显的红边)
因此,创建一个作为硬币边界的点列表(小心阴影),只扫描足够高的强度凸起.
>计算圆心
只是所有边境点的平均值……
>测试所有边界点的最小/最大距离到中心
如果倾斜很小,那么你将有许多具有最小和最大半径的点,所以从它们中间取出.如果| max-min |非常小,然后你没有倾斜.最小/最大距离点和中心之间的线为您提供黑色基础向量.
>使用黑色基矢量进行测量
因此,选择2个点(红色线d)来测量并从它们平行于基础矢量投射绿色光线.他们的交叉点将创建2条线a,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
[注意]
选择此图像是为了强调歪斜,但是您应该使用几乎平行于芯片表面的平面图像以避免透视变形.这个图像不是一个很好的例子,立方体更远离相机然后硬币……
考虑到这一点,请参阅selection criteria for different projections
总结以上是内存溢出为你收集整理的ios – 估算拍摄物品尺寸的最佳方法是什么?全部内容,希望文章能够帮你解决ios – 估算拍摄物品尺寸的最佳方法是什么?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)