图像的几何变换

Posted Matrix_11

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图像的几何变换相关的知识,希望对你有一定的参考价值。

图像的几何变换

在图像处理中,我们经常会进行两种类型的操作,一种是像素值的变换,最常见的比如直方图均衡,对比度,颜色的变换,这一类都属于像素值的变换;还有一种是几何变换,比如常见的旋转,平移,仿射变换,透视变换等。

  • 像素值变换:这种变换,主要改变像素值的大小,但不会改变像素的坐标
  • 几何变换:这种变换,会改变像素原有的坐标关系,但一般不会改变像素值

接下来,我们就来看看图像常见的一些几何变换

当我们讨论几何变换的时候,我们首先需要建立一个坐标系,最常见的就是笛卡尔坐标系,以二维空间为例,笛卡尔坐标系,以相互垂直的两个坐标轴进行表示,我们的图像一般也是用笛卡尔坐标系来表示,我们看到的图像都是水平方向和垂直方向相互垂直的一个矩形,所以图像也是建立在笛卡尔坐标系下的,而且图像的原点也是两个坐标轴相交的点,只不过在图像上,两个坐标轴的交点是在图像的四个角上,我们一般就以图像的左上角作为原点。所以图像一般可以表示成:

f ( x , y ) , 0 ≤ x ≤ N , 0 ≤ y ≤ M f(x, y), \\quad 0 \\leq x \\leq N, \\quad 0 \\leq y \\leq M f(x,y),0xN,0yM

上面的式子表示了一个有 M 行 N 列的图像。

那么,几何变换,也就是坐标系的变换,简单来说,就是从一个坐标系,变换到另一个坐标系下。所以几何变换,一般会涉及到两个坐标系,一个称为原坐标系,一个称为目标坐标系。可以表示成如下所示:

x ′ = g ( x ) y ′ = h ( y ) \\beginmatrix x' = g(x)\\\\ y' = h(y) \\endmatrix x=g(x)y=h(y)

上面的 x ′ , y ′ x', y' x,y 表示目标坐标系,而 x , y x, y x,y 表示原有的坐标系, g , h g, h g,h 分别表示变换关系,一般是一个线性函数,如果写成矩阵,就如下所示:

[ x ′ y ′ ] = A [ x y ] \\beginbmatrix x' \\\\ y' \\endbmatrix = \\mathbfA \\beginbmatrix x \\\\ y \\endbmatrix [xy]=A[xy]

借助矩阵的表达形式,我们来看看几种常见的几何变换,图像最常见的几种几何变换有缩放,旋转,平移等

图像缩放

图像的缩放就是我们常说的 scale 变换:

x ′ = a x y ′ = b y \\beginmatrix x' = ax\\\\ y' = by \\endmatrix x=axy=by

如果写成矩阵形式,可以表示成:

[ x ′ y ′ ] = [ a 0 0 b ] [ x y ] \\beginbmatrix x' \\\\ y' \\endbmatrix = \\beginbmatrix a & 0 \\\\ 0 & b \\endbmatrix \\beginbmatrix x \\\\ y \\endbmatrix [xy]=[a00b][xy]

图像旋转

图像的旋转也是常见的一种几何变换,图像的旋转可以表示成:

x ′ = x cos ⁡ ( θ ) − y sin ⁡ ( θ ) y ′ = x sin ⁡ ( θ ) + y cos ⁡ ( θ ) \\beginmatrix x' = x \\cos(\\theta) - y \\sin(\\theta) \\\\ y' = x \\sin(\\theta) + y \\cos(\\theta) \\endmatrix x=xcos(θ)ysin(θ)y=xsin(θ)+ycos(θ)

显然,这个也可以表示成矩阵形式:

[ x ′ y ′ ] = [ cos ⁡ ( θ ) − sin ⁡ ( θ ) sin ⁡ ( θ ) cos ⁡ ( θ ) ] [ x y ] \\beginbmatrix x' \\\\ y' \\endbmatrix = \\beginbmatrix \\cos(\\theta) & -\\sin(\\theta) \\\\ \\sin(\\theta) & \\cos(\\theta) \\endbmatrix \\beginbmatrix x \\\\ y \\endbmatrix [xy]=[cos(θ)sin(θ)sin(θ)cos(θ)][xy]

图像平移

图像的平移,也是常见的一种变换,

x ′ = x + t x y ′ = y + t y \\beginmatrix x' = x + t_x\\\\ y' = y + t_y \\endmatrix x=x+txy=y+ty

想必大家注意到,上面这个表达式,无法用一个 $ 2 \\times 2$ 的矩阵来表示,为了能将运算用矩阵运算统一起来,我们引入齐次坐标系,在齐次坐标系下,所有的几何变换都可以用矩阵进行表示。

齐次坐标

齐次坐标就是在原有的坐标的基础上再增加一个维度,如果是二维的坐标,我们就用三维的齐次坐标来表示:

[ x ′ y ′ ] ⇒ [ x ′ y ′ 1 ] \\beginbmatrix x' \\\\ y' \\endbmatrix \\Rightarrow \\beginbmatrix x' \\\\ y' \\\\ 1 \\endbmatrix [xy]xy1

引入齐次坐标之后,图像的平移也可以纳入矩阵的运算当中:

  • 平移

[ x ′ y ′ 1 ] = [ 1 0 t x 0 1 t y 0 0 1 ] [ x y 1 ] \\beginbmatrix x' \\\\ y' \\\\ 1 \\endbmatrix = \\beginbmatrix 1 & 0 & t_x \\\\ 0 & 1 & t_y \\\\ 0 & 0 & 1 \\endbmatrix \\beginbmatrix x \\\\ y \\\\ 1 \\endbmatrix xy1=100010txty1xy1

而前面介绍的缩放和旋转也可以用齐次坐标来表示:

  • 缩放:

[ x ′ y ′ 1 ] = [ a 0 0 0

以上是关于图像的几何变换的主要内容,如果未能解决你的问题,请参考以下文章

数字图像处理——图像的几何变换

图像的几何变换

图像几何变换之透视变换

opencv基础图像的几何变换

Python图像处理丨带你掌握图像几何变换

图像的几何变换