关灯
护眼
字体:

随笔系列_pathfinder#大业难成(第8章 关于继黄黑色p站张宇考研数学之后,蓝色p站也可以学习了这码事儿——工程数学:最小二乘法在机器视觉中的应用(实习初步学习笔记)) 第(2/2)页

如图。这个大蓝圈儿的中心就是用真实坐标(13,21)做反变换得到的相机坐标。别的圈儿是我中间debug的时候画的。(二维码的中心坐标是(10,20))

别的一些对应角点、角点排序等问题并不是我们今天的主题,我们不过多赘述,我们今天只讲opencv下最小二乘法的应用。

我们三步走:

第一步,根据实际模型填写矩阵A、B:

第二步:A和B同时乘以A的转置,得A’、B’。

第三步:用A’·X=B’解得X

那么最小二乘法应用完了,最核心的问题就解决了,剩下就是将abcdef装回矩阵,然后用

去做坐标变换罢了。

应用2:小弧度圆的拟合

给定一张图片,拍摄角度不超过10°的一个圆弧,对应的半径在像素上是从至少1000到约2600不等,圆心的位置完全不确定,只知道圆弧上的一组最广分布在±2°上的点和它们不超过±3°的对应旋转关系。

由于第二个任务目前只是在让我做一个初步的算法,还没有具体到实际的可视化,因此不能像第上一个应用那样去给大家直接展示成果,很多时候只能讲理论。

我们假设:原圆心为(x0,y0),一共有a个点,和它们对应的b个旋转关系。(这里的原圆心是(500,900),每个亚像素的噪声在x和y向的都是方差为0.5/2.58的AWGN(AddictiveWhiteGaussianNoise),即以99%概率分布在±0.5,由于这个噪声对于小弧度的圆来说实在过于致命,后来我又用最小二乘法拟合了一条补正的二次曲线,这才有了后面比较精准的解算结果,不过后面的过程我们不多赘述,重点讲第一步这个“粗略”圆心是怎么获得的)。

话不多说,三板斧开砍。

第一步,根据实际模型填写矩阵A、B:

这里的实际模型比第一例还要复杂很多,甚至矩阵维度都不是固定的——如果有a个点,A的维度将会是(a*b, a+2)。这里以a=3,b=3为例。

注意这里建模的时候,建立在“三点隶属同一圆心”这一前提上是十分重要的。Halcon的拟合方法我也用了,它并没有这样的功能,只能用一个点去不停地旋。这种拟合出来的圆心是十分离谱的,完全不能用的。

第二步:A和B同时乘以A的转置,得A’、B’。

第三步:用A’·X=B’解得X

然后,我们取X的前两项,乘以-0.5,就是圆心的坐标了。

总结:

最小二乘法三步走:填矩阵、两边乘转置、解得。说白了就是这么简单。

绝了,经典不务正业,经典一周五千字给金主小刀刮痧但摸鱼却摸的很起劲23333


  哦豁,小伙伴们如果觉得倾城文选不错,记得收藏网址 或推荐给朋友哦~拜托啦 (>.<)
传送门: