数字图像处理-空间域图像增强-爆肝18小时用通俗语言进行超详细的总结

发布时间:2023年12月22日

目录

灰度变换

直方图(Histogram)

直方图均衡

直方图匹配(规定化)

空间滤波

低通滤波器

高通滤波器
???????


本文章讲解数字图像处理空间域图像增强,大部分内容来源于课堂笔记中

灰度变换

图像增强:对图像进行处理,使其更适合于某种特定的应用,有空间域图像增强和变换域图像增强

空间域图像增强是在图像的像素级别进行操作的一种方法。它直接对图像的原始像素值进行处理,常见的空间域增强技术包括直方图均衡化、滤波(如均值滤波、中值滤波)、边缘检测、锐化等

变换域图像增强是在图像变换后进行增强操作的一种技术,它使用数学变换将图像转换到一个不同的域,然后在这个域中对图像进行操作,常见的变换域增强技术包括傅里叶变换、小波变换等,这种处理通常涉及更复杂的数学原理和计算

灰度变换是图像处理中一种常见的操作,其目的是通过对图像的灰度级进行变换,改变图像的对比度、亮度或者强调图像的某些特征。这种变换通常在图像的每个像素上进行,根据像素的原始灰度值应用一个变换函数,得到新的灰度值

通常,灰度变换的一般形式可以表示为:

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

其中,g(x, y)是变换后的图像灰度值,f(x, y)是原始图像的灰度值,T是变换函数

若将邻域大小限制为1*1(上图的邻域为3*3),则简化为:

s=T(r)

r、s分别是f(x,y)、g(x,y)在任意点(x,y)的灰度级

下面介绍一些常见的灰度变换函数

1.图像反转变换

s=-r

效果:灰度图像---“黑白颠倒”? 彩色图像---补色

用途:适用于增强图像中暗色区域的灰色细节部分

2.对数变换

s=clog(1+r),c\, \, \, is\, \, \, constant\, \, \, and\, \, \, r\, \, \, is\, \, \, not\, \, \, negative

效果:把窄范围的低灰度级映射到宽范围的灰度级,把宽范围的高灰度级映射到窄范围的高灰度级

应用:压缩图像的动态范围,显示图像的傅里叶频谱图等

3.反对数变换

s=c/log(1+r),c\, \, \, is\, \, \, constant\, \, \, and\, \, \, r\, \, \, is\, \, \, not\, \, \, negative

效果:把宽范围的低灰度级映射到窄范围的灰度级,把窄范围的高灰度级映射到宽范围的高灰度级

4.幂次(伽马)变换

s=cr^{\gamma },c\, \, \, and\, \, \, r\, \, \, are\, \, \,not\, \, \, negative

效果:

\gamma <1?扩展暗像素值,压缩亮像素值,提升暗区分辨能力

\gamma >1?压缩暗像素值,扩展亮像素值,提升亮区分别能力

应用:用于各种图像获取、打印和显示等设备的伽马校正

演示:

一般对于航拍图而言,由于是在空中拍,拍的照片都比较亮,导致整体画面不清晰、观感不舒服,所以可以对其使用\gamma值大于1的幂次变换进行调整

import cv2
import numpy as np

# 读取图像
gray_image = cv2.imread('overlooking_img.jpg', cv2.IMREAD_GRAYSCALE)

# 检查图像是否成功读取
if gray_image is None:
    print("Error: Could not read the image.")
else:
    # 伽马值
    gamma =  1.8
    # 进行伽马变换
    gamma_corrected = np.array(255 * (gray_image / 255) ** gamma, dtype='uint8')

    # 窗口大小
    window_size = (300, 200)

    # 创建原始图像窗口并设置大小
    cv2.namedWindow('Original Image', cv2.WINDOW_NORMAL)
    cv2.resizeWindow('Original Image', *window_size)
    cv2.imshow('Original Image', gray_image)

    # 创建伽马校正图像窗口并设置大小
    cv2.namedWindow('Gamma Corrected Image', cv2.WINDOW_NORMAL)
    cv2.resizeWindow('Gamma Corrected Image', *window_size)
    cv2.imshow('Gamma Corrected Image', gamma_corrected)

    cv2.waitKey(0)
    cv2.destroyAllWindows()

