数字图像处理-空间域图像增强-爆肝18小时用通俗语言进行超详细的总结
目录
灰度变换
直方图(Histogram)
直方图均衡
直方图匹配(规定化)
空间滤波
低通滤波器
高通滤波器
本文章讲解数字图像处理空间域图像增强,大部分内容来源于课堂笔记中
灰度变换
图像增强:对图像进行处理,使其更适合于某种特定的应用,有空间域图像增强和变换域图像增强
空间域图像增强是在图像的像素级别进行操作的一种方法。它直接对图像的原始像素值进行处理,常见的空间域增强技术包括直方图均衡化、滤波(如均值滤波、中值滤波)、边缘检测、锐化等
变换域图像增强是在图像变换后进行增强操作的一种技术,它使用数学变换将图像转换到一个不同的域,然后在这个域中对图像进行操作,常见的变换域增强技术包括傅里叶变换、小波变换等,这种处理通常涉及更复杂的数学原理和计算
灰度变换是图像处理中一种常见的操作,其目的是通过对图像的灰度级进行变换,改变图像的对比度、亮度或者强调图像的某些特征。这种变换通常在图像的每个像素上进行,根据像素的原始灰度值应用一个变换函数,得到新的灰度值
通常,灰度变换的一般形式可以表示为:
其中,g(x, y)是变换后的图像灰度值,f(x, y)是原始图像的灰度值,T是变换函数
若将邻域大小限制为1*1(上图的邻域为3*3),则简化为:
r、s分别是f(x,y)、g(x,y)在任意点(x,y)的灰度级
下面介绍一些常见的灰度变换函数:
1.图像反转变换
效果:灰度图像---“黑白颠倒” 彩色图像---补色
用途:适用于增强图像中暗色区域的灰色细节部分
2.对数变换
效果:把窄范围的低灰度级映射到宽范围的灰度级,把宽范围的高灰度级映射到窄范围的高灰度级
应用:压缩图像的动态范围,显示图像的傅里叶频谱图等
3.反对数变换
效果:把宽范围的低灰度级映射到窄范围的灰度级,把窄范围的高灰度级映射到宽范围的高灰度级
4.幂次(伽马)变换
效果:
扩展暗像素值,压缩亮像素值,提升暗区分辨能力
压缩暗像素值,扩展亮像素值,提升亮区分别能力
应用:用于各种图像获取、打印和显示等设备的伽马校正
演示:
一般对于航拍图而言,由于是在空中拍,拍的照片都比较亮,导致整体画面不清晰、观感不舒服,所以可以对其使用值大于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的概率分布函数:
再由概率密度函数的基本性质可得:
所以有:
两边同时做积分,有:
对于M行N列的数字图像,灰度级出现的概率近似为:
代入,可以得到灰度变换函数的离散形式
总结:直方图均衡化处理的核心是:非线性拉伸,它可以增强图像的对比度但不改变图像内容,但在均衡过程中,原来频数较小的灰度级会被归入很少几个或一个灰度级内造成细节损失,还需要注意的是高对比度图像经直方图均衡化后,质量可能变差
直方图匹配(规定化)
修改一幅图像的直方图,使得它与另一幅图像的直方图相似,从而突出感兴趣的灰度范围,使图像质量改善就是直方图的匹配,如下图所示

那么我们如何达到上述的效果呢?很简单
假设:r、z分别表示输入图像和输出图像(或者说规定匹配的那个图像)的灰度级
第一步,我们先让r做均衡化,得到s=T(r) 有小数要四舍五入
第二步,我们让z也做均衡化,得到s'=G(z) 有小数要四舍五入
由于直方图匹配不应该改变原始图像内容,所以s=s'
那么我们推出:
第三步,找映射关系,我用下面这个图讲解该如何去找:
比如对于输入图像的一个灰度值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)上的像素值则易得:
上式实际上是一个相关操作,还有一个操作叫做卷积,和相关非常相似,但略有不同
下面通过一个例子,直观展示两者的区别:
那么,卷积和相关相比,其优势在哪里?卷积的操作符合交换律、结合律、分配律,而相关仅仅符合分配律
低通滤波器
低通滤波器又称平滑滤波器,它可以去除图像中一些不重要的细节,比如噪声,还可以平滑图像
低通滤波器分为线性滤波器和非线性滤波器,下面细说
线性滤波器主要指均值滤波器,其一般形式如下,分为盒装滤波和加权均值滤波
其中n=a+b+c+...+h+i
如果为盒装滤波,则a=b=c=...=h=i
如果为加权均值滤波,则a~i至少有两个值不同
非线性滤波器又称统计排序滤波器,一般分为三种:中值滤波器、最大值滤波器、最小值滤波器,这三种滤波器非常好理解,以最大值滤波器为例,输出像素就是原像素滤波范围内所有像素的最大像素值
中值滤波器可以消除孤立的亮点或暗点、有效去除椒盐噪声,同时较均值滤波器而言,更好地保留边的锐度和图像的细节
高通滤波器
高通滤波器又称锐化滤波器,它可以突出图像的细节,在超声探测成像中,可以通过锐化改善分别率低、边缘模糊等问题,同时也可以恢复过度钝化、曝光不足的图像
先简单介绍一下图像中的高频信息和低频信息,低频是指灰度变化比较小的像素区域(图像内容),高频是指灰度变化比较大的像素区域(变化或者内部纹理),而高通滤波器就是要削弱低频信息,突出高频信息,这与上述低通滤波器恰恰相反
高通滤波器当中常见的两种形式是一阶微分和二阶微分
那么,先介绍一下这两种微分的数学形式
一阶微分
二阶微分
使用二阶微分锐化图像一般用拉普拉斯算子,其定义式如下:
其中第二个等号后面是代入上述二阶微分算式后求得的偏导结果
根据拉普拉斯算子的定义,容易得到拉普拉斯算子的标准滤波模板
如果对上述的模板进行扩展,使得其能够处理对角线的四个像素,可以得到如下模板:
最后是上面两种模板的另一种形式
下面是使用上述两种模板进行锐化的实例,可以发现:经有对角分量的掩膜处理后的图像,比基本掩膜处理后的图像更加锐化
使用一阶微分锐化图像一般用梯度,其定义式如下:
用上述的式子很难形成滤波的模板,所以我们采取的方式是用绝对值替换
形成了下面常用的三种算子
1.Roberts交叉梯度算子
2.Prewitt梯度算子
3.Sobel梯度算子
相关文章:

