小强学Python+OpenCV之-1.4.1平移、旋转、缩放、翻转-之理论

小强学Python+OpenCV之-1.4.1平移、旋转、缩放、翻转-之理论

    • 小强学PythonOpenCV之141平移旋转缩放翻转之理论
    • 目标
    • 变换矩阵
      • 平移
      • 旋转
      • 缩放
      • 翻转
    • 仿射变换
      • 平移
      • 旋转
      • 缩放
      • 翻转
    • 参考

下面我们将进入实际的图像处理阶段。
本阶段,我们将分别学习图像的平移、旋转、缩放、翻转、裁剪、算术运算、位运算、掩膜(mask)、通道分离及合并等技术。

小强学Python+OpenCV之-1.4.1平移、旋转、缩放、翻转-之理论_第1张图片

目标

本节我们学习下面几个简单的操作:
1. 平移(translation)
2. 旋转(rotation)
3. 缩放(resizing)
4. 翻转(flipping)

变换矩阵

图像的各种操作都可以反应为矩阵的算术运算。比如:

1.平移

图像的平移操作是指:图像沿X方向或Y方向(或两者同时)进行的整体移动。平移变换对应矩阵运算中的加法。
小强学Python+OpenCV之-1.4.1平移、旋转、缩放、翻转-之理论_第2张图片

目标位置:

x=x+tx

y=y+ty

(tx, ty)叫作转换矩阵或平移矩阵。上面的公式也可用表示如下:

(xy)+(txty)=(x+txy+ty)

2.旋转

图像的旋转对应矩阵的乘法,如下:
(x, y)绕原点逆时针旋转θ度角到(x’, y’)的变换公式是:

x=xcosθysinθ

y=xsinθ+ycosθ

用矩阵表示为:
(xy)=(cosθsinθsinθcosθ)(xy)

3.缩放

图像的缩放对应的也是矩阵乘法,如下:

x=sxx

y=syy

用矩阵表示为:

(xy)=(sx00sy)(xy)

4.翻转

翻转对应的也是同样是矩阵简洁,中是有点特殊:
沿X轴翻转:

x=x

y=y

用矩阵表示为:
(xy)=(1001)(xy)

沿Y轴反转:

x=x

y=y

用矩阵表示为:
(xy)=(1001)(xy)

仿射变换

也许你看出了问题,那就是:除了平移,其它变换都可以用矩阵乘法来表示。那么能不能让平移变换也转换成矩阵的乘法运算呢?这样就可以统一了。答案是,可以的。那就是用仿射变换。
即用三维向量(x, y, 1)表示二维向量。
那么,上面的平移,旋转,绽放,翻转就可以转变如下。

1. 平移

设某点向x方向移动 tx, y方向移动 ty, (x, y)为变换前坐标,(X, Y)为变换后坐标。 则:

X=x+tx

Y=y+ty

以矩阵表示:
XY1=xy1100010txty1=x+txy+ty1

2. 旋转

设某点 (x, y) 以原点为圆心,以该点与原点连线为半径, 逆时针旋转θ度。新的位置(X, Y)

X=xcosθysinθ

Y=xsinθ+ycosθ

以矩阵表示:
XY1=xy1cosθsinθ0sinθcosθ0001=xcosθysinθxsinθ+ycosθ1

3. 缩放

设某点坐标(x, y),在x轴方向扩大 sx倍,y轴方向扩大 sy倍,变换后坐标为(X, Y)。

X=sxx

Y=syy

以矩阵表示:
XY1=xy1sx000sy0001=sxxsyy1

4. 翻转

设某点坐标(x, y)
沿x轴翻转,转换后的坐标(X, Y)。

X=x

Y=y

以矩阵表示:
XY1=xy1100010001=xy1

沿y轴翻转,转换后的坐标(X, Y)。

X=x

Y=y

以矩阵表示:
XY1=xy1100010001=xy1

参考:

  1. 变换矩阵
  2. 仿射变换

你可能感兴趣的:(python+opencv)