5. 分段线性变换

将灰度级划归不同范围,每个范围采用不同的线性变换

优点:变换形式可根据需要任意合成

缺点:需用户输入

主要形式:1.对比度拉伸2.灰度级分层(灰度切割)3.比特平面分层(位图切割)

直方图(Histogram)

直方图表示具有不同灰度级的像素个数的条形图,把图像的灰度看作一个随机变量,则直方图是描述该随机变量的概率分布的一个近似

如上图所示,左边是普通的直方图、右边的是归一化的直方图

仅仅观察一个图像的直方图就可以看出这个图像的特点,比如说如果直方图的组成成分集中在灰度级低低的一侧,那么就是暗图像,如果直方图窄而且集中在灰度级的中间,那么就是低对比度图像等等

直方图均衡

如果想要增加像素灰度值的动态范围,从而增强图像对比度,可以使用直方图均衡,直方图均衡会使用灰度变换进行灰度修正,使得变换后的图像的直方图的灰度值分布均匀

那么,现在我们就需要找到一个灰度变换函数s=T(r)(注意:这个函数一定是个单调递增函数),将每一个r映射为s,满足:s服从均匀分布

由于r和s的定义域和值域均为[0, L - 1],则可以得到s的概率分布函数:

p_{s}\left ( s \right )=1/\left ( L-1 \right )

再由概率密度函数的基本性质可得:

p_{s}\left ( s \right )ds=p_{r}\left ( r \right )dr

所以有:

ds=p_{r}\left ( r \right )dr/\left ( p_{s}\left ( s \right ) \right )=\left ( L-1 \right )p_{r\left ( r \right )}dr

两边同时做积分,有:

s=T(r)=(L-1)\int_{0}^{r}p_{r}(w)dw

对于M行N列的数字图像,灰度级出现的概率近似为:

p_{r}(r_{k})=n_{k}/(MN),k=0,1,2,...K-1

代入,可以得到灰度变换函数的离散形式

s_{k}=T(r_{k})=(L-1)\sum_{j=0}^{k}p_{j}(r_{j})=(L-1)/(MN)\sum_{j=0}^{k}n_{j},k=0,1,2,...,K-1

总结:直方图均衡化处理的核心是:非线性拉伸,它可以增强图像的对比度但不改变图像内容,但在均衡过程中,原来频数较小的灰度级会被归入很少几个或一个灰度级内造成细节损失,还需要注意的是高对比度图像经直方图均衡化后,质量可能变差

直方图匹配(规定化)

修改一幅图像的直方图,使得它与另一幅图像的直方图相似,从而突出感兴趣的灰度范围,使图像质量改善就是直方图的匹配,如下图所示

上图来源于csdn博主:薯仔的土小豆 《【数字图像处理】直方图规定化(含实现代码)》感谢大佬!

那么我们如何达到上述的效果呢?很简单

假设:r、z分别表示输入图像和输出图像(或者说规定匹配的那个图像)的灰度级

第一步,我们先让r做均衡化,得到s=T(r)? ? 有小数要四舍五入

第二步,我们让z也做均衡化,得到s'=G(z)? 有小数要四舍五入

由于直方图匹配不应该改变原始图像内容,所以s=s'

那么我们推出:

z=G^{-1}(s)=G^{-1}(T(r))

第三步,找映射关系,我用下面这个图讲解该如何去找:

比如对于输入图像的一个灰度值r1,我们先得到s1,然后再根据s1=s2得到s2,那么这个s2的横坐标就是输出图像的灰度值z1

空间滤波

使用空间域模板进行的图像处理,称为空域滤波。模板本身被称为空域滤波器
输出图像中的每一点为输入图像中某个相关区域像素集的映射

空间滤波的基础过程:

用上述“空间域模板”在待滤波图像上移动,从蓝到红到绿,依次生成输入值14、13、14

