图像增强算法(直方图均衡化、拉普拉斯、Log、伽马变换)

news2024/12/28 5:23:56

https://www.cnblogs.com/polly333/p/7280764.html

https://www.cnblogs.com/polly333/p/7280764.html

https://www.cnblogs.com/polly333/p/7280764.html

一、图像增强算法原理

         图像增强算法常见于对图像的亮度、对比度、饱和度、色调等进行调节,增加其清晰度,减少噪点等。图像增强往往经过多个算法的组合,完成上述功能,比如图像去燥等同于低通滤波器,增加清晰度则为高通滤波器,当然增强一副图像是为最后获取图像有用信息服务为主。一般的算法流程可为:图像去燥、增加清晰度(对比度)、灰度化或者获取图像边缘特征或者对图像进行卷积、二值化等,上述四个步骤往往可以通过不同的步骤进行实现,后续将针对此方面内容进行专题实验,列举其应用场景和处理特点。

        本文章是一篇综合性文章,算是一篇抛砖引玉的文章,有均衡化、提高对比度、降低对比度的算法。

1.1 基于直方图均衡化的图像增强

       图像对比度增强的方法可以分为两种:直接对比度增强方法,间接对比度增强方法。直方图拉伸和直方图均衡化是常见的间接对比度增强方法。直方图拉伸是利用对比度拉伸对直方图进行调整,扩大前景和背景灰度的差别,这种方法可以通过线性和非线性的方法来实现,其中ps中就是利用此方法提高对比度;直方图均衡化则是利用累积函数对灰度值进行调整,实现对比度的增强。

        直方图均衡化处理原理:将原始图像的灰度图从比较集中的某个灰度区间均匀分布在整个灰度空间中,实现对图像的非线性拉伸,重新分配图像像素值。

算法应用场景:

         1、算法的本质是重新分布图像的像素值,增加了许多局部的对比度,整体的对比度没有进行太大改变,所以应用图像为图像有用数据的对比度相近是,例如:X光图像,可以将曝光过度或曝光不足照片进行更好的显示,或者是背景及前景太亮或太暗的图像非常有用。

        2、算法当然也有缺点,具体表现为:变换后的图像灰度级减少,某些细节减少;某些图像有高峰值,则处理后对比度不自然的过分增强。

算法实现特点:

       1、均衡化过程:直方图均衡化保证在图像像素映射过程中原来的大小关系保持不变,即较亮的区域依旧较亮,较暗的依旧较暗,只是对比度增加,不能明暗颠倒;保证像素映射函数的值域在0和255之间。累积分布函数是单增长函数,并且值域是0到1。

         2、累积分布函数实现过程:

         比较概率分布函数和累积分布函数,前者的二维图像是参差不齐的,后者是单调递增的。直方图均衡化过程中,映射方法是

 

           其中,n是图像中像素的总和, 是当前灰度级的像素个数,L是图像中可能的灰度级总数。

来看看通过上述公式怎样实现的拉伸。假设有如下图像:

 

得图像的统计信息如下图所示,并根据统计信息完成灰度值映射:

 

映射后的图像如下所示:

 

算法伪代码:

        1、计算原始灰度图像的像素概率分布

         2、根据像素概率分布获取图像累积分布函数

        3、根据映射函数获取变换后的图像

算法matlab代码:

 

1.3 基于对象Log变换的图像增强

        对数变换可以将图像的低灰度值部分扩展,显示出低灰度部分更多的细节,将其高灰度值部分压缩,减少高灰度值部分的细节,从而达到强调图像低灰度部分的目的。变换方法:

 

        对数变换对图像低灰度部分细节增强的功能过可以从对数图上直观理解:

 

         x轴的0.4大约对应了y轴的0.8,即原图上0~0.4的低灰度部分经过对数运算后扩展到0~0.8的部分,而整个0.4~1的高灰度部分被投影到只有0.8~1的区间,这样就达到了扩展和增强低灰度部分,压缩高灰度部分的值的功能。

从上图还可以看到,对于不同的底数,底数越大,对低灰度部分的扩展就越强,对高灰度部分的压缩也就越强。

