数字图像处理

发布时间 2023-08-11 16:02:26作者: zzqDeco

图像增强

图像增强分为两类:空间域增强和频域增强

灰度变换

点对点的灰度映射

\(g(x,y)=T[f(x,y)]\)

很明显,在这个式子中可以看出,灰度变换只是一种对于像素值的改变

基本灰度变换函数

线性函数

反转变换,恒等变换等

图像反转

将低灰度的像素变为高灰度,高灰度变为低灰度

目的可以突出暗部细节

分段线性变换

对比度拉伸,拓展灰度级范围,或者压缩灰度级范围

还可以通过突出某一段灰度,来消除不需要的背景信息,突出主体

对数变换

\(s=c*log(1+r)\)

特点:拓展低灰度级范围,压缩高灰度级范围

应用范围:当原图动态范围太大,超出显示范围时,使用对数变换对原图进行灰度压缩

幂次变换

\(s=cr^\gamma\)

其中\(c,\gamma\)是常数

幂次变换的特点就相当的灵活,可以满足突出很多部分的需求,同时基本可以替代对数变换和反对数变换

imadjust就是Matlab中内置的一个通过调节灰度,调节对比度和亮度的函数,它可以接受一些可选参数来进一步控制图像的调整过程。以下是imadjust函数的一些常见可选参数:

  1. [low_in high_in]:这是一个长度为2的向量,用于指定输入图像的灰度级范围。默认情况下,imadjust函数将自动确定输入图像的最小和最大灰度级。使用这个参数可以手动指定输入图像的灰度级范围。

  2. [low_out high_out]:这也是一个长度为2的向量,用于指定输出图像的灰度级范围。默认情况下,imadjust函数将调整输入图像的灰度级范围到[0, 1]之间。您可以使用这个参数来指定输出图像的自定义灰度级范围。

  3. 'gamma':这是一个标量值,用于指定伽马校正的参数。伽马校正可以调整图像的对比度。默认情况下,imadjust函数不应用伽马校正(gamma=1)。通过设置不同的gamma值,可以增加或减小图像的对比度。

空间滤波

将图像中的每个像素的值替换为该像素及其领域像素的函数值

线性空间滤波器:对图像像素执行线性运算

非线性空间滤波器:对图像像素执行非线性运算

线性空间滤波器

在图像和滤波器核之间执行乘积之和的运算

核的大小和形状确定了运算的领域范围

滤波器核的系数决定了滤波器的性质

实际上是类似两个向量点乘的操作

关于线性空间滤波器的概念并不重要,我们更多的时候是要从我们的目标出发

平滑空间滤波器

平滑空间滤波器的作用:

  1. 用于降低灰度的急剧过度
  2. 减少图像中的无关细节
  3. 平滑因为灰度级数量不足导致的图像中的伪轮廓(随机噪声通常由灰度的急剧过度组成,使用平滑来消除噪声)

平滑空间滤波器有很多

均值滤波器

将邻域中的像素平均,以减少图像灰度尖锐的情况

缺点是存在模糊图像边缘问题

高斯滤波器

高斯滤波器也是一种线性滤波器,与均值滤波器不同,高斯滤波器是采用的高斯函数进行加权(实际上就是为了满足正态分布的效果)

这个内容我们后面再讨论

非线性滤波器(统计排序滤波器)

非线性滤波器的代表就是关于特征值的滤波器

中值滤波器

用邻域的中值代替这个像素(用于去除椒盐噪音)

优点:

  1. 去除噪声的同时,可以比较好的保留图像边界的锐度核图像细节(优于均值滤波器)
  2. 能够有效的去除椒盐噪点
最值滤波器

分别用于寻找最亮点和最暗点

图像锐化

锐化滤波器用于增强图像的边缘以及灰度跳变的部分

主要特点就是增强细节纹理,突出边缘,加强曝光

平滑滤波器是积分效果使得邻域接近,锐化滤波器是微分效果使得邻域分离,这是平滑滤波器和锐化滤波器的理论支撑

对于离散问题,我们讨论积分和微分的概念与连续问题有很大的差别

