1.一种广角相机非规则畸变全域校正方法,其特征在于:包括以下步骤:S1:图片采集:对采集的图像作辅助线,并实时显示,将辅助线对齐棋盘格中心区域,拍摄照片;
S2:角点检测:①使用Prewitt算子计算出两个方向的梯度,并计算图片梯度的方向和幅值;②归一化梯度方向,初始化角点模板,使用角点模板对原图片进行滤波处理,获得初始角点;③并对得到角点进行非极大值抑制;④对角点进行亚像素化;⑤剔除边沿点和角点评分低于阈值的角点;
S3:棋盘格检测:对检测到的角点,通过生长法检测出棋盘格;①与图像最中心点的欧氏距离从近到远循环每一个角点;②初始化一个棋盘格,通过寻找该点周围八个方向上的匹配点作为初始棋盘格;③通过向上下左右四个方向上生长,计算生长后棋盘格的能量,当能量函数小于阈值时,生长成功;④进行棋盘格方向校正,重复部分全部通过,则进行拼接,得到新的棋盘格;
S4:数据初始化:检测中心区域的棋盘格,并以中心点为基准,图像左上角为像素坐标系原点,向右为u轴正方向,向下为v轴正方向;根据检测到的棋盘格,初始化期望棋盘格的位置数据;
S5:拟合曲面:使用改进后的TPS方法拟合出插值曲面;
S6:生成插值地图:使用得到的插值曲面,获取插值地图;
S7:实时畸变校正:载入插值地图,实时采集图片,并使用反向二插值,并实时进行畸变校正。
2.根据权利要求1所述的广角相机非规则畸变全域校正方法,其特征在于:步骤S2中,通过下列公式进行棋盘内角点匹配:其中,和 表示i的黑白棋盘格调换两种可能性; 表示图像在i大小的A类核的卷积值, 表示图像在i大小的B类核的卷积值, 图像在i大小的C类核的卷积值, 表示图像在i大小的D四类核的卷积值;
亚像素角和方向细化:对检测出的内角点,去除边沿点和低得分点;然后亚像素化角点,即寻找满足下式的c值:其中,NI表示像素周围11x11的候选像素; 表示P点与周围的候选像素的梯度差。
3.根据权利要求1所述的广角相机非规则畸变全域校正方法,其特征在于:步骤S3中棋盘格生长方法包括:恢复结构,即优化能量函数,生长棋盘格:初始化6个点构成4个方格的棋盘格,然后通过寻找四个方向中能量最小的方向生长棋盘,直到没有新的棋盘格阵列,其中棋盘能量定义为:E(x,y)=Ecorners(y)+Estruct(x,y)Ecorners(y)=‑size(chessboard,1)*size(chessboard,2)其中,Ecorners表示当前棋盘格中角点的个数的负值,size(chessboard,1)表示棋盘格的高,size(chessboard,2)表示棋盘格的宽,Estruct表示预测和实际棋盘的匹配程度,ci、cj、ck表示三个相邻的横纵棋盘格点;当四个方向上的总能量都大于零时结束生长。
4.根据权利要求1所述的广角相机非规则畸变全域校正方法,其特征在于:步骤S3中的棋盘格方向校正包括:重复部分全部通过,则进行拼接,得到新的棋盘格;首先进行棋盘格方向校正,如下列公式所示:acha(i)=Pa(i+1)‑Pa(i),i=1…n‑1direction.ab=direction.a‑direction.b其中,Pa(i)表示两个棋盘的相同点在棋盘a的位置;direction.a表示棋盘a的相对角度;direction.ab表示棋盘格b相对于棋盘a的角度;Cb表示棋盘b; 表示校正方向后的棋盘b;
然后,通过匹配来进行棋盘格的扩张:
C(m+max(a1,b1)‑a1,n+max(a2,b2)‑a2)=a(m,n)C(m+max(a1,b1)‑b1,n+max(a2,b2)‑b2)=b(m,n)其中,(a1,a2)=(pa(1).x,pa(1).y),表示两个棋盘第一个相同点在棋盘a的位置;(b1,b2)=(pb(1).x,pb(1).y),表示两个棋盘第一个相同点在棋盘b的位置;C表示匹配后的棋盘格。
5.根据权利要求1所述的广角相机非规则畸变全域校正方法,其特征在于:步骤S5中的TPS算法包括:当径向函数为二次的时候被称为薄板样条插值,是一种求取经过所有数据点的,具有最小曲率的平滑金属薄板的方法;
在数据具有二次连续导数的前提下,具有能量函数为:
对于具体的离散的数据点,其最小能量函数为:
2 4
该能量函数包含两部分,仿射部分a0+x+x[a1r +a2r ],表示无穷远处的薄板的曲面趋势,剩余离散部分,弯曲数据点附近的曲面,以使其通过该数据点,|·|表示欧几里德范数,ci是系数,U为TPS的核函数,表达式为
2 2 2 2
U(r)=rlog(r),r=(x‑xi) +(y‑yi)通过对函数中的参数的计算,得到拟合后的曲面。
6.根据权利要求1所述的广角相机非规则畸变全域校正方法,其特征在于:步骤S7中的实时校正中的运用插值地图,进行畸变校正,使用反向双线性插值算法进行畸变校正,寻找已知权重的四个点中间的任意一点的权重;
然后在x方向进行线性插值,得到
然后在y方向进行线性插值,得到
综合起来就是双线性插值最后的结果: