机器视觉径向畸变校正分步实现(标定,四,最小二乘法计算径向畸变)

看图,曾经说过,发现径向畸变值数量级是ok的,最后核实算法也是ok的,但径向畸变值是负值?又找了找,发现径向畸变值大数据出来后,恍然明白了(数据中非常多的负值,相同数量级)。为什么数据有正有负数?说明观察数据还不够(数据行列满篇,仅仅只看左上角,还有其他八个区域呢?分析数据是很有前途,你看多普勒三大行星定律,上天给数据(师傅领进门),多普勒很靠谱)!即使计算正确又有什么用呢?那么请在下一版本中,给出答案(大哥,已经5个版本了,intel处理器仅仅酷睿都十代了,你这都知足了?我看你行!别叽歪)。

我们来看一看最小二乘法计算径向畸变,代码如下:(注重了算法,丢失了其他)

   float 径向参数1 = 0;//B          
            double globrr = 0;//A
            double globrrrr = 0;//D
            double CCC = 0;//C

            float 径向参数2 = 0;  //B  
            double globrrJ = 0;//A
            double globrrrrJ = 0;//D
            double CCCJ = 0;//C
            //注意考虑插补值【0,0】问题,然后再向下201709131620
            if (lastRePlus.Count != 0)//list,旋转后正四格1600;
            {
                int zeroCount = 0;//需要修改为arr2D,201709181707
                for (int i = 0; i < lastRePlus.Count; i++)
                {
                    for (int j = 0; j < lastRePlus[i].Count; j++)
                    {
                        if (0 == lastRePlus[i][j].X && 0 == lastRePlus[i][j].Y)
                        {
                            zeroCount++;
                            continue;
                        }
                        double rr = ((lastRePlus[i][j].X - wban) * (lastRePlus[i][j].X - wban) +
                                       (lastRePlus[i][j].Y - hban) * (lastRePlus[i][j].Y - hban));

                        float 以X得到的径向参数 = (旋转后正四格all[i * lastRePlus[i].Count + j].X - wban) / (lastRePlus[i][j].X - wban);
                        径向参数1 += 以X得到的径向参数;//B                                             
                        globrr += rr;//A
                        globrrrr += rr * rr;//D
                        CCC += 以X得到的径向参数 * rr;//C
                        ///
                        float 以Y得到的径向参数 = (旋转后正四格all[i * lastRePlus[i].Count + j].Y - hban) / (lastRePlus[i][j].Y - hban);
                        径向参数2 += 以Y得到的径向参数;//BJ
                        CCCJ += 以Y得到的径向参数 * rr;//CJ
                        globrrJ += rr;//AJ
                        globrrrrJ += rr * rr;//DJ
                    }
                }
                int count = 旋转后正四格all.Count - zeroCount;
                最小二乘径向参数 = (float)((count * CCC - globrr * 径向参数1) / (count * globrrrr - globrr * globrr));//最小二乘201709131656            
                textBox50.Text = 最小二乘径向参数.ToString();

                最小二乘径向参数 = (float)((count * CCCJ - globrrJ * 径向参数2) / (count * globrrrrJ - globrrJ * globrrJ));//最小二乘201709131656              
                textBox49.Text = 最小二乘径向参数.ToString();
                //径向畸变I和j方向差异太大(不在一个数量级),应给出报警//201709200822

}

标定相关:

1,以前曾经遇到过不能标定的问题,因为标定板是1mm*1mm的方格,而工作的视野是0.8mm*0.6mm,一个格子都装不下,如何标定呢?

这种情况怎么对付?好在镜头选型时,镜头给出的畸变参数,计算后足以忽略误差,对工作无影响。

2,另一种情况,标定板能覆盖1024*768分辨率,而不能覆盖1600*1200,这种情况,又如何标定?要么,更换更大的标定板,要么在无可用的情况下,从1600*1200中取1024*768图像进行标定,并且工作图像也只取1024*768,即1600*1200相机降级为1024*768相机了(原来只用买一个500万的工业相机就可以了,小于500百万的相机,用此法)。

3,其实在机器视觉中,目标决定视野,视野决定镜头和ccd相机,为什么机器视觉可以解决视觉畸变问题,道理在此

4,现在我们也有一种方法来验证镜头径向畸变的好坏,如果你的未畸变网格与亚像素角点重合越多,则镜头畸变越小,这似乎变成了经验之谈

5,在机器视觉中,是不可能出现切向畸变的,如果有,机器视觉标准已经把你置之门外了。而且径向畸变已经写在镜头选型中了,这就是标定在机器视觉中式微的原因,这也是工业镜头和ccd相机高大上贵的原因(标定消化在硬件之中了)。

6,机器视觉如果没有精确二字,就没有存在的价值了。

7,为什么还要标定,消除人性的不放心,其次也算两条腿走路,另外标定还会提供比例尺和坐标系。标定很重要,他是藏在机器视觉中的人工智能。

/以上0510,以下05111251

谁说径向畸变k值不可以为负数?原来他可以为负数,今天找到了原因,请看曾经的初心:

这说明一个问题:人的记忆力不可靠,所以要及时做笔记

目标巅峰(专注标定)时期的考虑,非当下能比,为什么要那样做,为什么用这样的数据,此时是惘然的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值