OpenCV计算机视觉学习(11)——图像空间几何变换(图像缩放,图像旋转,图像翻转,图像平移,仿射变换,镜像变换) (2)

  P(2.4, 3) = u * P(2, 3)  +  v * P(3, 3),混合的比例是以距离为依据的,那么u = 0.4, v = 0.6。上面是只在一条直线的插值,称为线性插值。双线性插值就是分别在x轴和Y轴上做线性插值运算。

  已知的红色数据点与待插值得到的绿色点。

OpenCV计算机视觉学习(11)——图像空间几何变换(图像缩放,图像旋转,图像翻转,图像平移,仿射变换,镜像变换)

   假如我们想得到未知函数 f 在点 P=(x, y) 的值,假设我们已知函数f 在Q11 = (x1, y1),Q12 = (x1,y2),Q21 = (x2,y1) 以及Q22 = (x2,y2) 四个点的值。

  首先在x方向进行线性插值,得到R1, R2,然后在y方向进行线性插值,得到P。这样就得到所要的结果 f(x, y)

  其中红色点Q11, Q12, Q21, Q22为已知的4个像素点。

  第一步:X方向的线性插值,在Q12, Q22中插入蓝色点R2, Q11, Q21 中插入蓝色点R1

  第二步:Y方向的线性插值,通过第一步计算出的R1与R2在y方向上的插值计算出P点。

  线性插值的结果与插值的顺序无关,首先进行y方向的插值,然后进行X方向的插值,所得到的结果是一样的,双线性插值的结果与先进行哪个方向的插值无关。

  在X方向上:

OpenCV计算机视觉学习(11)——图像空间几何变换(图像缩放,图像旋转,图像翻转,图像平移,仿射变换,镜像变换)

  在y方向上:

OpenCV计算机视觉学习(11)——图像空间几何变换(图像缩放,图像旋转,图像翻转,图像平移,仿射变换,镜像变换)

  如果选择一个坐标系统使得四个已知的点坐标分别为(0, 0)(0, 1) (1, 0) (1, 1),那么插值公式就可以简化为:

    f(x,y)=f(0,0)(1-x)(1-y)+f(1,0)x(1-y)+f(0,1)(1-x)y+f(1,1)xy

  在x与y方向上,z值成单调性特性的应用中,此种方法可以做外插运算,即可以求解Q1~Q4所构成的正方形以外的点的值。

2,图像缩放

  图像缩放主要用于改变图像的大小,缩放后图像的宽度和高度会发生变换。水平缩放系数,控制图像宽度的缩放,其值为1,则图像的宽度不变;垂直缩放系数控制图像高度的缩放,其值为1,则图像高度不变。如果水平缩放和垂直缩放系数不相等,那么缩放后图像的宽度和高度的比例会发生变换,会使图像变形。要保持图像宽度和高度的比例不发生变换,就需要水平缩放系数和垂直缩放系数相等。

2.1 图像缩放原理

  设水平缩放系数为Sx,垂直缩放系数为Sy,(x0,   y0)为缩放前坐标,(x,  y)为缩放后坐标,其缩放的坐标映射关系为:

OpenCV计算机视觉学习(11)——图像空间几何变换(图像缩放,图像旋转,图像翻转,图像平移,仿射变换,镜像变换)

   矩阵表示的形式为:

OpenCV计算机视觉学习(11)——图像空间几何变换(图像缩放,图像旋转,图像翻转,图像平移,仿射变换,镜像变换)

  这是前向映射,在缩放的过程改变了图像的大小,使用前向映射会出现映射重叠和映射不完全的问题,所以这里更关系的是向后映射,也就是输出图像通过向后映射关系找到其在原图像中对应的像素。

  向后映射关系:

OpenCV计算机视觉学习(11)——图像空间几何变换(图像缩放,图像旋转,图像翻转,图像平移,仿射变换,镜像变换)

2.2 基于OpenCV的缩放实现

  在图像缩放时,首先要计算缩放后图像的大小,设 newWidth,newHeight为缩放后的图像的宽和高,width,height为原图像的宽度和高度,那么有:

OpenCV计算机视觉学习(11)——图像空间几何变换(图像缩放,图像旋转,图像翻转,图像平移,仿射变换,镜像变换)

  然后遍历缩放后的图像,根据向后映射关系计算出缩放的像素在原图像中像素的位置,如果得到的浮点坐标,就需要使用插值算法取得近似的像素值。

  图像缩放主要调用 resize() 函数实现,具体如下:

def resize(src, dsize, dst=None, fx=None, fy=None, interpolation=None)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zywsxz.html