图像处理之几何学操作
仿射变换
矩阵的乘法操作其实就是对行向量或列向量进行一定的线性变换,在矩阵乘法中左边的矩阵决定结果的行而右边矩阵决定结果的列。
左边矩阵的第i行第j列是通过右边第j行的数来改变左边的第j列
在图像处理中通过仿射矩阵左乘像素的位置向量就能对图片进行变换
- 位置向量分为代表维度(x, y, z)方向的坐标,二维平面采用非齐次坐标z轴默认为1
- 仿射矩阵的对角元素对对应维度的坐标做缩放操作
- 其他元素通过元素所在列对应的维度坐标去控制元素所在行所对应的维度坐标
缩放:
拉伸:
如下图所示缩放矩阵通过将向量按一定的方向拉伸
旋转:
这是二维下的旋转,三维下就是DCM矩阵
代码:
getRotationMatrix2D((中心点),angle, 缩放倍数)
透视变换
透视变换相当于三维空间的仿射变换,采用齐次坐标表示。
如下图所示
- (a11, a12, a 22, a21)负责通过X, Y 轴的坐标值去改变X,Y轴的坐标值,表示着二维平面X,Y轴的线性关系,既仿射变换
- (a31, a32)通过Z轴的坐标值去改变二维平面的坐标值,既平移操作
- (a13, a23)通过X, Y的坐标轴去改变Z轴的坐标值,表示着二维平面与Z轴的线性关系,所以是透视变换
代码:
#pts1原图坐标,pts2目标图像坐标
M = cv2.getPersepectiveTransform(pts1, pts2)
dst = cv2.warpPerspective(img, M, (out_size))
图像插值
最近邻插值:
直接选择位置上最近的像素的值,但会有锯齿
代码:
线性插值:
根据周围的像素算平均值
双线性插值
有坐标x,y
可以得到表达式
v(x,y)表示(x,y)点的像素值
v(x, y) = ax + by + axy + d
四个未知数,取该点的四临域列出四个方程可解
双三次插值
这是双线性插值的升级版
表达式为:
v(x, y) = ax^2 + by^2 + a…
八个未知参数,去该点的八临域列出八个方程可解