1.4  基于伽马变换的图像增强

        伽马变换主要用于图像的校正,将灰度过高或者灰度过低的图片进行修正,增强对比度。变换公式就是对原图像上每一个像素值做乘积运算:

 

       伽马变换对图像的修正作用其实就是通过增强低灰度或高灰度的细节实现的,从伽马曲线可以直观理解:

 

        γ值以1为分界,值越小,对图像低灰度部分的扩展作用就越强,值越大,对图像高灰度部分的扩展作用就越强,通过不同的γ值,就可以达到增强低灰度或高灰度部分细节的作用。

        伽马变换对于图像对比度偏低,并且整体亮度值偏高(对于于相机过曝)情况下的图像增强效果明显。

二、测试代码

根据上述讲解,本文利用python进行编程实验,代码如下:

转存失败重新上传取消转存失败重新上传取消转存失败重新上传取消转存失败重新上传取消

def preprocess(filename, i):
    image = cv2.imread(filename)
    image_gray = cv2.cvtColor(image,cv2.COLOR_RGB2GRAY)
    
#    直方图均衡增强
    image_equal = cv2.equalizeHist(image_gray)
    r,g,b = cv2.split(image)
    r1 = cv2.equalizeHist(r)
    g1 = cv2.equalizeHist(g)
    b1 = cv2.equalizeHist(b)
    image_equal_clo = cv2.merge([r1, g1, b1])
    
#   拉普拉斯算法增强
    kernel = np.array([ [0, -1, 0],  
                    [-1,  5, -1],  
                    [0, -1, 0] ]) 
    image_lap = cv2.filter2D(image,cv2.CV_8UC3 , kernel)
    
#    对象算法增强
    image_log = np.uint8(np.log(np.array(image) +1))    
    cv2.normalize(image_log, image_log,0,255,cv2.NORM_MINMAX)
#    转换成8bit图像显示
    cv2.convertScaleAbs(image_log,image_log)

#    伽马变换
    fgamma = 2
    image_gamma = np.uint8(np.power((np.array(image)/255.0),fgamma)*255.0)
    cv2.normalize(image_gamma, image_gamma, 0, 255, cv2.NORM_MINMAX)
    cv2.convertScaleAbs(image_gamma, image_gamma)

转存失败重新上传取消转存失败重新上传取消转存失败重新上传取消转存失败重新上传取消

三、实验结果及分析

转存失败重新上传取消转存失败重新上传取消转存失败重新上传取消转存失败重新上传取消转存失败重新上传取消转存失败重新上传取消转存失败重新上传取消转存失败重新上传取消                               (src)                                                                (log)

转存失败重新上传取消转存失败重新上传取消转存失败重新上传取消转存失败重新上传取消转存失败重新上传取消转存失败重新上传取消转存失败重新上传取消转存失败重新上传取消

                            (laplus)                                                                 (gamma)

转存失败重新上传取消转存失败重新上传取消转存失败重新上传取消转存失败重新上传取消                                                                          (equal)

转存失败重新上传取消转存失败重新上传取消转存失败重新上传取消转存失败重新上传取消转存失败重新上传取消转存失败重新上传取消转存失败重新上传取消转存失败重新上传取消

                                  (src)                                                                                            (log)

转存失败重新上传取消转存失败重新上传取消转存失败重新上传取消转存失败重新上传取消转存失败重新上传取消转存失败重新上传取消转存失败重新上传取消转存失败重新上传取消

                                 (laplus)                                                                                  (gamma)

转存失败重新上传取消转存失败重新上传取消转存失败重新上传取消转存失败重新上传取消

                                                                                   (equal)

实验结果分析为:

        1、log函数变化对图像增强来讲,更多是对图像的对比度有所减弱,毕竟函数表现形式为像素值小的变大点,像素值大的变小点,所以对比度减小,亮度增加,正如图像所显示。所以目前看来log函数还是慎用,如果提高函数可以利用分段函数啊。

       2、gamma函数图像增强,这个函数原理可以看出,当r大于1时,可以当做指数函数,小于则为log函数。在试验中我们常用r>1,实现图像对比度增强。从图像中可以看出,黑色更黑,白色更白。

       3、laplus函数图像增强,本质是微分,所以为图像锐化,在图像锐化是明显凸显图像的细节,进而直观上提高图像对比度。

      4、equal函数本质是重新分布图像的像素值,直观我们发现图像颜色发生变化,但对比度是有所提高,当然对于这组的图像的作用,没有体现。