数字图像处理-空间域图像增强-爆肝18小时用通俗语言进行超详细的总结
目录 灰度变换 直方图(Histogram) 直方图均衡 直方图匹配(规定化) 空间滤波 低通滤波器 高通滤波器 本文章讲解数字图像处理空间域图像增强,大部分内容来源于课堂笔记中 灰度变换 图像增强&…...
【Java】【SQL】DATE_FORMAT函数详解
在实际应用开发中,使用sql语句也属于开发者的一部分,这次来说说DATE_FORMAT函数。 引言:实际上在使用Java开发过程中,有很多业务场景下,都有时间类型的参数参与。前后端进行交互的时候,针对时间类型的格式…...

Pooling方法总结(语音识别)
Pooling layer将变长的frame-level features转换为一个定长的向量。 1. Statistics Pooling 链接:http://danielpovey.com/files/2017_interspeech_embeddings.pdf The default pooling method for x-vector is statistics pooling. The statistics pooling laye…...

Java可变参数(学习推荐版,通俗易懂)
定义 可变参数本质还是一个数组 示例代码 注意事项 1.形参列表中,可变参数只能有一个 2.可变参数必须放在形参列表的最后面 注意是最后面。 name也可以为int类型...

异步编程Promise
文章目录 前言一、关于 Promise 的理解与使用1.相关知识补充区别实例对象和函数对象同步回调异步回调Js中的错误(error)和错误处理 2.promise是什么 二、Promise 原理三、Promise 封装 Ajax四、async 与 await总结 前言 在项目中,promise的使…...
Centos上的默认文本编辑器vi的操作方法积累
打开一个文本后,常见的操作方法积累如下: 001-进入或退出插入模式的方法 按下 i 进入插入模式。 按下 Esc 退出插入模式。 002-进入命令模式的方法: 按下 Esc 退出插入模式,然后输入冒号:进入命令模式。 003-退出vi编辑器的方…...

