图像处理 几何变换

I have to remind myself that some birds don’t mean to be caged . Their feathers are just too bright. And when they fly away, the part of you that knows it was a sin to lock them up. DOES rejoice. Still, the place you live in is that much more drab and empty that they’re gone. I guess I just miss my friend. ——《肖申克的救赎》

前言

几何变换,又称空间变换,是图形处理的一个方面,是各种图形处理算法的基础。它将一幅图像中的坐标位置映射到另一幅图像中的新坐标位置,其实质是改变像素的空间位置,估算新空间位置上的像素值。几何变换算法一般包括空间变换运算和插值算法。

几何变换不改变图像的像素值, 只是在图像平面上进行像素的重新安排。适当的几何变换可以最大程度地消除由于成像角度、透视关系乃至镜头自身原因所造成的几何失真所产生的负面影响。几何变换常常作为图像处理应用的预处理步骤, 是图像归一化的核心工作之一。

一个几何变换需要两部分运算:首先是空间变换所需的运算, 如平移、缩放、旋转和正平行投影等, 需要用它来表示输出图像与输入图像之间的(像素)映射关系;此外,还需要使用灰度插值算法, 因为按照这种变换关系进行计算, 输出图像的像素可能被映射到输入图像的非整数坐标上。

概念

基础概念 说明
图像的几何变换 指用数学建模的方法来描述图像的位置、大小、形状等变换。
几何变换的内容 图像的空间平移、比例缩放、旋转、仿射变换和图像插值。
几何变换的实质 改变像素的空间位置。

图像集合变换的表达式

( x , y ) = T { ( u , v ) } (x, y) = T\{(u, v)\} (x,y)=T{(u,v)}

  • ( x , y ) (x, y) (x,y)为变换后图像像素的笛卡尔坐标, ( u , v ) (u , v) (u,v)为原始图像中像素的笛卡尔坐标。
  • 变换后,如果 ( x , y ) = ( u , v ) (x, y)=(u , v) (x,y)=(u,v),则变换后的图像仅仅是原图像的简单拷贝。
  • 注意,几何变换不改变像素值,而是改变像素所在的位置。这说明像素的亮度和色彩并不发生变化,仅仅是像素位置发生改变。

齐次坐标表示

  • 所谓齐次坐标就是用 N + 1 N+1 N+1维向量表示 N N N维向量。
  • 平面上的点 P P P的坐标为 ( x , y ) (x, y) (x,y),其齐次坐标表示为 ( w x , w y , w ) (wx, wy, w) (wx,wy,w),其中 w w w为任意常数。
  • 如果规定齐次坐标的第三个分量 w w w 1 1 1,则称为规范齐次坐标。

引入齐次坐标的原因

  • 在对图像进行操作时候,经常要对图像连续做几次变换。例如做了平移后再做旋转与缩放。因为旋转、缩放都是线性变换,因此可将旋转和缩放合并成一个变换矩阵来表示,如:

[ x y 1 ] = [ x 0 y 0 1 ] T { \left[\begin{array}{ccc} x & y & 1 \end{array} \right ]}={ \left[\begin{array}{ccc} x_0 & y_0 & 1 \end{array} \right ]}^T [xy1]=[x0y01]T

  • 在直角坐标系中,平移不是线性变换,因此不能与旋转、缩放等操作合并成一个变换矩阵。
  • 引入齐次坐标后,平移变为线性变换,从而可以采用一个通用的变换模型(仿射变换模型)表示图像的各种几何变换。

仿射变换

[ x y 1 ] = [ x 0 y 0 1 ] T { \left[\begin{array}{ccc} x & y & 1 \end{array} \right ]}={ \left[\begin{array}{ccc} x_0 & y_0 & 1 \end{array} \right ]}^T [xy1]=[x0y01]T

  • T仿射矩阵

