精华内容
下载资源
问答
  • 看图,曾经说过,发现径向畸变值数量级是ok的,最后核实算法也是ok的,但径向畸变值是负值?又找了找,发现径向畸变值大数据出来后,恍然明白了(数据中非常多的负值,相同数量级)。为什么数据有正有负数?说明观察...

    看图,曾经说过,发现径向畸变值数量级是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值不可以为负数?原来他可以为负数,今天找到了原因,请看曾经的初心:

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

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

    展开全文
  • 径向畸变,切向畸变

    千次阅读 2019-08-14 17:28:14
    径向畸变发生在相机坐标系转图像物理坐标系的过程中。 1.径向畸变 产生原因是光线在远离透镜中心的地方比靠近中心的地方更加弯曲径向畸变主要包含桶形畸变和枕形畸变两种。下面两幅图是这两种畸变的示意: ...

    《山鹰》

     

     

     

    径向畸变发生在相机坐标系转图像物理坐标系的过程中。

     

    1.径向畸变

           产生原因是光线在远离透镜中心的地方比靠近中心的地方更加弯曲径向畸变主要包含桶形畸变和枕形畸变两种。下面两幅图是这两种畸变的示意:
     

     

    它们在真实照片中是这样的:

     

    2.切向畸变:产生的原因透镜不完全平行于图像平面,这种现象发生于成像仪被粘贴在摄像机的时候。

    切向畸变是发生在相机制作过程,其是由于感光元平面跟透镜不平行。其如下:

     

    图显示根据镜头畸变系数校正后的效果:

    image from :https://blog.csdn.net/dcrmg/article/details/52950141

     

     

    Reference:1 https://blog.csdn.net/yangdashi888/article/details/51356385

    2 畸变矫正—让世界不在扭曲 

    展开全文
  • 径向畸变校正

    千次阅读 2019-05-05 13:07:37
    1、畸变矫正主要包括径向畸变和切向畸变 (1)径向畸变(枕形、桶形):光线在远离透镜中心的地方比靠近中心的地方更加弯曲 (2)切向畸变:透镜不完全平行于图像平面,即sensor装配时与镜头间的角度不准 2、径向...

    1、畸变矫正主要包括径向畸变和切向畸变

    (1)径向畸变(枕形、桶形):光线在远离透镜中心的地方比靠近中心的地方更加弯曲

    (2)切向畸变:透镜不完全平行于图像平面,即sensor装配时与镜头间的角度不准

     

    2、径向畸变矫正原理

    (1)矫正前后的坐标映射

    输出图像(nJ,nI)--(宽高缩放比)->矫正后图像--(张氏标定法)->矫正前图像(输入图像(fOrgJ,fOrgI))

    (2)映射到原图的坐标不一定是整数,双线性插值

    举例:输出图像(3,4)映射到输入图像(5.25,6.75)

    输出图像(3,4) = 输入图像取(5,6)、(5,7)、(6,6)、(6,7)四点像素值双线性插值

    = 输入图像(5+0.25,6+0.75) 

    = (1-0.25)(1-0.75)f(5,6)+(1-0.25)*0.75*f(5,6+1)+0.25*(1-0.75)f(5+1,6)+0.25*0.75*f(5+1,6+1)

     

    3、径向畸变矫正算法伪代码

    张氏标定法

    其中(u, v)代表理想无畸变(即矫正后)的像素坐标,(˘u, ˘v)代表实际径像畸变的情况下(矫正前)的像素坐标,(u0, v0)代表理想无畸变(即矫正后)的图像主点,(u1, v1)代表实际径像畸变(即矫正前)的图像主点。x, y在这里分别代表矫正后图像中(u, v)点像素分别在行向和列向与主点的距离。

    (1)输入图像主点(图像中心点坐标)--(张氏标定法)->矫正后图像主点(矫正后图像宽高)--->计算输出图像与矫正后图像宽高缩放比

    (2)输出图像坐标通过宽高缩放比映射到矫正后图像坐标

    (3)矫正后图像坐标通过张氏标定法映射到输入图像坐标

    (4)双线性插值

     

    4、优化、加速策略

    (1)双线性插值

    *源图像和目标图像几何中心对齐

    SrcX=(dstX+0.5)* (srcWidth/dstWidth) -0.5
    SrcY=(dstY+0.5) * (srcHeight/dstHeight)-0.5

    *将浮点运算转换成整数运算(除法采用移位操作)

    *多线程

     

     

     

     

     

     

     

    展开全文
  • 1,径向畸变作用图像 double 切向参数 = 最小二乘x上得到的//20160810 double 切向参数1 = 最小二乘y上得到的 double pingjun = (切向参数+ 切向参数1) / 2; byte[] buffer24 = new byte[1024 * 768 * 3]; for...

    分两步走:

    1,径向畸变作用图像

    a:初心版本//20160810

               double 粗糙切向参数 = x上得到的1+k*r*r
                double 粗糙切向参数1 = y上得到的1+k*r*r
                double pingjun = (粗糙切向参数 + 粗糙切向参数1) / 2;
                byte[] buffer24 = new byte[1024 * 768 * 3];
                for (int j = 0; j < CA_H; j++)//标定图像的高
                {
                    for (int i = 0; i < CA_W; i = i + 1)//标定图像的宽         
                    {
                        int xcorrect = 0, ycorrect = 0;
                        xcorrect = cx + (int)((i - cx) / pingjun);//cx,cy是图像中心
                        ycorrect = cy + (int)((j - cy) / pingjun);
                        
                        buffer24[ycorrect * 1024 * 3 + xcorrect * 3] = CA_tempImage33gaos[j * CA_W  + i ];
                        buffer24[ycorrect * 1024 * 3 + xcorrect * 3 + 1] = CA_tempImage33gaos[j * CA_W  + i ];
                        buffer24[ycorrect * 1024 * 3 + xcorrect * 3 + 2] = CA_tempImage33gaos[j * CA_W + i];
                    }
                }

    b进化版本(最小二乘结果):

                double 切向参数 = 最小二乘x上得到的k
                double 切向参数1 =最小二乘 y上得到的k
                double pingjun = (切向参数 + 切向参数1) / 2;

                 int CA_W = pictureBoxCali.Image.Width;
                int CA_H = pictureBoxCali.Image.Height;
                int cx = CA_W / 2;
                int cy = CA_H / 2;
                byte[] buffer24 = new byte[CA_W * CA_H * 3];
                for (int j = 0; j < CA_H; j++)
                {
                    for (int i = 0; i < CA_W; i = i + 1)
                    {
                        int xcorrect = 0, ycorrect = 0;
                        int r2 = (i - cx) * (i - cx) + (j - cy) * (j - cy);//r2是半径r*r
                        xcorrect = cx + (int)((i - cx) / (1 + pingjun * r2));//cx,cy是图像中心
                        ycorrect = cy + (int)((j - cy) / (1 + pingjun * r2));

                    //标定完成后的图像byte[]201709240744
                        buffer24[ycorrect * CA_W * 3 + xcorrect * 3] = tongyongimg33gaos[j * CA_W + i];
                        buffer24[ycorrect * CA_W * 3 + xcorrect * 3 + 1] = tongyongimg33gaos[j * CA_W + i];
                        buffer24[ycorrect * CA_W * 3 + xcorrect * 3 + 2] = tongyongimg33gaos[j * CA_W + i];
                    }
                }

    2,显示图像

      int bytes = CA_H * CA_W * 3;

             //   Bitmap cutPic24 = new Bitmap(1024, 768, System.Drawing.Imaging.PixelFormat.Format24bppRgb);

        Bitmap cutPic24 = new Bitmap(CA_W , CA_H , System.Drawing.Imaging.PixelFormat.Format24bppRgb);

              //  BitmapData _cutPic = cutPic24.LockBits(new Rectangle(0, 0, 1024, 768), ImageLockMode.ReadWrite,
                             //                        cutPic24.PixelFormat);

    BitmapData _cutPic = cutPic24.LockBits(new Rectangle(0, 0, CA_W , CA_H ), ImageLockMode.ReadWrite,
                                                   cutPic24.PixelFormat);
                IntPtr ptr = _cutPic.Scan0;//得到首地址                   
                //把cutvalues数组给ptr
                System.Runtime.InteropServices.Marshal.Copy(buffer24, 0, ptr, bytes);
                cutPic24.UnlockBits(_cutPic);

                pictureBox1.Image = cutPic24;

    标定之细作脉络基本完成,有什么收获期望?

    1,把线图像工具可以进化为标定板未畸变网格

    2,步骤太多,应合并,或删减。

    3,两种大数据,应勤加观察,亚像素角点在九宫格区域上的分布情况(径向畸变参数在九宫格区域上的分布情况)。

    4,ccd中心,镜头中心,图像中心,标定板未畸变网格中心种种关系详细查看。

    5,13*17行列怎么变成12*16行列的

    6,不必要的算法去除,提高速度。

    展开全文
  • 径向畸变切向畸变理想的针孔成像模型,物和像满足相似三角形的关系。实际上由于相机光学系统制造工艺的误差,实际成像与理想成像存在几何失真,称为畸变。根据Brown畸变模型,畸变主要分为径向畸变和切向畸变。径向...
  • 径向畸变 畸变程度都是从中心开始,用一个半径画圆的话,半径越大,圆周上的畸变程度也越大。这个就是由于相机透镜的形状导致的,且越向透镜边缘移动径向畸变越严重。 切向畸变 切向畸变是由于透镜和CMOS或者CCD的...
  • 鱼眼镜头径向畸变的校正方法.pdf,针对鱼眼图像存在的径向畸变,提出了一种通过计算鱼眼镜头径向畸变函数来校正鱼眼图像的方法。首先,根据鱼眼镜头本身的特性运用Hough变换获取鱼眼图像的圆心以及校正半径;运用所...
  • 径向畸变 反(逆)径向畸变 径向畸变,可以简单的总结为:图像中心处的放大倍数大于在边缘处的放大倍数。 有两个系数 的多项式径向畸变模型有为如下公式: 多项式的径向畸变公式 但是有人证明了有更...
  • 图像径向畸变矫正

    千次阅读 2014-04-23 16:34:02
    1. 最近遇到图像畸变矫正的问题, 因此学习了张正友的"A Flexible New Technique for Camera Calibration"一文,只...其中(u,v)为理想的像素坐标,由于径向畸变的存在,实际得到的有畸变的位置变成了u',v'. 为了
  • 相机畸变主要分为两种,径向畸变与切向畸变。(1)径向畸变(枕形、桶形):光线在远离透镜中心的地方比靠近中心的地方更加弯曲。上图就是径向畸变的两种形式,其产生的原因是()。(2)切向畸变:透镜不完全平行于图像...
  • 图像旋转、径向畸变、TPS变形代码
  • 自标定去除径向畸变

    千次阅读 2019-03-14 10:43:12
    * This program shows how radial_distortion_self_calibration can be used to * calibrate the radial distortion coefficient and the ...* 能够用于标定径向畸变参数和畸变中心 * In the first part of the ...
  • 图像添加径向畸变

    2017-08-28 22:07:00
    而在某些特殊的情况下,你可能会需要往图像中加入畸变,下面简单实现了一个向无畸变图像中人为加入径向畸变。 仍然以这幅风景图为例,我用手机拍摄的,畸变程度可以忽略: 1.人为加入桶形畸变(边缘放大率小于...
  • 距图像中心越远,径向畸变越大。例如,下面显示一个图像,其中棋盘的两个边缘用红线标记。但是,您会看到棋盘的边框不是直线,并且与红线不匹配。所有预期的直线都凸出。有关更多详细信息,请访问“失真(光...
  • 根据前面得到的两个径向畸变系数来校正失真图像。 校正函数: //校正图象 void UndistortImage(const std::string &in, //原始畸变图文件名 const camera_params_t &camera,//图像的焦距,和两个径向畸变系数 ...
  • 距图像中心越远,径向畸变越大。例如,下面显示一个图像,其中棋盘的两个边缘用红线标记。但是,您会看到棋盘的边框不是直线,并且与红线不匹配。所有预期的直线都凸出。有关更多详细信息,请访问“失真(光...
  • 什么是径向畸变

    千次阅读 2015-03-11 15:28:11
    径向畸变”就是矢量端点沿长度方向发生的变化dr,也就是矢径的变化。   平面上任何一点P,可以用直角坐标(x,y)表示,  也可以用极坐标P(ro,theta)表示,或简写为(r,t),  极坐标表示也就是矢量表示,...
  • 这种由透镜引起的畸变称为径向畸变,这种畸变越靠近图像边缘就会越明显。 用数学形式表示径向畸变: 平面图像上的一个像素点p可以用笛卡尔坐标系表示为[u,v]',可以把他表示为极坐标形式[r,Q] 其中r = sqrt(x*x + y* ...
  • 相机的径向畸变是因为成像模型并不能完全符合针孔成像模型造成的(针孔成像模型可认为是理想的假设)。 其数学模型是在成像坐标系上,实际的坐标和理想的坐标之间的退化: () (式1) 在图像上的表现: ...
  • Lens distortion is a form of optical aberration that causes lenses to deviate from rectilinear projection. Commonly, it is caused by defects in lens ...也叫镜头畸变,是光学相差的一种形式,导致镜头偏离直...
  • 镜头径向畸变修正的一个代码

    千次阅读 2018-11-25 14:33:15
    畸变较大,所以就研究了一下畸变修正算法。主要是读了读 Carsten Steger 等所著 Machine Vision Algorithms and Applications 一书 3.9 节。把里面的算法实现了一下。这本书里写的修正方法应该算是最简单的了。只有...
  • 最近在研究畸变图像的畸变矫正问题。网上关于畸变矫正的方法多是采用OpenCV镜头标定的方法,标定出畸变模型参数和镜头内参,再根据参数后向映射得到矫正图像。但是存在这样一种情况:当我们手上只有畸变的图像,没有...
  • 所得到的亚像素角点是畸变后的点,但镜头中心的亚像素点是没有畸变的,我们通过镜头中心的亚像素点构造了未畸变的17行13列网格,与畸变后的亚像素角点17行13列网格一一对应,当然,中心是重叠相同的。 眼睛很容易...
  • 在没想到未畸变网格之前,这个算是原始版本,可以看一看: 本来是想网格线工具覆盖感兴趣区域整个特征,并感知其大概轮廓,没成想,是以上结果,搁置很久,没有进展。 直到重新整理这放不下惦记的标定,在一一...
  • 摄像机标定和图像径向畸变校正

    千次阅读 2014-02-10 17:18:51
    这段时间断断续续在弄这个摄像头的标定和图像畸形矫正的问题,基本差不多了,乘休息时间,发点成果和大家分享吧! 一、标定  关于摄像头的标定,说实话网上的资料太多了,方法也很多的。个人觉得想要研究这个的话...
  • 畸变网格工具的第二版(感兴趣区域roi)和第三版(整个视野,标定)均在此处。 并借此实现新一版标定。未畸变网格,又是一次感兴趣区域的胜利。 图的世界总是比文字的世界信息量丰富。上图:第一幅,加载标定片 ...
  • 高考的那倒计时100天起始,父亲说,把高考的大目标,分成小目标,安排在这100天里,逐步完成。 目标,列提纲,再细化。(高考) 要识别的目标,粗匹配,细匹配。(机器视觉识别) 门,纲,目,科,属,种。...

空空如也

空空如也

1 2 3 4 5 ... 17
收藏数 330
精华内容 132
关键字:

径向畸变