一、相机畸变
相机前方的透镜堆=对进入相机的光线传播会产生影响,并且透镜与成像平面不可能完全平行,这使得光线穿过透镜后的投影到成像平面时的位置发生变化。
这种由透镜引起的畸变称为径向畸变,这种畸变越靠近图像边缘就会越明显。
用数学形式表示径向畸变:
平面图像上的一个像素点p可以用笛卡尔坐标系表示为[u,v]'
,可以把他表示为极坐标形式[r,Q]
其中r = sqrt(x*x + y* y)
.这里x和y分别为u和v的相机坐标系坐标。
就可以得到径向畸变的多项式表现形式:
求出来的x_distortion以及y_distortion都是相机坐标系上的坐标,因此还要转换到图像坐标系中。
u1 = fx * x_distortion + cx
v1 = fy * y_distortion + cy
则点(u1,v1)表示经过了畸变之后的像素点。
二、双线性插值
1.一维线性插值
已知了x0,x1,y1,y0和x的值,要求出y的值。
用插值的方式:
令
就可以得到y的值
2.双线性插值
双线性插值是一维线性插值的延伸模式,比如已知x1,y1,x2,y2以及Q(12) = f(x1,y2),Q(11) ,Q(21) ,Q(22) 的值,要获得中间p点(x,y)的值f(x,y). 此时可以先插值x轴获得x的坐标,再插值获得y轴获得y的坐标。
因为平常图像插值的时候,一般会出现已知要插值的图像像素不为正整数,因此这时候插值时,x1与x2间隔为1,y1与y2间隔为1,将该像素点插值在单元格之内,此时插值公式推导如下图所示,其中f函数表示的是某点的颜色值
三、实现对图像添加畸变
代码如下:
#为GS图像增加径向畸变
import numpy as np
import cv2
import math
#读取图片
img = cv2.imread("frame0456.jpg"