T = [ a b p c d q m n s ] T=\left[ \begin{array}{ccc} a & b & p\\ c & d & q\\ m & n & s \end{array} \right ] T=acmbdnpqs

  • a   b   c   d a \ b \ c \ d a b c d:实现比例变换、旋转变换、偏移变换
  • m   n m \ n m n:实现平移变换、 m m m n n n分别为 X X X Y Y Y方向的平移量。
  • s s s:实现等比例变换
  • p   q p \ q p q:实现透视变换

图像的位置变换

  • 所谓图像的位置变换是指图像的大小和形状不发生变化,只是将图像进行平移、旋转、镜像等。
  • 图像的位置变换主要是用于目标识别中的目标配准。

平移

  • 平移的原理:
    • 在图像平移是将一幅图像中所有的点都按照指定的平移量在水平、垂直方向移动,平移后的图像与原图像相同

平移变换

  • 平移的直角坐标公式:

{ x = x 0 + Δ x ( x 0 , y 0 ) 为平移之前的像素坐标 y = y 0 + Δ y ( x , y ) 为 对 应 像 素 平 移 后 的 坐 标 \begin{cases} x=x_0+\Delta x & \text{$(x_0, y_0)$为平移之前的像素坐标}\\ y=y_0+\Delta y & \text{$(x, y)为对应像素平移后的坐标$} \end{cases} {x=x0+Δxy=y0+Δy(x0,y0)为平移之前的像素坐标(x,y)为对应像素平移后的坐标

  • 平移的齐次坐标公式

[ x y 1 ] = [ x 0 y 0 1 ] × [ 1 0 0 0 1 0 Δ x Δ y 1 ] { \left[\begin{array}{ccc} x & y & 1 \end{array} \right ]}={ \left[\begin{array}{ccc} x_0 & y_0 & 1 \end{array} \right ]}\times{ \left[\begin{array}{ccc} 1 & 0 & 0\\ 0 & 1 & 0\\ \Delta x & \Delta y & 1 \end{array} \right ]} [xy1]=[x0y01]×10Δx01Δy001

平移的逆变换

  • 平移的直角坐标公式:

{ x = x 0 − Δ x ( x 0 , y 0 ) 为平移之前的像素坐标 y = y 0 − Δ y ( x , y ) 为 对 应 像 素 平 移 后 的 坐 标 \begin{cases} x=x_0 - \Delta x & \text{$(x_0, y_0)$为平移之前的像素坐标}\\ y=y_0 - \Delta y & \text{$(x, y)为对应像素平移后的坐标$} \end{cases} {x=x0Δxy=y0Δy(x0,y0)为平移之前的像素坐标(x,y)为对应像素平移后的坐标

  • 平移的齐次坐标公式

[ x 0 y 0 1 ] = [ x y 1 ] × [ 1 0 0 0 1 0 − Δ x − Δ y 1 ] { \left[\begin{array}{ccc} x_0 & y_0 & 1 \end{array} \right ]}={ \left[\begin{array}{ccc} x & y & 1 \end{array} \right ]}\times{ \left[\begin{array}{ccc} 1 & 0 & 0\\ 0 & 1 & 0\\ -\Delta x & -\Delta y & 1 \end{array} \right ]} [x0y01]=[xy1]×10Δx01Δy001

  • 说明:平移后的图像上的每一点都可以在原图像中找到对应的点。

图像的镜像

前置条件:设图像高度为 H H H,宽度为 W W W,原图中的像素点 ( x 0 , y 0 ) (x_0 , y_0) (x0,y0)经过镜像后的坐标为 ( x , y ) (x , y) (x,y)

水平镜像:以图像的垂直中轴线为中心交换图像的左右两部分。

  • 水平镜像的直角坐标公式:

{ x = x 0 y = W − y 0 \begin{cases} x=x_0 \\ y=W - y_0 \end{cases} {x=x0y=Wy0

  • 水平镜像的齐次坐标公式

[ x y 1 ] = [ x 0 y 0 1 ] × [ 1 0 0 0 − 1 0 0 W 1 ] { \left[\begin{array}{ccc} x & y & 1 \end{array} \right ]}={ \left[\begin{array}{ccc} x_0 & y_0 & 1 \end{array} \right ]}\times{ \left[\begin{array}{ccc} 1 & 0 & 0\\ 0 & -1 & 0\\ 0 & W & 1 \end{array} \right ]} [xy1]=[x0y01]×10001W001

垂直镜像:以图像的水平中轴线为中心交换图像的上下两部分

  • 垂直镜像的直角坐标公式:

{ x = H − x 0 y = y 0 \begin{cases} x=H - x_0 \\ y=y_0 \end{cases} {x=Hx0y=y0

  • 垂直镜像的齐次坐标公式

[ x y 1 ] = [ x 0 y 0 1 ] × [ − 1 0 0 0 1 0 H 0 1 ] { \left[\begin{array}{ccc} x & y & 1 \end{array} \right ]}={ \left[\begin{array}{ccc} x_0 & y_0 & 1 \end{array} \right ]}\times{ \left[\begin{array}{ccc} -1 & 0 & 0\\ 0 & 1 & 0\\ H & 0 & 1 \end{array} \right ]} [xy1]=[x0y01]×10H010001

图像的旋转

前置条件:图像中的像素点旋转前的坐标为 ( x 0 , y 0 ) (x_0, y_0) (x0,y0),与y轴的角度为 α \alpha α,旋转 θ \theta θ角度后的坐标为 ( x , y ) (x, y) (x,y),与y轴的角度为 α − θ \alpha - \theta αθ

直角坐标公式

  • 旋转前
    • x 0 = r s i n α x_0=rsin\alpha x0=rsinα
    • y 0 = r c o s α y_0=rcos\alpha y0=rcosα
  • 旋转后
    • x = r s i n ( α − θ ) = r ( s i n α c o s θ − c o s α s i n θ ) = x 0 c o s θ − y 0 s i n θ x=rsin(\alpha-\theta)=r(sin\alpha cos\theta-cos\alpha sin\theta)=x_0cos\theta-y_0sin\theta x=rsin(αθ)=r(sinαcosθcosαsinθ)=x0cosθy0sinθ
    • y = r c o s ( α − θ ) = r ( c o s α c o s θ + s i n α s i n θ ) = y 0 c o s θ + x 0 s i n θ y=rcos(\alpha-\theta)=r(cos\alpha cos\theta+sin\alpha sin\theta)=y_0cos\theta + x_0sin\theta y=rcos(αθ)=r(cosαcosθ+sinαsinθ)=y0cosθ+x0sinθ
  • 整理旋转后的公式
    • x = x 0 c o s θ − y 0 s i n θ x=x_0cos\theta - y_0sin\theta x=x0cosθy0sinθ
    • y = x 0 s i n θ + y 0 c o s θ y=x_0sin\theta + y_0cos\theta y=x0sinθ+y0cosθ

齐次坐标公式

[ x y 1 ] = [ x 0 y 0 1 ] × [ c o s θ s i n θ 0 − s i n θ c o s θ 0 0 0 1 ] { \left[\begin{array}{ccc} x & y & 1 \end{array} \right ]}={ \left[\begin{array}{ccc} x_0 & y_0 & 1 \end{array} \right ]}\times{ \left[\begin{array}{ccc} cos\theta & sin\theta & 0\\ -sin\theta & cos\theta & 0\\ 0 & 0 & 1 \end{array} \right ]} [xy1]=[x0y01]×cosθsinθ0sinθcosθ0001

图像旋转出现的问题

  • 导致在旋转后的图像中出现空洞点
    • 旋转计算后的值为小数或者负数,而坐标值应该为正整数。
    • 旋转计算后的结果值所在范围与原坐标所在的范围不同。
  • 解决方法
    • 图像旋转出现的两个问题的本质都是因为像素值的填充是不连续的。
    • 可以采用插值填充的方法来解决。

图像形状的变换

形状变换类型 说明
偏移变换 三维物体投影到平面时所产生的水平方向或者垂直方向的形状变化。
平面上比例变换 放大、缩小等。

水平偏移

直角坐标公式

{ x = x 0 y = S h x 0 + y 0 \begin{cases} x=x_0 \\ y=S_hx_0+y_0 \end{cases} {x=x0y=Shx0+y0

齐次坐标公式

[ x y 1 ] = [ x 0 y 0 1 ] × [ 1 S h 0 0 1 0 0 0 1 ] = [ x 0 S h x 0 + y 0 1 ] { \left[\begin{array}{ccc} x & y & 1 \end{array} \right ]}={ \left[\begin{array}{ccc} x_0 & y_0 & 1 \end{array} \right ]}\times{ \left[\begin{array}{ccc} 1 & S_h & 0\\ 0 & 1 & 0\\ 0 & 0 & 1 \end{array} \right ]}={ \left[\begin{array}{ccc} x_0 & S_hx_0+y_0 & 1 \end{array} \right ]} [xy1]=[x0y01]×100Sh10001=[x0Shx0+y01]

垂直偏移

直角坐标公式

{ x = x 0 + S v y 0 y = y 0 \begin{cases} x=x_0 + S_vy_0 \\ y=y_0 \end{cases} {x=x0+Svy0y=y0

齐次坐标公式

[ x y 1 ] = [ x 0 y 0 1 ] × [ 1 0 0 S v 1 0 0 0 1 ] = [ x 0 + S v y 0 y 0 1 ] { \left[\begin{array}{ccc} x & y & 1 \end{array} \right ]}={ \left[\begin{array}{ccc} x_0 & y_0 & 1 \end{array} \right ]}\times{ \left[\begin{array}{ccc} 1 & 0 & 0\\ S_v & 1 & 0\\ 0 & 0 & 1 \end{array} \right ]}={ \left[\begin{array}{ccc} x_0+S_vy_0 & y_0 & 1 \end{array} \right ]} [xy1]=[x0y01]×1Sv0010001=[x0+Svy0y01]

图像的比例变换

直角坐标公式

{ x = c x x 0 比例系数>1:放大 y = c y y 0 比例系数<1:缩小 \begin{cases} x=c_xx_0 & \text{比例系数>1:放大}\\ y=c_yy_0 & \text{比例系数<1:缩小} \end{cases} {x=cxx0y=cyy0比例系数>1:放大比例系数<1:缩小

齐次坐标公式

[ x y 1 ] = [ x 0 y 0 1 ] × [ c x 0 0 0 c y 0 0 0 1 ] = [ c x x 0 c y y 0 1 ] { \left[\begin{array}{ccc} x & y & 1 \end{array} \right ]}={ \left[\begin{array}{ccc} x_0 & y_0 & 1 \end{array} \right ]}\times{ \left[\begin{array}{ccc} c_x & 0 & 0\\ 0 & c_y & 0\\ 0 & 0 & 1 \end{array} \right ]}={ \left[\begin{array}{ccc} c_xx_0 & c_yy_0 & 1 \end{array} \right ]} [xy1]=[x0y01]×cx000cy0001=[cxx0cyy01]

图像的比例缩放的算法

图像的缩小

图像的缩小实际上就是对原有的多个数据进行挑选或者处理,从而获得期望缩小尺寸的数据,并且尽量保持原有的特征不丢失。最简单的方法就是等间隔的选取数据

图像的放大

图像的放大从字面上看,是图像缩小的逆操作,但是从信息处理的角度来看,则难易程度完全不一样。

图像缩小是从多个信息中选出所需要的信息,而图像放大则是需要对多出的空位填入适当的值,是信息的估计,较图像缩小难度更大。

插值方式 效率 说明
最近邻插值 简单、快速 将放大后未知的像素点位置换算到原始图像上,并与原始图像上邻近的4个像素点做比较,最靠近的【如欧式距离等方式计算】邻近点的像素值即为该像素点的像素值。
双线性插值 较慢 将放大后未知的像素点位置换算到原始图像上,并将原始图像上邻近的4个像素点的灰度级别加权求和得到(权值可以采用距离进行度量,距离越近,权值越大)。
双三线性插值
  • 从理论上讲,最近邻插值的效果最差,双三次插值的效果最好,双线性插值的效果介于两者之间。
  • 最近邻插值:算法简单,插值结果不连续,视觉上锯齿效应明显
  • 双线性插值:插值的结果是连续的,视觉上比最近邻插值要平滑

双线性插值

双向性插值法将放大后未知的像素点位置换算到原始图像上,并将原始图像上邻近的4个像素点的灰度级别加权求和得到。这里的加权采用的是 欧 式 距 离 等 距 离 公 式 / [ W i d t h   H e i g h t ] 欧式距离等距离公式/[Width \ Height] /[Width Height]

前置条件 图例
假设放大之后的图像 G G G的像素点 P P P换算到原始图像上的位置为 ( x + Δ x , y + Δ y ) (x+\Delta x, y+\Delta y) (x+Δx,y+Δy),则在F上的4个邻近点的 A 、 B 、 C 、 D A、B、C、D ABCD分别为 ( x , y ) (x, y) (x,y) ( x , y + 1 ) (x, y+1) (x,y+1) ( x + 1 , y ) (x+1, y) (x+1,y)、(x+1, y+1),而 e e e f f f的点的位置为 ( x , y + Δ y ) (x, y+\Delta y) (x,y+Δy) ( x + 1 , y + Δ y ) (x+1, y+\Delta y) (x+1,y+Δy)
说明:横向为y轴,竖向为x轴。
图像处理 几何变换_第1张图片

注意,这里采用的是欧式距离来计算距离,作为权值。

假如存在两个点 A ( x 1 , y 1 ) A(x_1, y_1) A(x1,y1) B ( x 2 , y 2 ) B(x_2, y_2) B(x2,y2),则欧式距离为:

d i s t a n c e = ( x 1 − x 2 ) 2 + ( y 1 − y 2 ) 2 distance = \sqrt {(x_1 -x_2)^2+(y_1-y_2)^2} distance=(x1x2)2+(y1y2)2

所以权值的计算为: w e i g h t = d i s t a n c e w i d t h ‘ s   d i s t a n c e weight = \frac {distance}{width`s \ distance} weight=widths distancedistance或者 w e i g h t = d i s t a n c e h e i g h t ‘ s   d i s t a n c e weight = \frac {distance}{height`s \ distance} weight=heights distancedistance

双线性插值算法原理分析:

  • 首先计算水平方向 A ( x , y ) A(x, y) A(x,y) B ( x , y + 1 ) B(x, y+1) B(x,y+1) P ( x + Δ x , y + Δ y ) P(x+\Delta x, y+\Delta y) P(x+Δx,y+Δy)的影响,得到 e e e点的灰度值

F ( x , y + Δ y ) = ( x − x ) 2 + ( ( y + 1 ) − ( y + Δ y ) ) 2 ( ( x − x ) 2 + ( ( y + 1 ) − y ) 2 F ( x , y ) + ( x − x ) 2 + ( ( y + Δ y ) − y ) 2 ( ( x − x ) 2 + ( ( y + 1 ) − y ) 2 F ( x , y + 1 ) F(x, y+\Delta y)=\frac {\sqrt{(x-x)^2+((y+1)-(y+\Delta y))^2}}{\sqrt{((x-x)^2+((y+1)-y)^2}}F(x, y)\\ +\frac {\sqrt {(x-x)^2+((y+\Delta y)-y)^2}}{\sqrt{((x-x)^2+((y+1)-y)^2}}F(x, y+1) F(x,y+Δy)=((xx)2+((y+1)y)2 (xx)2+((y+1)(y+Δy))2 F(x,y)+((xx)2+((y+1)y)2 (xx)2+((y+Δy)y)2 F(x,y+1)

  • 计算 C ( x + 1 , y ) C(x+1, y) C(x+1,y) D ( x + 1 , y + 1 ) D(x+1, y+1) D(x+1,y+1) P ( x + Δ x , y + Δ y ) P(x+\Delta x, y+\Delta y) P(x+Δx,y+Δy)点的影响,得到 f ( x + 1 , y + Δ y ) f(x+1, y+\Delta y) f(x+1,y+Δy)点的灰度值

F ( x + 1 , y + Δ y ) = ( ( x + 1 ) − ( x + 1 ) ) 2 + ( ( y + 1 ) − ( y + Δ y ) ) 2 ( ( x + 1 ) − ( x + 1 ) ) 2 + ( ( y + 1 ) − y ) 2 F ( x + 1 , y ) + ( ( x + 1 ) − ( x + 1 ) ) 2 + ( ( y + Δ y ) − y ) 2 ( ( x + 1 ) − ( x + 1 ) ) 2 + ( ( y + 1 ) − y ) 2 F ( x + 1 , y + 1 ) F(x+1, y+\Delta y)=\frac {\sqrt{((x+1)-(x+1))^2+((y+1)-(y+\Delta y))^2}}{\sqrt{((x+1)-(x+1))^2+((y+1)-y)^2}}F(x+1, y)\\ +\frac {\sqrt {((x+1)-(x+1))^2+((y+\Delta y)-y)^2}}{\sqrt{((x+1)-(x+1))^2+((y+1)-y)^2}}F(x+1, y+1) F(x+1,y+Δy)=((x+1)(x+1))2+((y+1)y)2 ((x+1)(x+1))2+((y+1)(y+Δy))2 F(x+1,y)+((x+1)(x+1))2+((y+1)y)2 ((x+1)(x+1))2+((y+Δy)y)2 F(x+1,y+1)

  • 计算 e ( x , y + Δ y ) e(x, y+\Delta y) e(x,y+Δy) f ( x + 1 , y + Δ y ) f(x+1, y+\Delta y) f(x+1,y+Δy)对于 P ( x + Δ x , y + Δ y ) P(x+\Delta x, y+\Delta y) P(x+Δx,y+Δy)点的影响,得到 P ( x + Δ x , y + Δ y ) P(x+\Delta x, y+\Delta y) P(x+Δx,y+Δy)点的灰度值

F ( x + Δ x , y + Δ y ) = ( ( x + 1 ) − ( x + Δ x ) ) 2 + ( ( y + Δ y ) − ( y + Δ y ) ) 2 ( ( x + 1 ) − x ) 2 + ( ( y + Δ y ) − ( y + Δ y ) ) 2 F ( x , y + Δ y ) + ( ( x + Δ x ) − x ) 2 + ( ( y + Δ y ) − ( y + Δ y ) ) 2 ( ( x + 1 ) − x ) 2 + ( ( y + Δ y ) − ( y + Δ y ) ) 2 F ( x + 1 , y + Δ y ) F(x+\Delta x, y+\Delta y)=\frac {\sqrt{((x+1)-(x+\Delta x))^2+((y+\Delta y)-(y+\Delta y))^2}}{\sqrt{((x+1)-x)^2+((y+\Delta y)-(y+\Delta y))^2}}F(x, y+\Delta y)\\ +\frac {\sqrt {((x+\Delta x)-x)^2+((y+\Delta y)-(y+\Delta y))^2}}{\sqrt{((x+1)-x)^2+((y+\Delta y)-(y+\Delta y))^2}}F(x+1, y+\Delta y) F(x+Δx,y+Δy)=((x+1)x)2+((y+Δy)(y+Δy))2 ((x+1)(x+Δx))2+((y+Δy)(y+Δy))2 F(x,y+Δy)+((x+1)x)2+((y+Δy)(y+Δy))2 ((x+Δx)x)2+((y+Δy)(y+Δy))2 F(x+1,y+Δy)

附录

  • 几何变换算法

你可能感兴趣的:(图像处理)