图像的基本运算概述

图像基本运算的分类

按图像处理运算的数学特征, 图像基本运算可分为:

  • 点运算(Point Operation)
  • 代数运算(Algebra Operation)
  • 逻辑运算(Logical Operation)
  • 几何运算(Geometric Operation)

点运算

点运算是指一幅图像中每个像素点的灰度值进行计算恶方法.

代数运算 逻辑运算

代数运算或逻辑运算是指将两幅或多幅图像通过对应像素之间的加, 减, 乘, 除运算或逻辑与, 或, 非运算得到输出图像的方法.

几何运算

几何运算就是改变图像中物体对象(像素)之间的空间关系. 从变换性质来分, 几何变换可以分为图像的位置变换(平移, 镜像, 旋转), 形状变换(放大, 缩小)以及图像的复合变换等.

点运算

点运算的定义

设输入图像的灰度为f(x,y)f(x,y),输出图像的灰度为g(x,y)g(x,y),则点运算可以表示为:g(x,y)=T[f(x,y)]g(x, y)=T[f(x, y)],其中T [ ]是对f在(x,y)点值的一种数学运算, 即点运算是一种像素的逐点运算, 是灰度到灰度的映射过程, 故称T [ ]为灰度变换函数.

若令f(x,y)f(x,y)g(x,y)g(x,y)在任一点(x, y)的灰度级分别为r和s, 则灰度变换函数可以简化为s=T[r]s=T[r]

image-20200622143730439

image-20200622143806091

点运算可以改变图像数据所占据的灰度值范围, 从而改善图像的显示效果.

点运算的分类

点运算又称为对比度增强对比度拉伸灰度变换等, 按灰度变换函数T [ ]的性质, 可将点运算分为:

  • 灰度变换增强
  • 线性灰度变换(线性点运算)
  • 分段线性灰度变换(分段线性点运算)
  • 非线性灰度变换(非线性点运算)
  • 直方图增强

线性点运算

线性点运算

线性点运算的灰度变换函数形式可以采用线性方程描述 , 即 s=ar+bs=ar+b

image-20200622144732474

线性点运算的应用

  1. 如果a>1, 输出图像的对比度增大(灰度扩展)

    image-20200622144858334

    image-20200622144924184image-20200622144935785

  2. 如果0<a<1, 输出图像的对比度减小(灰度压缩)

    image-20200622145102626

    image-20200622145118191

    image-20200622145134677

  3. 如果a为负值, 暗区域将变亮, 亮区域将变暗

    image-20200622145358452

分段线性点运算

将感兴趣的灰度范围线性扩展, 相对抑制不感兴趣的区域.
f(x,y)f(x,y) 灰度值范围为[0,Mf][0,M_f], g(x,y)g(x,y)灰度范围为[0,Mg][0,M_g],