海康rtsp拉流,rtmp推流,nginx部署转flv集成
海康rtsp拉流,rtmp推流,nginx部署转flv集成 项目实际使用并测试经正式使用无问题,有问题欢迎评论留言 核心后台java代码: try {// FFmpeg命令String command "ffmpeg -re -i my_video.mp4 -c copy -f flv rtmp://localho…...
【Python百宝箱】时序之美:Python 时间序列探秘与创新
时光漫游:Python 时间序列分析全指南 前言 在数字化时代,时间序列数据扮演着关键的角色,从金融到气象再到生产制造。本文将引导你穿越Python丰富的时间序列分析工具,探索从基础统计到机器学习和深度学习的各个层面。无论你是初学…...

flutter开发实战-第一帧布局完成回调实现
flutter开发实战-第一帧布局完成回调实现 在开发中,我们有时候需要在第一帧布局完成后调用一些相关的方法。这里记录一下是实现过程。 Flutter中有多种不同的Binding,每种Binding都负责不同的功能。下面是Flutter中常见的Binding: 这里简单…...

Windows11编译VTM源码生成Visual Studio 工程
VTM介绍 VTM作为H266/VVC标准的官方参考软件,一直用作H266/VVC标准的研究和迭代。关于H2666/VVC标准的介绍、代码、提案、文档等,可以参考H266/VVC编码标准介绍。 官方代码地址: https://vcgit.hhi.fraunhofer.de/jvet/VVCSoftware_VTM&…...

[数据结构进阶 C++] 二叉搜索树(BinarySearchTree)的模拟实现
文章目录 1、二叉搜索树1.1 二叉搜索数的概念1.2 二叉搜索树的操作1.2.1 二叉搜索树的查找1.2.2 二叉搜索树的插入1.2.3 二叉搜索树的删除 2、二叉搜索树的应用2.1 K模型2.2 KV模型 3、二叉搜索树的性能分析4、K模型与KV模型完整代码4.1 二叉搜索树的模拟实现(K模型…...

PostGIS学习教程十四:更多的空间连接
PostGIS学习教程十四:更多的空间连接 在上一节中,我们看到了ST_Centroid(geometry)和ST_Union([geometry])函数,以及一些简单的示例。在本节中,我们将用它们做一些更详细的事情。 提示:写完文章后,目录可以…...

【爬虫软件】孔夫子二手书采集
项目演示 孔网爬取图书信息 目录结构 [ |-- api-ms-win-core-synch-l1-2-0.dll, |-- api-ms-win-core-sysinfo-l1-1-0.dll, |-- api-ms-win-core-timezone-l1-1-0.dll, |-- api-ms-win-core-util-l1-1-0.dll, |-- api-ms-win-crt-conio-l1-1-0.dll, |-- api…...
P8736 [蓝桥杯 2020 国 B] 游园安排
题目描述 L \mathrm{L} L 星球游乐园非常有趣,吸引着各个星球的游客前来游玩。小蓝是 L \mathrm{L} L 星球 游乐园的管理员。 为了更好的管理游乐园,游乐园要求所有的游客提前预约,小蓝能看到系统上所有预约游客的名字。每个游客的名字由一…...

初识Docker-什么是docker
Docker是一个快速交付应用、运行应用的技术 目录 一、Docker 二、运用场景 一、什么是Docker?它的作用是什么? Docker如何解决大型项目依赖关系复杂,不同组件依赖的兼容性问题? Docker允许开发中将应用、依赖、函数库、配置一起打包&…...
maven的pom.xml设置本地仓库
配置 在Maven项目中,您可以在pom.xml文件中配置本地仓库的路径。在pom.xml文件中,您可以添加以下配置来指定本地仓库的路径: <project>...<repositories><repository><id>local-repo</id><url>file://…...
Qt获取屏幕DPI缩放比
获取屏幕缩放比 网上很多代码是用 logicalDotsPerInch 除以 96 来获取屏幕缩放比: // Windows 除以 96,macOS 除以 72 qreal factor window->screen()->logicalDotsPerInch() / 96.0; 当使能了缩放适配后,logicalDotsPerInch 值就不…...

Spring MVC控制层框架
三、Spring MVC控制层框架 目录 一、SpringMVC简介和体验 1. 介绍2. 主要作用3. 核心组件和调用流程理解4. 快速体验 二、SpringMVC接收数据 1. 访问路径设置2. 接收参数(重点) 2.1 param 和 json参数比较2.2 param参数接收2.3 路径 参数接收2.4 json参…...

vmware安装银河麒麟V10高级服务器操作系统
vmware安装银河麒麟V10高级服务器操作系统 1、下载银河麒麟V10镜像2、VMware安装银河麒麟V10高级服务器操作系统2.1、新建虚拟机2.2、安装虚拟机 3、配置银河麒麟V10高级服务器操作系统3.1、安装vmware tools3.2、配置静态IP地址 和 dns3.3、查看磁盘分区3.4、查看系统版本 1、…...
掌握Jenknis基础概念
目录 任务(Jobs) 构建(Builds) 触发器(Triggers) 构建环境(Build Environment): 插件(Plugins): 参数化构建(Paramet…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...

C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...

select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化
缓存架构 代码结构 代码详情 功能点: 多级缓存,先查本地缓存,再查Redis,最后才查数据库热点数据重建逻辑使用分布式锁,二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

阿里云Ubuntu 22.04 64位搭建Flask流程(亲测)
cd /home 进入home盘 安装虚拟环境: 1、安装virtualenv pip install virtualenv 2.创建新的虚拟环境: virtualenv myenv 3、激活虚拟环境(激活环境可以在当前环境下安装包) source myenv/bin/activate 此时,终端…...
绕过 Xcode?使用 Appuploader和主流工具实现 iOS 上架自动化
iOS 应用的发布流程一直是开发链路中最“苹果味”的环节:强依赖 Xcode、必须使用 macOS、各种证书和描述文件配置……对很多跨平台开发者来说,这一套流程并不友好。 特别是当你的项目主要在 Windows 或 Linux 下开发(例如 Flutter、React Na…...

Linux 下 DMA 内存映射浅析
序 系统 I/O 设备驱动程序通常调用其特定子系统的接口为 DMA 分配内存,但最终会调到 DMA 子系统的dma_alloc_coherent()/dma_alloc_attrs() 等接口。 关于 dma_alloc_coherent 接口详细的代码讲解、调用流程,可以参考这篇文章,我觉得写的非常…...

企业大模型服务合规指南:深度解析备案与登记制度
伴随AI技术的爆炸式发展,尤其是大模型(LLM)在各行各业的深度应用和整合,企业利用AI技术提升效率、创新服务的步伐不断加快。无论是像DeepSeek这样的前沿技术提供者,还是积极拥抱AI转型的传统企业,在面向公众…...