总结:图像增强方法不同,应用领域不同,更好的应用需要掌握灵活多变的方法。

四、参考文章

1、OpenCV图像增强算法实现(直方图均衡化、拉普拉斯、Log、Gamma):本文基本在此基础上进行编程实现,原理可以参考这,同时自己对里面的概念问题进行详解。

2、直方图均衡化原理:本文详细介绍了直方图均衡化的原理,并通过opencv进行函数实现。

3、直方图均衡化详解及编程实现:文中对直方图均衡化的应用特点和缺点进行分析,并根据算法原理通过matlab实现了算法。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LinuxShell编程

Shell编程 Shell的概念介绍 命令解释器 Shell是命令解释器(command interpreter),是Unix操作系统的用户接口,程序从用户接口得到输入信息,shell将用户程序及其输入翻译成操作系统内核(kernel)能够识别的指令&#x…

【音视频处理】H264/H265详解,为什么H264更常用?

大家好,欢迎来到停止重构的频道。 本期我们介绍视频编码格式H264。 H264是视频画面最常用的编码格式了,几乎所有的播放器都支持这个编码格式,当然浏览器也不例外。 我们按这样的顺序讨论H264 : 1、 编码格式的作用 2、 I帧…

4:File类与IO流

文章目录 File类1:引入:2:对文件进行操作3:对目录/文件夹进行操作 IO流1:引入:2:字符输入 / 出流FileReader 与 FileWriter3:用try - catch - finally 处理异常4:几个常见…

易趋受邀出席CIAS 2023中国数智汽车峰会

2023年5月18日-19日,由中国电子商会、中国汽车信息化推进产业联盟、信息侠联合主办,上海市交通工程协会、 浙江省数字经济联合会联合支持的CIAS 2023第二届中国数智汽车峰会在杭州千岛湖顺利召开。易趋受邀出席此次会议,并发表了主题演讲。 &…

软件架构: 一切皆有代价

软件架构必须随着业务发展而演进,否则就会成为业务的阻碍。但架构本身在发展过程中很容易逐渐腐化,堆积大量技术债务,因此在软件发展过程中始终保持架构愿景非常重要。原文: Software architecture — Paying the Price for Neglecting it 在…

数组的玩法比我以为的要多

数组是最基本的数据结构,关于数组的面试题也屡见不鲜,本文罗列了一些常见的面试题,仅供参考。目前有以下18道题目。 数组求和 求数组的最大值和最小值 求数组的最大值和次大值 求数组中出现次数超过一半的元素 求数组中元素的最短距离 求…

2023.05.28 homework

求三角形最长的边的长度 1)任意两边之和大于第三边; 2)任意两边之差小于第三边; 已知最短边13cm,其他两边肯定都等于大于13cm,两边只差肯定要小于13cm;简单推导就是枚举呗。 13cm 14cm 33cm&a…

web --- javascript(01)-- 介绍、变量和数据类型

JavaScript w3c:三层分离 结构层:HTML 表示层:CSS 行为层:JavaScript 介绍 (1)作用: 数据校验网页特效数据交互服务器端编程(NodeJS) (2)javas…

【PS小贴士】PS项目交货(CNS0/VL02N)-和销售订单交货(VL01N/VL02N)的区别点

目前一家公司在进行企业信息化建设,作为PS顾问有幸参与到其中。真是做的项目越来越多,经历的人越来越多,每个项目的感触也不同。不论是方案,还是项目上一起努力的小组成员、以及项目组顾问。哈哈哈哈哈哈哈哈...... 同样&#xf…

Linux 系统上的库文件生成与使用

1.库文件 库是一组预先编译好的方法的集合。Linux系统存储的库的位置一般在:/lib 和 /usr/lib。 在 64 位的系统上有些库也可能被存储在/usr/lib64 下。库的头文件一般会被存储在 /usr/include 下或其子目录下。 库有两种,一种是静态库,其…

