图像标定

<补充>

(1)由于(u,v)(#像素坐标系#)只代表像素的列数和行数,还需建立以物理单位(如毫米)表示的(x,y)(#图像坐标系#)

(2)

1.内参:
<资料>:
http://blog.csdn.net/aptx704610875/article/details/48914043
http://www.cnblogs.com/haoxing990/p/4588566.html

注:opencv含有4个内参 -> fx、fy、v0、u0 ( fx = f / dx ; fy = f / dy )

2.外参:表示将一个全局坐标系下的P变换到相机坐标系下

@具体参数数量和要求解的目标有关,比如畸变参数如果要全部估计的话就会比较多,如果不估计畸变参数,那内参:fx、fy、u0、v0,外参:偏移x、y、z,旋转角:roll、yaw、pitch@

这里写图片描述

注:图片引用自http://blog.csdn.net/yuzhongchun/article/details/22749521

  • dx\dy:一个像素代表的物理长度
  • f:焦距(似乎还有个r)
  • u0\v0:图像的中心像素坐标和图像原点像素坐标之间相差的像素数(参见下图)

这里写图片描述

注:引用自:http://blog.csdn.NET/xiaowei_cqu/article/details/7805206

(3)角点:

1、图像中的特殊位置,点的局部特征也可叫做“关键特征点”、“角点”
2、关于角点的具体描述可有几种:

  • 一阶导数(即灰度梯度)的局部最大所对应的像素点。
  • 两条及两条以上边缘的交点。
  • 图像中梯度值和梯度方向的变化速率都很高的点。
  • 角点处的一阶导数最大,二阶导数为零,指示物体边缘变化不连续的方向。

@至少需要四个角点才能求解出内外参(需要八个方程求解八个参数),一般采用多组角点@

(4)畸变

<资料>http://blog.csdn.net/waeceo/article/details/50580808
径向畸变:光线在远离透镜中心的地方比靠近中心的地方更加弯曲
切向畸变:透镜不完全平行于图像平面

一、标定

<资料>:
http://blog.csdn.net/yangdashi888/article/details/51356385
https://my.oschina.net/abcijkxyz/blog/787659
- 目的:获取相机内参和外参矩阵,帮助还原空间物体
- 输入:标定图像上所有内角点的图像坐标,标定板图像上所有内角点的空间三维坐标(一般假定z=0)
- 输出:相机内、外参、畸变系数。

2017.3.9 22:31

1)标定技术

这里写图片描述

注:图片引用自http://blog.csdn.net/yangdashi888/article/details/51356385
2017.3.10 22:19

2)OpenCV标定模块常用的标定函数:

引用自:http://blog.csdn.net/ychl87/article/details/11473593
double calibrateCamera(InputArrayOfArrays objectPoints, InputArrayOfArrays imagePoints,Size imageSize, InputOutputArray cameraMatrix, InputOutputArray distCoeffs, OutputArrayOfArrays rvecs, OutputArrayOfArrays tvecs, int flags=0)

其中

objectPoints为世界坐标系中的点。在使用时,应该输入一个三维点的vector的vector,即vector < vector < Point3f > > objectPoints。
imagePoints为其对应的图像点。和objectPoints一样,应该输入std::vector < std::vector < cv::Point2f > > imagePoints型的变量。

imageSize为图像的大小,在计算相机的内参数和畸变矩阵需要用到;

cameraMatrix为内参数矩阵。输入一个cv::Mat cameraMatrix即可。

distCoeffs为畸变矩阵。输入一个cv::Mat distCoeffs即可。

rvecs为旋转向量;应该输入一个cv::Mat的vector,即vector< cv::Mat> rvecs因为每个vector< Point3f>会得到一个rvecs。

tvecs为位移向量;和rvecs一样,也应该为vector< cv::Mat> tvecs。

flags为标定是所采用的算法。可如下某个或者某几个参数:

CV_CALIB_USE_INTRINSIC_GUESS:使用该参数时,在cameraMatrix矩阵中应该有fx,fy,cx,cy的估计值。否则的话,将初始化(cx,cy)图像的中心点,使用最小二乘估算出fx,fy。如果内参数矩阵和畸变居中已知的时候,应该标定模块中的solvePnP()函数计算外参数矩阵。

CV_CALIB_FIX_PRINCIPAL_POINT:在进行优化时会固定光轴点。当CV_CALIB_USE_INTRINSIC_GUESS参数被设置,光轴点将保持在中心或者某个输入的值。

CV_CALIB_FIX_ASPECT_RATIO:固定fx/fy的比值,只将fy作为可变量,进行优化计算。当CV_CALIB_USE_INTRINSIC_GUESS没有被设置,fx和fy将会被忽略。只有fx/fy的比值在计算中会被用到。

CV_CALIB_ZERO_TANGENT_DIST:设定切向畸变参数(p1,p2)为零。

CV_CALIB_FIX_K1,…,CV_CALIB_FIX_K6:对应的径向畸变在优化中保持不变。如果设置了CV_CALIB_USE_INTRINSIC_GUESS参数,

CV_CALIB_RATIONAL_MODEL:计算k4,k5,k6三个畸变参数。如果没有设置,则只计算其它5个畸变参数。

3)张正友相机标定

<资料>
http://blog.csdn.net/pinbodexiaozhu/article/details/43372089
http://blog.csdn.net/pinbodexiaozhu/article/details/43373247

1.补充

  • 单应性(tomography):一个平面到另一个平面的投影映射

2. 标定不需要特殊的标定物,只需要一张打印出来的棋盘格

3.流程

这里写图片描述

  • 从不同角度拍摄若干张模版图像(棋盘格) -> 检测图像特征点 -> 求出相机内外参 -> 求出畸变系数

    | 2017.3.11 17:27

4.具体流程

  • 检测角点
    • findChessboardCorners
  • 精确角点坐标(亚像素级别)
    • find4QuadCornerSubpix
  • 初始化标定板三维坐标(z=0)
  • 标定(包括相机内参、畸变系数、旋转向量、平移向量)
    • calibrateCamera
  • 重投影计算误差
    • projectPoints
  • 利用标定结果矫正棋盘图
    • remap

|2017.3.14 21:22

补充:相机原理

资料:http://www.zhihu.com/question/33793912


  • 越靠近中轴线的光束聚焦得越远,越靠近透镜边缘的光聚焦得越近
    • 近轴焦点:聚焦在最远处
    • 边缘光线焦点:聚焦在最近处
  • 相机坐标系与世界坐标系
  • 这里写图片描述

O为摄像机光心,
Zc为摄像机的光轴,和图像平面垂直;
OO1为摄像机焦距

二、配准(深度图与彩色图< Kinect >)

资料:http://m.blog.csdn.net/article/details?id=9264703

1、具体流程

(1)利用内参求(深度\RGB)摄像头坐标系下世界坐标到像平面坐标(透视变换)

这里写图片描述

(2)利用外参求联系两个坐标系的R、T

|2017.3.15 23:10

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值