zoukankan      html  css  js  c++  java
  • 记录相机成像原理(三)精确标定

    偶然看到一篇论文讲到如何对相机形变进行高精度校准,因为项目需要高精度的定位,因此记录下其实现

    首先对标定图像做单应性变换,标定图像如下:

    可以用cv::findcheeseboard找到所有的白点中心,也可以自己找。

    1. 接下来根据像素当量生成真实物理世界位置点的像素坐标集合。

    2. 然后求出单应性矩阵,具体调用opencv函数,并通过pespectivetranform()生成单应性变换后的点集

    但是,这时候变换后的点集还是和真实点的位置有3-4个像素的差距,但是项目要求精度保证在1个像素以内。

    3. 因此在对其做 非线性多项式拟合,非线性多项式为 f(x) = a0 + a1x + a2x + a3x^2 + a4xy + a5y^ + a6x^3 + a7x^y + a8xy^ + a9y^3

    也就是对于真实点x, y, 求其多项式的映射系数 (a0-a9) (b0-b9).

    可以写成 Ax = b的形式(A 矩阵为点集多项式, 大小为 M x 10), x为系数矩阵,b为真实坐标(上式f(x))

    4.由于M远大于10,要解这个超定矩阵 可以求其投影在其列向量的最小二乘解。先对其做投影变换 A^T A x= A^TA

       用SVD算出其最小特征值对应的特征向量即是其系数

    具体参考如下:

     可以用opencv求出其系数,最后结果如下(绿色点为真实坐标,蓝色为预测坐标,只有一种颜色为重叠):

     本项目像素当量约为0.03mm,检测结果良好

  • 相关阅读:
    C语言编程的两个工具:valgrind和core
    C语言动态库和静态库的使用及实践
    编译安装pgbouncer-checking for OpenSSL... configure: error: not found
    automake使用
    make笔记
    GCC命令
    gcc中关于静态库和动态库使用(转)
    zookeeper的c API 单线程与多线程问题 cli_st和cli_mt
    zookeeper数据一致性与paxos算法
    Deepgreen DB简介(转)
  • 原文地址:https://www.cnblogs.com/ChrisInsistPy/p/11858030.html
Copyright © 2011-2022 走看看