分享几个国内免费可用的ChatGPT镜像【无需梯子】

文章目录 1.什么是ChatGPT2.ChatGPT的基础技术3.ChatGPT工作原理4.ChatGPT应用场景5.ChatGPT局限性6.ChatGPT的未来发展7.国内免费ChatGPT镜像写在最后 ChatGPT国内能用吗:ChatGPT在国内是无法使用的。你肯定要问我怎样才能体验到ChatGPT的神奇魔力呢?文…

【Spring】— 映射文件

映射文件 映射文件是MyBatis框架中十分重要的文件。在映射文件中&#xff0c;<mapper>元素是映射文件的根元素&#xff0c;其他元素都是它的子元素。映射文件中的主要元素如下所示。 <mapper><!--映射查询语句&#xff0c;可自定义参数&#xff0c;返回结果集…

Python日期带时区转换工具类总结

文章目录 1.背景2. 遇到的坑3. 一些小案例3.1 当前日期、日期时间、UTC日期时间3.2 昨天、昨天UTC日期、昨天现在这个时间点的时间戳3.3 日期转时间戳3.4 时间戳转日期3.5 日期加减、小时的加减 4. 总结5. 完整的编码 1.背景 最近项目是国际项目&#xff0c;所以需要经常需要用…

docker 解析DNS失败

问题现象&#xff1a; 我之前在docker里部署的容器&#xff0c;今天突然访问不了了&#xff0c;一开始我以为是容器的问题&#xff0c;将容器restart&#xff0c;销毁重建&#xff0c;都没有解决。 最后准备重启docker service&#xff0c;在重启之前&#xff0c;看了一眼dock…

接口自动化测试,从常规到动态再到全局断言,Postman让你居家必备!

目录 引言&#xff1a; 常规断言 动态参数断言 全局断言 总结 引言&#xff1a; Postman是一款非常流行的API接口测试工具&#xff0c;它以其易用性和强大的功能得到了广泛的应用。其中Postman断言功能是我们进行接口自动化测试时非常关键的一个环节。在接口测试中&#…

【正则入门】

语法 . &#xff08;点&#xff09; 匹配除换行符&#xff08;\n、\r&#xff09;之外的任何单个字符&#xff0c;相等于 [^\n\r]。 [\s\S] 匹配所有。\s 是匹配所有空白符&#xff0c;包括换行&#xff0c;\S 非空白符&#xff0c;不包括换行。 \d [0-9] \D 非数字&#xff1…

CISCN2023-Crypto

CISCN2023-Crypto 基于国密SM2算法的密钥分发可信度量Sign_in_passwdBB84badkey1 基于国密SM2算法的密钥分发 非预期&#xff0c;直接search能找到明文 curl -d "nameha&schoolhznu&phone110" http://123.56.244.196:30817/api/logincurl -d "id984ae…

【线程池】实现多线程并发定时任务

文章目录 一、为什么需要配置多线程定时任务二、单线程定时任务三、多线程定时任务 一、为什么需要配置多线程定时任务 springboot中通过注解 Scheduled 注解的方法都是一个定时执行的任务, 默认都是单线程的,就算是多个定时任务也是在同一个单线程(scheduled-1)中运行, 如果其…

离线版Gerber查看器+PCB/PCBA检测神器新功能!

一、CAM离线版——华秋CAM│专业Gerber查看器 公司电脑不能连接网络&#xff1f;不慌&#xff0c;我们完全离线且无需账号登录&#xff01; 磁盘空间不够拒绝下载&#xff1f;别怕 &#xff0c;我们安装包仅20M可随便分享&#xff01; 不会使用CAM350导入Gerber&#xff1f;没事…

APP开发死亡潮来临 小程序是否会取而代之?

移动互联网的发展&#xff0c; APP开发行业也迎来了它的大时代。据有关数据显示&#xff0c;2017年上半年国内新增的 App数量达到了创纪录的449万款&#xff0c;用户使用时长超过了200亿分钟。移动互联网已成为名副其实的“流量”产业&#xff0c;也因此诞生出一大批 APP开发公…