如果说图像f是M*N,滤波器w是m*n,其中m=2a+1,n=2b+1,g(x,y)是图像f经过滤波器w之后在点(x,y)的输出图像,w(s,t)是w在点(s,t)的系数,f(x,y)是原图像在(x,y)上的像素值则易得:

g(x,y)=\sum_{s=-a}^{a}\sum_{t=-b}^{b}w(s,t)f(x+s,y+t)

上式实际上是一个相关操作,还有一个操作叫做卷积,和相关非常相似,但略有不同

下面通过一个例子,直观展示两者的区别:

那么,卷积和相关相比,其优势在哪里?卷积的操作符合交换律、结合律、分配律,而相关仅仅符合分配律

低通滤波器

低通滤波器又称平滑滤波器,它可以去除图像中一些不重要的细节,比如噪声,还可以平滑图像

低通滤波器分为线性滤波器和非线性滤波器,下面细说

线性滤波器主要指均值滤波器,其一般形式如下,分为盒装滤波和加权均值滤波

其中n=a+b+c+...+h+i

如果为盒装滤波,则a=b=c=...=h=i?

如果为加权均值滤波,则a~i至少有两个值不同

非线性滤波器又称统计排序滤波器,一般分为三种:中值滤波器、最大值滤波器、最小值滤波器,这三种滤波器非常好理解,以最大值滤波器为例,输出像素就是原像素滤波范围内所有像素的最大像素值

中值滤波器可以消除孤立的亮点或暗点、有效去除椒盐噪声,同时较均值滤波器而言,更好地保留边的锐度和图像的细节

高通滤波器

高通滤波器又称锐化滤波器,它可以突出图像的细节,在超声探测成像中,可以通过锐化改善分别率低、边缘模糊等问题,同时也可以恢复过度钝化、曝光不足的图像

先简单介绍一下图像中的高频信息和低频信息,低频是指灰度变化比较小的像素区域(图像内容),高频是指灰度变化比较大的像素区域(变化或者内部纹理),而高通滤波器就是要削弱低频信息,突出高频信息,这与上述低通滤波器恰恰相反

高通滤波器当中常见的两种形式是一阶微分和二阶微分

那么,先介绍一下这两种微分的数学形式

一阶微分

\frac{\partial f}{\partial x}=f(x+1)-f(x)

二阶微分

\frac{\partial^2 f}{\partial x^2}=f(x+1)+f(x-1)-2f(x)

使用二阶微分锐化图像一般用拉普拉斯算子,其定义式如下:

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

其中第二个等号后面是代入上述二阶微分算式后求得的偏导结果

根据拉普拉斯算子的定义,容易得到拉普拉斯算子的标准滤波模板

如果对上述的模板进行扩展,使得其能够处理对角线的四个像素,可以得到如下模板:

最后是上面两种模板的另一种形式

下面是使用上述两种模板进行锐化的实例,可以发现:经有对角分量的掩膜处理后的图像,比基本掩膜处理后的图像更加锐化

使用一阶微分锐化图像一般用梯度,其定义式如下:

\bigtriangledown f=[(z_{6}-z_{5})^{2}+(z_{8}-z_{5})^{2}]^{1/2}

用上述的式子很难形成滤波的模板,所以我们采取的方式是用绝对值替换

\bigtriangledown f=[G_{x}^{2}+G_{y}^{2}]^{1/2}\approx |G_x|+|G_y|

形成了下面常用的三种算子

1.Roberts交叉梯度算子

\bigtriangledown f\approx |z_9-z_5|+|z_8-z_6|

2.Prewitt梯度算子

\bigtriangledown f\approx |(z_7+z_8+z_9)-(z_1+z_2+z_3)|+|(z_3+z_6+z_9)-(z_1+z_4+z_7)|

3.Sobel梯度算子

\bigtriangledown f\approx |(z_7+2z_8+z_9)-(z_1+2z_2+z_3)|+|(z_3+2z_6+z_9)-(z_1+2z_4+z_7)|

文章来源:https://blog.csdn.net/m0_63222058/article/details/134733784
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。