其中一点就体现在导数的差分定义(这东西的定义很直观但是也很不合常理):

\[\frac{\partial{f(x,y)}}{\partial{x}}=f(x+1,y)-f(x,y) \\ \frac{\partial{f(x,y)}}{\partial{y}}=f(x,y+1)-f(x,y) \\ \frac{\partial^2{f(x,y)}}{\partial{x^2}}=f(x+1,y)+f(x-1,y)-2f(x,y) \\ \frac{\partial^2{f(x,y)}}{\partial{y^2}}=f(x,y+1)+f(x,y-1)-2f(x,y) \\ \]

一阶差分滤波器和二阶差分滤波器都基于梯度算子

梯度算子是一种图像处理中常用的算子,用于计算图像中每个像素点的梯度或边缘信息。它通过检测图像中灰度值的变化率来确定像素点周围的边缘强度和方向。

常见的梯度算子包括Sobel算子、Prewitt算子和Laplacian算子等。

  1. Sobel算子:Sobel算子是一种离散的差分算子,用于计算图像中每个像素点的梯度近似值。它分为水平和垂直两个方向的算子,通过对图像进行卷积操作得到每个像素点的梯度幅值和方向。

  2. Prewitt算子:Prewitt算子也是一种离散的差分算子,用于计算图像中像素点的梯度。类似于Sobel算子,Prewitt算子也包括水平和垂直两个方向的算子。

  3. Laplacian算子:Laplacian算子是一种二阶微分算子,用于检测图像中的边缘。它通过计算图像中像素点的二阶导数来确定边缘的位置。Laplacian算子通常用于边缘检测和图像增强。

这里我们考虑离散的一阶差分逼近

我们根据上面的定义可以很容易的得到我们的梯度实际上是一个向量,包含

\[\frac{\partial{f(x,y)}}{\partial{x}}\\ \frac{\partial{f(x,y)}}{\partial{y}} \]

这样我们就可以顺势求出梯度的模

\[\abs{\nabla{[f(x,y)]}}={[{(\frac{\partial{f}}{\partial{x}})}^2+{(\frac{\partial{f}}{\partial{y}})}^2]}^{\frac{1}{2}} \]

我们这里求出的梯度算子是极其简单的,另一种方式是通过交叉差来求得

交叉差会考虑到对于邻域内的平均,效果更好

Roberts交叉梯度算子

在 \(2\times2\) 的计算两个模版的绝对值的和

\[\begin{bmatrix} -1&0\\ 0&1\\ \end{bmatrix} \quad \begin{bmatrix} 0&-1\\ 1&0\\ \end{bmatrix} \]
Prewitt梯度算子

在 \(3\times3\) 的模版中计算左右,上下的差的绝对值之和

\[\begin{bmatrix} -1&0&1\\ -1&0&1\\ -1&0&1 \end{bmatrix} \quad \begin{bmatrix} -1&-1&-1\\ 0&0&0\\ 1&1&1 \end{bmatrix} \]
Sobel梯度算子

Sobel梯度算子在上面的Prewitt梯度算子的基础上更进一步

Sobel对于靠近中心的部分进行加权

\[\begin{bmatrix} -1&0&1\\ -2&0&2\\ -1&0&1 \end{bmatrix} \quad \begin{bmatrix} -1&-2&-1\\ 0&0&0\\ 1&2&1 \end{bmatrix} \]

Sobel梯度算子是边缘检测中最常用的算子之一

Laplacian算子
\[\nabla^2f=[f(x+1,y)+f(x-1,y)+f(x,y+1)+f(x,y-1)]-4f(x,y) \]

Laplacian会很明显的突出边缘,但是这样的锐化会缺失背景,我们一般在通过Laplacian滤波过后将结果和原图像叠加,得到锐化效果很好的图片

\[\begin{bmatrix} 0&1&0\\ 1&-4&1\\ 0&1&0 \end{bmatrix} \]

同样的,存在邻域更大的Laplacian算子

\[\begin{bmatrix} 1&1&1\\ 1&-8&1\\ 1&1&1 \end{bmatrix} \]