g(x,y)={MgdMfb[f(x,y)b]+dbf(x,y)Mfdcba[f(x,y)a]+caf(x,y)<bcaf(x,y)0f(x,y)<ag(x, y)=\left\{\begin{array}{lc} \frac{M_{g}-d}{M_{f}-b}[f(x, y)-b]+d & b \leq f(x, y) \leq M_{f} \\ \frac{d-c}{b-a}[f(x, y)-a]+c & a \leq f(x, y)<b \\ \frac{c}{a} f(x, y) & 0 \leq f(x, y)<a \end{array}\right.

image-20200622145801421

分段线性点运算的应用

image-20200622145926033

非线性点运算

非线性点运算

非线性点运算的输出灰度级与输入灰度级呈非线性关系, 常见的非线性灰度变换为对数变换和幂次变换.

  1. 对数变换

    对数变换的一般表达式为: s=clog(1+r)s=c log(1+r), 其中C是一个常数.

    image-20200622150941582

    低灰度区扩展, 高灰度区压缩. 图像加亮, 减暗.

    非线性拉伸不是对图像的整个灰度范围进扩展, 而是有选择的对某一灰度值范围进行扩展, 其他范围的灰度值则有可能被压缩.

    image-20200622151352035

    image-20200622151415049

  2. 幂次变换

    幂次变换的一般形式为: s=crγs=cr^{\gamma}其中c和γ\gamma为正常数.

    image-20200622151631368

    应用实例:

    image-20200622151714438

    image-20200622151731692

代数运算

  1. 概念: 代数运算是指两幅或多幅输入图像之间进行点对点的加, 减, 乘 , 除运算得到输出图像的过程. 如果记输入图像为A(x,y)A(x,y)B(x,y)B(x,y),输出图像为C(x,y)C(x,y),则有如下四种形式:
    • C(x,y)=A(x,y)+B(x,y)C(x, y)=A(x, y)+B(x, y)
    • C(x,y)=A(x,y)B(x,y)C(x, y)=A(x, y)-B(x, y)
    • C(x,y)=A(x,y)×B(x,y)C(x, y)=A(x, y) \times B(x, y)
    • C(x,y)=A(x,y)÷B(x,y)C(x, y)=A(x, y) \div B(x, y)
  2. 逻辑运算: 逻辑运算是指将两幅或者多幅图像通过对应像素之间的与, 或, 非逻辑运算得到输出图像的方法. 在进行图像理解或分析领域比较有用. 运用这种方法可以为图像提供模板, 与其他运算方法结合起来可以获得某种特殊的效果.

加法运算

C(x,y)=A(x,y)+B(x,y)C(x, y)=A(x, y)+B(x, y)

主要应用举例:

去除"叠加性"随机噪声

生成图像叠加效果

去除"叠加性"噪声

对于原图像f(x,y)f(x,y),有一个噪声集{gi(x,y)}i=1,2,M\left\{\mathbf{g}_{i}(\mathbf{x}, \mathbf{y})\right\} \quad \mathbf{i}=\mathbf{1}, \mathbf{2}, \ldots \mathbf{M}

其中: gi(x,y)=f(x,y)+ei(x,y)g_{i}(x, y)=f(x, y)+e_{i}(x, y)

M个图像的均值为:

gˉ(x,y)=1Mi=1M[fi(x,y)+ei(x,y)]=f(x,y)+1Mi=1Mei(x,y)\begin{aligned} \bar{g}(x, y) &=\frac{1}{M} \sum_{i=1}^{M}\left[f_{i}(x, y)+e_{i}(x, y)\right] \\ &=f(x, y)+\frac{1}{M} \sum_{i=1}^{M} e_{i}(x, y) \end{aligned}

当: 噪声ei(x,y)\mathbf{e}_{\mathbf{i}}(\mathbf{x}, \mathbf{y})为互不相关, 且均值为0时, 上述图像均值将减低噪声的影响.

gˉ(x,y)=1Mi=1M[fi(x,y)+ei(x,y)]=f(x,y)+1Mi=1Mei(x,y)\begin{aligned} \bar{g}(x, y) &=\frac{1}{M} \sum_{i=1}^{M}\left[f_{i}(x, y)+e_{i}(x, y)\right] \\ &=f(x, y)+\frac{1}{M} \sum_{i=1}^{M} e_{i}(x, y) \end{aligned}

gˉ(x,y)\bar{g}(x, y)f(x,y)f(x,y)的无偏估计

E{gˉ(x,y)}=E{1Mi=1Mgi(x,y)}=1Mi=1ME{gi(x,y)}=1Mi=1M{E[fi(x,y)]+E[ei(x,y)]}=1Mi=1Mfi(x,y)=f(x,y)\begin{aligned} \because E\{\bar{g}(x, y)\} &=E\left\{\frac{1}{M} \sum_{i=1}^{M} g_{i}(x, y)\right\}=\frac{1}{M} \sum_{i=1}^{M} E\left\{g_{i}(x, y)\right\} \\ &=\frac{1}{M} \sum_{i=1}^{M}\left\{E\left[f_{i}(x, y)\right]+E\left[e_{i}(x, y)\right]\right\} \\ &=\frac{1}{M} \sum_{i=1}^{M} f_{i}(x, y)=f(x, y) \end{aligned}

利用同一景物的多幅图像去平均, 消除噪声. 取M个图像相加求平均得到一幅新图像, 一般选8幅取平均.

image-20200622153652901生成图像叠加效果: 可以得到各种图像合成的效果, 也可以用于两张图片的衔接.

image-20200622153950069

减法运算

将同一景物在不同时间拍摄的图像或同一景物在不同波段的图像相减, 这就是图像的减法运算. 实际中常称为差影法.C(x,y)=A(x,y)B(x,y)C(x, y)=A(x, y)-B(x, y)

差值图像提供了图像间的差值信息, 能用于指导动态监测, 运动目标的检测, 跟踪, 图像的背景消除及目标识别等.

主要应用举例:

  • 差影法(检测同一场景两幅图像之间的变化)
  • 混合图像的分离

检测同一场景两幅图像之间的变化

设: 时刻1的图像为T1(x,y)T_1(x,y), 时刻2的图像为T2(x,y)T_2(x,y), g(x,y)=T2(x,y)T1(x,y)g(x, y)=T_{2}(x, y)-T_{1}(x, y)

image-20200622154927718

差影法在自动现场监测中的应用

  1. 在银行金库中, 摄像头每隔一固定时间拍摄一幅图像, 并与上一幅图像做差影, 如果图像差别超过了预先设置的阈值, 则表明可能有异常情况发生, 应自动或以某种方式报警;

  2. 用于遥感图像的动态监测, 差值图像可以发现森林火灾, 洪水泛滥, 监测灾情变化等;

  3. 也可以监测河口, 海岸的泥沙淤积及监视江河, 湖泊, 海岸等污染;

  4. 利用差值图像还能鉴别出耕地及不同作物覆盖情况.

混合图像的分离

image-20200622162140189

消除背景的影响

即, 去除不需要的叠加性图案

设: 背景图像b(x,y)b(x,y),前景背景混合图像f(x,y)f(x,y)

g(x,y)=f(x,y)b(x,y)g(x, y)=f(x, y)-b(x, y)

g(x,y)g(x,y)为去除了背景图像

image-20200622162433352

几何运算

概念

  • 几何运算就是改变图像中物体对象(像素)之间的空间关系
  • 从变换性质来分, 几何变换可以分为图像的位置变换(平移, 镜像, 旋转), 形状变换(放大, 缩小)以及图像的复合变换

图像几何运算的一般定义为:

g(x,y)=f(u,v)=f(p(x,y),q(x,y))g(x, y)=f(u, v)=f(p(x, y), q(x, y))

式中, u=p(x,y)u=p(x,y),v=q(x,y)v=q(x,y)唯一的描述空间变换, 即将输入图像f(x,y)f(x,y)uvu-v坐标系变换为xyx-y坐标系输出图像g(x,y)g(x,y)

图像的平移

image-20200622163155932

两点之间存在如下关系:

{x1=x0+Δxy1=y0+Δy\left\{\begin{array}{l} x_{1}=x_{0}+\Delta x \\ y_{1}=y_{0}+\Delta y \end{array}\right.

以矩阵形式表示平移前后的像素关系为:

[x1y11]=[10Δx01Δy001][x0y01]\left[\begin{array}{l} x_{1} \\ y_{1} \\ 1 \end{array}\right]=\left[\begin{array}{lll} 1 & 0 & \Delta x \\ 0 & 1 & \Delta y \\ 0 & 0 & 1 \end{array}\right]\left[\begin{array}{l} x_{0} \\ y_{0} \\ 1 \end{array}\right]

image-20200622163419400

图像的镜像

定义: 指原始图像相对于某一参照面旋转180度的图像

设原始图像的宽度为W, 高为h ,原始图像中的点为(x0,y0)(x_0,y_0), 变换后的点为(x1,y1)(x_1,y_1).

  • 水平镜像(相对于y轴)

    水平镜像的变换公式如下:

    [x1y11]=[10w010001][x0y01]\left[\begin{array}{l}x_{1} \\y_{1} \\1\end{array}\right]=\left[\begin{array}{ccc}-1 & 0 & w \\0 & 1 & 0 \\0 & 0 & 1\end{array}\right]\left[\begin{array}{l}x_{0} \\y_{0} \\1\end{array}\right]

    image-20200622165515424

  • 垂直镜像(相对于x轴)

    垂直镜像的变换公式如下:

    [x1y11]=[10001h001][x0y01]\left[\begin{array}{c} x_{1} \\ y_{1} \\ 1 \end{array}\right]=\left[\begin{array}{ccc} 1 & 0 & 0 \\ 0 & -1 & h \\ 0 & 0 & 1 \end{array}\right]\left[\begin{array}{c} x_{0} \\ y_{0} \\ 1 \end{array}\right]

    image-20200622165926927

图像的旋转

一般图像的旋转是以图像的中心为原点, 旋转一定的角度, 即将图像上的所有像素都旋转一个角度

image-20200622172645136

设原始图像的任意点A0(x0,y0)A_{0}\left(x_{0}, y_{0}\right)经旋转角度β\beta以后到新的位置A(x,y)A(x,y),为方便表示, 采用极坐标形式表示, 原始的角度为α\alpha, 如下图所示:

image-20200622173045483

原始图像的点A0(x0,y0)A_{0}\left(x_{0}, y_{0}\right)的坐标如下:

{x0=rcosαy0=rsinα\left\{\begin{array}{l} x_{0} = r \cos \alpha \\ y_{0} = r \sin \alpha \end{array}\right.

旋转到新的位置以后点A(x,y)A(x,y)的坐标如下:

{x=rcos(αβ)=rcosαcosβ+rsinαsinβy=rsin(αβ)=rsinαcosβrcosαsinβ\left\{\begin{array}{l} x=r \cos (\alpha-\beta)=r \cos \alpha \cos \beta+r \sin \alpha \sin \beta \\ y=r \sin (\alpha-\beta)=r \sin \alpha \cos \beta-r \cos \alpha \sin \beta \end{array}\right.

{x=x0cosβ+y0sinβy=x0sinβ+y0cosβ\left\{\begin{array}{l} x=x_{0} \cos \beta+y_{0} \sin \beta \\ y=-x_{0} \sin \beta+y_{0} \cos \beta \end{array}\right.

图像旋转用矩阵表示如下:

[xy1]=[cosβsinβ0sinβcosβ0001][x0y01]\left[\begin{array}{l} x \\ y \\ 1 \end{array}\right]=\left[\begin{array}{ccc} \cos \beta & \sin \beta & 0 \\ -\sin \beta & \cos \beta & 0 \\ 0 & 0 & 1 \end{array}\right]\left[\begin{array}{c} x_{0} \\ y_{0} \\ 1 \end{array}\right]

image-20200622173637193

图像旋转之后, 由于数字图像的坐标值必须是整数, 因此, 可能引起图像部分像素点的局部改变, 这时图像的大小也会发生一些改变.

若图像旋转角β=45\beta =45时, 则变换关系如下:

{x=0.707x0+0.707y0y=0.707x0+0.707y0\left\{\begin{array}{l} x=0.707 x_{0}+0.707 y_{0} \\ y=-0.707 x_{0}+0.707 y_{0} \end{array}\right.

图像绕任意点旋转

上述的旋转是绕坐标原点(0, 0)进行的, 如果是绕某一指定点(a, b)旋转, 则先要将坐标系平移到该点, 在进行旋转, 然后将旋转后的图像平移回原坐标系. 例如, 我们以图像的中心为旋转中心:

image-20200622174306909

利用公式进行图像旋转正变换时需要注意如下两点:

  1. 为了避免图像信息的丢失, 图像旋转后必须进行平移变换
  2. 图像旋转之后, 会出现许多空洞点, 我们需要对这些空洞点进行填充处理, 否则图像旋转后的效果不好, 一般也称这种操作为插值处理, 可采用行或列插值方法. 最简单的插值方法是, 图像旋转前某一点(x, y)的像素点颜色, 除了填充在旋转后坐标(x,y)\left(x^{\prime}, y^{\prime}\right)上外, 还要填充(x+1,y)\left(x^{\prime}+1, y^{\prime}\right)(x,y+1)\left(x^{\prime}, y^{\prime}+1\right).

若图像旋转角β=45\beta =45时, 则变换关系如下:

{x=0.707x0+0.707y0y=0.707x0+0.707y0\left\{\begin{array}{l} x=0.707 x_{0}+0.707 y_{0} \\ y=-0.707 x_{0}+0.707 y_{0} \end{array}\right.

以原始图像点(1, 1)为例 ,旋转之后, 均为小数, 经舍入后为(1, 0 ), 产生了位置误差. 因此, 图像旋转之后, 可能会出现一些空白点, 需要对这些空白点进行灰度级插值处理, 否则影响旋转后的图像质量.