在调焦和畸变矫正插件时,哪些是规范的操作

您所在位置: &
&nbsp&&nbsp
摄像机标定与畸变图像矫正算法的设计与实现.pdf65页
本文档一共被下载:
次 ,您可免费全文在线阅读后下载本文档
文档加载中...广告还剩秒
需要金币:50 &&
你可能关注的文档:
··········
··········
蠢爹基融少分
●●,_ ,D
.■嚣Ⅳ嚣,一口鼍3,
Northeastern
University
l●■―●●1
,、●,,\
独创性声明
本人声明,所呈交的学位论文是在导师的指导下完成的。论文中取得
的研究成果除加以标注和致谢的地方外,不包含其他人已经发表或撰写过
的研究成果,也不包括本人为获得其他学位而使用过的材料。与我一同工
作的同志对本研究所做的任何贡献均已在论文中作了明确的说明并表示
学位论文作者签名:物考罟
期:刎罗埠1 J刁
学位论文版权使用授权书
本学位论文作者和指导教师完全了解东北大学有关保留、使用学位论
文的规定:即学校有权保留并向国家有关部门或机构送交论文的复印件和
磁盘,允许论文被查阅和借阅。本人同意东北大学可以将学位论文的全部
或部分内容编入有关数据库
正在加载中,请稍后...1921人阅读
本文主要介绍用Emgu库函数进行摄像机标定和畸变矫正时所用到的几个函数,主要有CalibrateCamera, Undistort, Undistort2, cvInitUndistortRectifyMap和cvRemap.& 其中函数语法摘抄自Emgu CV Library Documentation.对于相关函数的理解和使用必定有不足之处,望有看到者及时批评指正。
二、标定函数CalibrateCamera
public static double CalibrateCamera(
MCvPoint3D32f[][] objectPoints,
PointF[][] imagePoints,
Size imageSize,
IntrinsicCameraParameters intrinsicParam,
CALIB_TYPE calibrationType,
out ExtrinsicCameraParameters[] extrinsicParams
objectPoints为标志点的世界坐标,是二维的,第一维是图像的索引(即第几幅图像),第二维是点的索引。
imagePoints为各标志点对应的图像坐标,同样是两维的,第一维是图像的索引,第二维是点的索引。
imageSize图像的大小,即宽和高,以像素为单位
intrinsicParam表示摄像机内参数,IntrinsicCameraParameters类的属性和方法可以技术手册中查看。
calibrationType是标定方法的标志位,通过设置该标志位可以对标定做些细微的控制,以使标定能够完成的更好。每种标志代表的具体含义可查阅《Learning OpenCV 中文版》一书的第429页。本人在项目中主要用其来控制是按照有畸变进行标定还是按照没有畸变进行标定,是否设置fx = fy, 是否设置主点在图像的中心等。
extrinsicParams是标定得到的外参数,主要包括旋转矩阵,每个方向的旋转量和平移向量。
定义变量:
MCvPoint3D32f[][] corners_object_
PointF[][] corners_points_
IntrinsicCameraParameters IC = new IntrinsicCameraParameters();
ExtrinsicCameraParameters[] EX_P
调用函数:
CameraCalibration.CalibrateCamera(corners_object_list, corners_points_list, ImgOri.Size, IC, CALIB_TYPE.CV_CALIB_FIX_ASPECT_RATIO, out EX_Param);
三、畸变矫正
ImgDst = IC.Undistort(ImgOri);
//IC是IntrinsicCameraParameters类的一个对象
最简单的方法便是用IntrinsicCameraParameters类的方法Undistort,但该方法的缺点是不能控制矫正后图像的大小,默认矫正后的图像与矫正前的图像大小一致,但由于矫正得到的图像往往是被放大(枕形畸变)了或者被缩小(桶形畸变)了,因此得到的畸变图像与原图像的范围不一样。如果想要得到同样大小同样场景范围的矫正图像则可以采用下面两种任一种方法。
2)&方法二
Image&Bgr, byte& ImgDst = ImgOri.CopyBlank();
IC.IntrinsicMatrix.CopyTo(newIntrinsicMatrix);
newIntrinsicMatrix[0, 0] = newIntrinsicMatrix[0, 0] * S
newIntrinsicMatrix[1, 1] = newIntrinsicMatrix[1, 1] * S
CvInvoke.cvUndistort2(ImgOri.Ptr, ImgDst.Ptr, IC.IntrinsicMatrix.Ptr, IC.DistortionCoeffs.Ptr, newIntrinsicMatrix.Ptr);
其中newIntrinsicMatrix与IC类型一样,用其来存储矫正后图像的内参数矩阵。Scale是矫正图像相对于原图像的缩放因子,由用户来定。
该方法可以通过修改Scale的值来控制矫正后图像的范围。如果矫正的是枕形失真,则Scale的值要小于1,才能使矫正图像不被裁掉一圈;如果矫正的是桶形失真,则Scale的值要大于1,才能使得矫正后图像周围黑边尽量少。
Image&Bgr, byte& ImgDst = ImgOri.CopyBlank();
IC.IntrinsicMatrix.CopyTo(newIntrinsicMatrix);
newIntrinsicMatrix[0, 0] = newIntrinsicMatrix[0, 0] * S
newIntrinsicMatrix[1, 1] = newIntrinsicMatrix[1, 1] * S
Matrix&float& mapx,
mapx = new Matrix&float&(imgHeight, imgWidth);
mapy = new Matrix&float&(imgHeight, imgWidth);
MCvScalar msc = new MCvScalar(0);
CvInvoke.cvInitUndistortRectifyMap(IC.IntrinsicMatrix.Ptr, IC.DistortionCoeffs.Ptr, IntPtr.Zero, newIntrinsicMatrix.Ptr, mapx.Ptr, mapy.Ptr);
CvInvoke.cvRemap(ImgOri.Ptr, ImgDst.Ptr, mapx.Ptr, mapy.Ptr, 16, msc);
该方法与方法二类似,只是把方法二拆分为两步来完成:cvInitUndistortRectifyMap和cvRemap。这样做的一个好处是,在对同一个相机拍出的大量图像进行畸变矫正时,第一步cvInitUndistortRectifyMap只需做一次便可,因此可以大大提高矫正的效率。
转载请注明出处:
版权声明:本文为博主原创文章,未经博主允许不得转载。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:10122次
排名:千里之外
原创:13篇
(1)(3)(3)(1)(2)(4)(2)(4) 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
实验室使用安全测试题及答案
下载积分:1000
内容提示:实验室使用安全测试题及答案
文档格式:DOCX|
浏览次数:1243|
上传日期: 20:43:22|
文档星级:
该用户还上传了这些文档
实验室使用安全测试题及答案
官方公共微信 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
实验室使用安全测试题及答案
下载积分:800
内容提示:实验室使用安全测试题及答案
文档格式:DOCX|
浏览次数:0|
上传日期: 13:42:29|
文档星级:
该用户还上传了这些文档
实验室使用安全测试题及答案
官方公共微信}

我要回帖

更多关于 广角镜头畸变矫正 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信