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

目录

灰度变换

直方图(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)|

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/293239.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++的面向对象学习(4):对象的重要特性:构造函数与析构函数

文章目录 前言&#xff1a;将定义的类放在不同文件夹供主文件调用的方法一、构造函数与析构函数1.什么是构造函数和析构函数&#xff1f;2.构造函数和析构函数的语法3.构造函数的具体分类和调用方法①总的来说&#xff0c;构造函数分类为&#xff1a;默认无参构造、有参构造、拷…

【扩散模型】9、Imagen | 借用语言模型的能力来实现文生图(NIPS2022 Oral)

文章目录 一、背景二、方法2.1 预训练的语言编码器2.2 扩散模型和 classifier-free guidance 三、效果 论文&#xff1a;Imagen: Photorealistic Text-to-Image Diffusion Models with Deep Language Understanding 官网&#xff1a;https://www.assemblyai.com/blog/how-imag…

Python命名规范中的[单/双][前导/后缀]下划线小结

如图所示 出处 Single and Double Underscores in Python Names

flutter + firebase 云消息通知教程 (android-安卓、ios-苹果)

如果能看到这篇文章的 一定已经对手机端的 消息推送通知 有了一定了解。 国内安卓厂商这里不提都有自己的FCM 可自行查找。&#xff08;国内因无法科学原因 &#xff0c;不能使用谷歌服务&#xff09;只说海外的。 目前 adnroid 和 ios 推送消息分别叫 FCM 和 APNs。这里通过…

金蝶云星空业务对象添加网控设置

文章目录 金蝶云星空业务对象添加网控设置排查是否已经网控设置网控设置 金蝶云星空业务对象添加网控设置 排查是否已经网控设置 网控设置

TrustZone之安全启动与引导失败处理

一、引导和信任链 引导是任何TrustZone系统的关键部分。只有在引导流程中之前运行的所有软件组件都是可信的情况下,才能信任某个软件组件。这通常被称为信任链。下图显示了一个简化的信任链: 在我们的示例中,首先运行的代码是boot ROM。我们必须隐式信任boot ROM,因…

JavaScript高级 函数进阶篇

函数进阶 1、函数的定义和调用 函数声明方式function关键字&#xff08;命名函数&#xff09;&#xff1b;函数表达式&#xff08;匿名函数&#xff09;&#xff1b;new Function()&#xff08;此处的Function()是一个构造函数&#xff09;&#xff1b;var fn new Function(参…

输入框获取焦点

Entry Component struct Test {build() {Row() {Column({ space: 5 }) {//Text("自定义样式").customStyles(20,Color.Yellow).backgroundColor("#36D").padding(10).borderRadius(30)TextInput({placeholder: "获取焦点"}).borderColor(Color.Y…

只更新软件,座椅为何能获得加热功能?——一文读懂OTA

2020年&#xff0c;特斯拉发布过一次OTA更新&#xff0c;车主可以通过这次系统更新获得座椅加热功能。当时&#xff0c;这则新闻震惊了车圈和所有车主&#xff0c;彼时的大家还没有把汽车当作可以“升级”的智能设备。 如今3年过去了&#xff0c;车主对各家车企的OTA升级早已见…

【halcon算子】set_window_param

算子介绍 set_window_param 是 HALCON 的一个操作符&#xff0c;用于设置已打开窗口的不同参数。以下是一些通用的窗口参数&#xff1a; ‘flush’ 启用或禁用在显示每个对象后刷新窗口内容。如果将 ‘flush’ 设置为 ‘false’&#xff0c;则必须调用 flush_buffer 来更新窗口…

Laravel框架使用phpstudy本地安装的composer用Laravel 安装器进行安装搭建

一、首先需要安装Laravel 安装器 composer global require laravel/installer 二、安装器安装好后&#xff0c;可以使用如下命令创建项目 laravel new sys 三、本地运行 php artisan serve 四、 使用Composer快速安装Laravel5.8框架 安装指定版本的最新版本&#xff08;推荐&a…

描述一个bug及定义bug的级别

&#xff08;一&#xff09;描述一个bug 描述一个bug&#xff0c;需要以下几个因素&#xff1a; 故障标题、故障发现的版本、故障类别&#xff08;功能/兼容/界面&#xff09;、故障优先级、故障描述&#xff08;测试环境、测试步骤、预期结果、实际结果&#xff09;。 举个例…