摘要:随着仿生学技术的快速发展,科学家们模仿鱼的眼睛的基本结构研究设计出了鱼眼镜头,鱼眼镜头本质上是超大广角的摄像头,焦距小、视野大是它的特点和优势。但是,由于鱼眼镜头结构的特殊性,会产生一定程度的畸变,如何消除这种畸变引起了科学界广泛的关注。
关键词:鱼眼镜头矫正;数字识别;Python;OpenCV
一、引言
20世纪初,鱼眼镜头就渐渐进入了人们的视野,并且在之后的几年不断蓬勃发展,为了更好的使用鱼眼镜头带来的便利,科学家就矫正鱼眼镜头产生的图像畸变课题做出了很多研究,并且取得了可观的成就。
在现有的一些研究成果中看,对于鱼眼镜头的畸变校正研究,一般都是分为两个方面,即标准化标定和优化校正算法。鱼眼镜头的畸变校正技术从开始最为传统的对鱼拍摄的图像产生的畸变校正,到对鱼眼镜头自身标定的校正技术,最后到鱼眼镜头可以自动视觉校正,鱼眼镜头矫正技术不断发展,不断优化为其更为广泛的应用奠定了坚实的基础。
鱼眼镜头矫正技术的一项重要应用就是数字识别,因为鱼眼镜头可以获得大量的信息量,对于近距离、大面积区域的数字图像采集识别,比如图书、档案的数字标签的机器识别既可以节省设备成本,又可以提升数字识别的效率和准确度,在现实社会中有很高的应用价值。
二、鱼眼镜头基本研究
鱼眼镜头一种超大广角的特殊镜头,前端的第一片透镜是向前突出的,即为凸透镜,而且其顶点超出了镜筒,在外形上类似于金鱼鼓起的眼睛,这也就是鱼眼镜头名字的由来。
鱼眼镜头的成像过程可以分为两个步骤:第一步,将光学的中心设为球心来建立球面坐标模型,并使用中心投影的方法将整个空间内的每一个点都映射到这一球面上;第二步,将这一球面上的投影点再映射到像平面上,使之成为像平面中的像素点。传统相机采用的是经典的“相似性”原理,而鱼眼镜头采用的则是“非线性映射”。
三、鱼眼镜头的矫正
鱼眼镜头的畸变矫正流程通常能够分为两个方面,即鱼眼镜头的畸变标定和畸变校正。矫正鱼眼镜头图像畸变的完整流程图如图所示。
畸变标定是鱼眼镜头矫正的第一步,分为角点检测和标定参数计算两个步骤,角点检测可以确定标定模板的灰度值信息变化程度比较大的区域,并且将其认定做此标定模板的角点处。
在实际操作过程中,一般会选择棋盘之类的一些有一定规律的事物作为标定模板,这里选择使用的是内部角点为9*6的棋盘格作为标定模板。为了提升的标定参数的精度,需要从不同的角度对同一个棋盘格拍摄多张图像,整个拍摄只是简单的重复取样过程。
这里使用的棋盘格的每行每列角点数为Size board_size = Size(9,6),且其中每个小棋盘格的大小Size square_size = Size(20,20),共拍摄11张鱼眼棋盘图像。处理棋盘图像时先使用cvtColor函数把彩色图像变成灰度图,通过检测找出标定图像的灰度值信息变化程度比较剧烈的区域作为标定模板的角点。最后,用findChessboardCorners函数提取角点并且使用CornerSubPix函数进行过亚像素精确化,即完成了角点检测环节的工作。
接着确定鱼眼镜头的内在固有参数,这里主要使用的函数是fisheye::calibrate,其中涉及到许多参数,包括objectPoints, imagePoints,K,D,rvecs, tvecs,DIM等,最为主要的是对DIM、K和D的计算。鱼眼镜头矫正的第二步是畸变校正,使用initUndistortRectifyMap函数做非线性映射。可以通过目标图像找到与之对应的原始图像坐标,再将所求得的坐标值返回复制到目标图像的坐标系中,即可将畸变的图像矫正为正常图片。
四、鱼眼图像的数字识别
数字识别主要使用的是SVM分类库的方法,运用SVM分类库进行简单数字识别首先要获取大量的数字图片训练样本,使用训练样本总结出手写数字中存在的内在规则。训练样本的数量越多,算法的准确性越高。
这里采用的数据集总共有759个黑色数字图片,每个数字约有70张图片首先,将数字图片转换为只有数字0和1的二进制矩阵,有数字内容的部分为1,其余部分为0,保存在文本文档中,为训练数据集做好准备。
在对数据集训练时,需要将全部数据集分为两个部分:训练集和测试集,用训练集图片进行数据集的训练,用测试集图片对训练好的模型进行检测,这里采用的测试集包含600张黑体数字图片,即0至9每个数字有60张图片,最后通过计算得出判断准确的图片的概率,基本符合预期要求。
对待识别的图像进行二值化处理,图片中的每一个像素点分为256个亮度等级,二值化过程也就是分析每一个像素点的灰度值,这里设定的阈值是100,即灰度值大于100的像素点呈现黑色,灰度值小于100的像素点呈现白色。二值化处理减少了部分图像矫正时产生的模糊和干扰,提高了数字识别的准确性。
最后,将待识别图片进行数字分割,将其中的每个数字提取出来,形成单个的数字图片并识别,识别效果达到预期要求。
五、综述
本文介紹了鱼眼镜头矫正技术的发展意义及鱼眼镜头的基本结构与成像原理。分析了对鱼眼镜头所产生畸变的矫正方法及矫正流程,将鱼眼镜头的矫正过程分为两个步骤:鱼眼镜头标定和矫正鱼眼图像,在OpenCV环境下用Python语言编程将存在畸变的鱼眼图像矫正为符合人们正常认知的图片。最后对鱼眼图像中的数字信息进行识别,通过SVM分类器方法提取出其中的数字信息。
作者简介:
金益帆(1997—),女,满族,河北石家庄人,学历:本科,职称:初级工程师。