HiPQTools工具HiPQStitchingTool标定
作者:互联网
一、挑件海思文档重要描述
1、拼接原理:
使用HiPQTools工具HiPQStitchingTool进行图像拼接,就要先进行标定,确定相机之间的位置关系,和畸变校正,
前面写的文章中,介绍了,使用opencv的surf特征匹配和最佳缝合线算法,进行处理,然后离线计算获得参数,查表法进行图像拼接
存在局限性,只能适合静态的放置相机,和纹理丰富的场景,安防监控,不适合运动的场景,比如车载运动的全景场景。
全景拼接的基本方法是将各路采集的图像按照对应的镜头模型投影到虚拟球面,进行拼接融合,然后再通过设置的投影方式输出平面全图。AVSP 标定的目的就是通过标定估计出相应的镜头模型参数,包括内部参数、外部参数及有效区域。其中内部参数用于矫正镜头的畸变,外部参数用于匹配不同镜头之间的相对位置,有效区域的标定主要是为了减小重叠区从而减小系统的处理压力,特别是鱼眼图像,由于鱼眼图像有效区域为圆饼图,故需要将相应的圆饼图区域标定出来进行处理,其他区域省略,提高系统处理效率。
步骤 1 模型标定。
模型标定阶段每个产品类型只需标定一次,可从同一批产品中挑选一个结构最佳的机器作为模型标定机器。标定时该机器需要拍取大量的棋盘格图片,以保证标定结果的鲁棒性。第一步标定完成后可使用 AVSP 标定工具生成模型标定结果.cal 文件。模型标定需要一个特定的棋盘格,推荐使用规格如图 3-2(a)所示,具体规格如下:棋盘格内角点数为 9*6,内角点的定义如图 3-2(b)红圈所示,单个格子大小 5cm。棋盘格边缘保留至少 8cm 以上的白色边缘,有利于提高棋盘格检测的速度及准确性
角点,指的是如下红圈的点。
标定时需确定镜头 FOV 及镜头类型,便于模型计算快速收敛。其中 FOV 指 sensor 成像的水平视角,即图像宽度所对应的 FOV。另外镜头模型提供三种类型,分别为 Non Fisheye, Fisheye Full Fov 及 Fisheye Circular Fov,其区别如图 3-3 所示。一般情况下,
长焦畸变较小的镜头选择 Non Fisheye 类型,短焦广角镜头选择 Fisheye Full Fov 模型,因为一般广角镜头也是鱼眼模型,鱼眼镜头选择 Fisheye Circular Fov
模型标定需要抓取以下两类场景的图片:只要相邻的相机,有重叠区域的,都要进行一对一标定。
标定单镜头的畸变矫正的场景
该场景标定图用于标定镜头内参。每个镜头至少拍取 10 张图像。
保存时以<固定前缀名><镜头号><帧序号>.jpg 来对图像进行命名。
拍取时,将棋盘格放置于镜头前方,并不断变换棋盘格方向、距离及在画面中位
置,使之均匀覆盖全画面,且至少涵盖两种距离以上。
对于非鱼眼镜头,近距离棋盘格约占画面 1/2 即可,远距离约占画面 1/4;
对于鱼眼镜头,由于 FOV 较大,近距离棋盘格约占画面 1/5,远距离约占画面
1/10 左右,抓拍时建议将棋盘格均匀绕鱼眼镜头一周,采集不同位置的棋盘格图
像。
标定相邻镜头相对位置的场景
该场景标定图用于标定镜头外参。每组镜头至少抓拍 10 对图片。
保存时以<固定前缀名><镜头号><较小镜头号><较大镜头号>_<帧序号>.jpg 来对图像进行命名。
拍取时,需先确定相邻镜头,每组相邻镜头同时抓拍。抓拍时将棋盘格放置于重
叠区内,相邻镜头都要看到完整的棋盘格,不断变换棋盘格距离、小幅度旋转,
并且变换在重叠区的位置,使之均匀覆盖整个重叠区,特别是需要主要覆盖边角
位置且至少涵盖 3 种距离以上。
步骤 2 产线标定.
产线标定阶段每个产品个体都需要标定,以解决个体之间的差异,标定时只需将个体放在特定球形环境里每路拍取一张图像即可。将拍取的图像与第一步生成的.cal 文件作为第二步输入,即可使用 AVSP 标定工具生成针对该个体的标定结果.cal 文件。
一般不需要产线标定,不进行量产的。
步骤 3 生成 LUT 及 BBox 表。
步骤 3 之前,需要制作每路输入的 Mask 模板图像,用于标识出输入图像的有效区域。Mask 图像必须是与输入分辨率相同的.png 图像,白色区域表示有效区域,黑色区域表示无效区域。对于双鱼眼结构,mask 为白色的圆形图像,如图 3-9(a)所示。对于水平环绕四鱼眼结构,由于水平方向重叠区较大,mask 推荐为椭圆形图像,将水平方向裁剪剩余大约 120°视角,垂直方向不裁剪,如图 3-9(b)所示。
对于非鱼眼图像,一般来说,mask 为全白的图像即可,如果需要裁剪一些重叠区域,则可以制作成白色的矩形图像,如图 3-9©和图 3-9(d)所示。大部分情况下,并不需要裁剪掉部分重叠区域,只有当系统处理压力较大时,可以通过调整 Mask 的有效区域,减小重叠区,从而减小系统的处理性能压力。但需要特别注意的是,重叠区的裁剪必须格外小心,裁剪过多会导致融合区不够平滑,影响拼接效
果。一般情况下,有效区域的边缘定义不需要太精确,在圆饼图半径及中心点个体差异小于 2%时,相同产品类型的相机可以共用一套 mask 图片。若个体差异大于 2%,则可能造成融合区清晰度下降或者融合区大小不对称问题。而非鱼眼图像不存在无效区域,故一般情况下相同产品类型的相机共用一套 mask 图片即可。
二、使用工具,模拟拼接
标定工具对标定图像命名的要求是:图像编号需按照从 0 开始顺序编号。故标定图像抓拍时可将 pipe0 命名为 camera0,pipe2 命名为 camera1,pipe4 命名为 camera2,pipe6命名为 camera3,标定图抓拍后进行模型或者产线标定,并生成标定文件(即.cal 文
件)。
在使用标定工具之前,用户需要进行图像抓拍。拼接标定要求,抓拍可分为两种类
型:
标定单镜头的畸变矫正的图片,可将棋盘格放置镜头前方,并不断变换棋盘格方向及位置,每个镜头至少抓取 10 张图像。保存时以<固定前缀名><镜头号>_<帧序号>.jpg 来对图像进行命名。
标定相邻镜头相对位置的图片。此时需先确定相邻镜头,每组相邻镜头同时拍取标定图片,抓拍时将棋盘格放置于重叠区内,相邻镜头都要看到完整的棋盘格,不断变换棋盘格在重叠区的位置或距离或小幅度旋转,每个重叠区至少抓拍 10 对
20 张图片。保存时以<固定前缀名><镜头号><较小镜头号><较大镜头号><帧序号>.jpg 来对图像进行命名。
1、拍摄图片
没有相机,事先下载opencv里自带标定的图片,选取了十张图片,命名一定要按文档,否则无法标定的,开始弄错了,
选的两个相机,从camera1开始,后面改成camera0开始,且要以01,02、、10这样命名
各相机畸变标定图命名如下:
相邻镜头命名如下:
准备mask图片,可以用画图工具,画一张相同分辨率的白色图片,相机规格都是一样的,可以用同一张。
2、使用hipq工具,标定,生成.cal文件
将前面的图片,全部放在同一个文件夹下,不能用中文,在工具里指定图片所在路径。
我的是两个相机,route count,选2,勾上use the same option,所以相机规格一致,改变一个设置时,全部都被修改,
修改相机分辨率,宽度,高度,和相机镜头的水平视角大小fov,镜头类型,我的是普通镜头,filename文件命名,我的图片命名都是以camera开头命名的。count x,count y ,指的是标定棋盘格的角点个数,横轴上,我有9个,纵轴6个,棋盘格大小是25mm。
点击calibrate,需要等待一会,
标定时,如果一直busy,说明图片有问题,可以看下工具下的tmp目录下,是否检测到了角点,会把正确的图片读入到当前文件下,
成功后,保存.cal文件,直接保存。
3、生成lut表
打开上一步的.cal文件,加载mask图片,spher distense是标定距离,meter是米的单位,可别写错了,我这里写错了20,
最后会生成这样的.bin文件,
标签:镜头,标定,HiPQStitchingTool,抓拍,图像,HiPQTools,棋盘,图片 来源: https://blog.csdn.net/rjszcb/article/details/122298877