数字图像处理 图像对比度增强算法概览
一、图像对比度增强
图像对比度增强又叫作图像对比度拉伸或者直接称为点运算。图像亮度和对比度调整的目的之一是在合适的亮度上提供最大的细节信息,细节纹理的沟纹越深,图像越清晰。在图像处理中,图像对比度增强是最基本的、原理比较简单却很重要的一类技术。它们能根据用户的要求改变图像数据占据的灰度范围,灰度分布范围越大,图像细节呈现得越清晰,同时对图像辐射分辨率的要求越高。
图像对比度增强以预定的方式改变一幅图像,由于黑白图像对比度的大小主要取决于图像的灰度级级差,因此为了改善对比度过小的黑白图像的识别效果,就需要扩大图像灰度级之间的级差。当前,扩大图像灰度级级差的方法很多,主要有线性增强法、非线性增强法和直方图增强法、自适应增强法(ACE算法)及其各种变体等。
1、线性增强
线性增强法是最常见的对图像的可视化质量进行改善的方法,由于它涉及的算法简单且容易实现,并且效果明显,所以它被看成是图像处理软件中基础而且不可缺少的功能模块。线性增强法主要包括基本线性增强方法及其改善方法。
为了避免基本线性增强算法中个别极限灰度级的不良影响,可以考虑整幅图像的一些统计特性。用图像数据的统计数字特征增强图像的对比度。这种方法就是所谓的统计量算法。
上述两种对比度调整方法适用于对整幅图像的对比度进行调整。若想对图像中某个特殊灰度级范围进行单独处理,则首先需要将原始图像进行灰度分段。我们把针对不同灰度段采用不同变换参数的线性变换叫做分段线性拉伸,也叫做灰级窗变换。
2、非线性增强
灰度分布集中在很窄范围内的图像其对比度很低,不容易分辨其细微的灰度级变化。曝光过度或不足的图像都是低对比度图像。处理这些图像需要借助非线性的方法。当灰度变换函数为非线性函数时的对比度增强方法称为非线性点运算,也称为非线性增强。如指数变换、对数变换以及γ变换等。
伽玛变换又称指数变换或幂次变换,是常用的灰度非线性变换。
对数函数,对数变换可以扩展低值灰度,压缩高值灰度,这样可以使低值灰度的图像细节更容易被看清楚。
3、直方图增强
直方图增强法是一种常用的非线性图像增强方法。这是一类通过修改图像直方图而改善图像质量的方法。比如直方图均衡化、直方图规定化等。
二、实时自适应对比度增强
1、论文地址
Real-Time Adaptive Contrast Enhancement | IEEE Journals & Magazine | IEEE Xplorehttps://ieeexplore.ieee.org/abstract/document/4767166
2、ACE算法实现
1、求图像中每个点局部均值Mean(i,j)与局部方差Dev(i,j)
2、增益函数确定
3、通道融合与颜色空间转换
3、参考代码
from PIL import Image
from PIL import ImageEnhanceimg = Image.open('./001.png')#对比度增强
enh_con = ImageEnhance.Contrast(img)
contrast = 1.5
img_contrasted = enh_con.enhance(contrast)
img_contrasted.save("./001_1.png")# -*- coding: utf-8 -*-
import numpy as np
import cv2def getVarianceMean(scr, winSize):if scr is None or winSize is None:print("The input parameters of getVarianceMean Function error")return -1if winSize % 2 == 0:print("The window size should be singular")return -1 copyBorder_map=cv2.copyMakeBorder(scr,winSize//2,winSize//2,winSize//2,winSize//2,cv2.BORDER_REPLICATE)shape=np.shape(scr)local_mean=np.zeros_like(scr)local_std=np.zeros_like(scr)for i in range(shape[0]):for j in range(shape[1]): temp=copyBorder_map[i:i+winSize,j:j+winSize]local_mean[i,j],local_std[i,j]=cv2.meanStdDev(temp)if local_std[i,j]<=0:local_std[i,j]=1e-8return local_mean,local_stddef adaptContrastEnhancement(scr, winSize, maxCg):if scr is None or winSize is None or maxCg is None:print("The input parameters of ACE Function error")return -1YUV_img=cv2.cvtColor(scr,cv2.COLOR_BGR2YUV) ##转换通道Y_Channel = YUV_img[:,:,0]shape=np.shape(Y_Channel)meansGlobal=cv2.mean(Y_Channel)[0]##这里提供使用boxfilter 计算局部均质和方差的方法
# localMean_map=cv2.boxFilter(Y_Channel,-1,(winSize,winSize),normalize=True)
# localVar_map=cv2.boxFilter(np.multiply(Y_Channel,Y_Channel),-1,(winSize,winSize),normalize=True)-np.multiply(localMean_map,localMean_map)
# greater_Zero=localVar_map>0
# localVar_map=localVar_map*greater_Zero+1e-8
# localStd_map = np.sqrt(localVar_map)localMean_map, localStd_map=getVarianceMean(Y_Channel,winSize)for i in range(shape[0]):for j in range(shape[1]):cg = 0.2*meansGlobal/ localStd_map[i,j];if cg >maxCg:cg=maxCgelif cg<1:cg=1temp = Y_Channel[i,j].astype(float)temp=max(0,min(localMean_map[i,j]+cg*(temp-localMean_map[i,j]),255))# Y_Channel[i,j]=max(0,min(localMean_map[i,j]+cg*(Y_Channel[i,j]-localMean_map[i,j]),255))Y_Channel[i,j]=tempYUV_img[:,:,0]=Y_Channeldst=cv2.cvtColor(YUV_img,cv2.COLOR_YUV2BGR)return dstdef main():img=cv2.imread(input_fn)if img is None:print("The file name error,please check it")return -1print(np.shape(img))dstimg=adaptContrastEnhancement(img,15,10)cv2.imwrite('output.jpg',dstimg)cv2.waitKey(0)return 0input_fn='temp1.jpg'
if __name__ == '__main__':main()
4、参考网址
OpenCV—python 自适应对比度增强(ACE)_51CTO博客_python opencv findcontourshttps://blog.51cto.com/u_13984132/5622638
ACE增强算法(自适应对比度增强)---Adaptive contrast enhancement_沉默羔羊_GUET的博客-CSDN博客_ace算法https://blog.csdn.net/weixin_55984718/article/details/125822143
三、自适应图像对比度增强技术
用于低对比度图像的自适应图像对比度增强技术
https://www.researchgate.net/profile/Shariq-Hussain-3/publication/337026412_An_Adaptive_Image_Contrast_Enhancement_Technique_for_Low-Contrast_Images/links/5dd2ebea4585156b351e8927/An-Adaptive-Image-Contrast-Enhancement-Technique-for-Low-Contrast-Images.pdf?origin=publication_detailhttps://www.researchgate.net/profile/Shariq-Hussain-3/publication/337026412_An_Adaptive_Image_Contrast_Enhancement_Technique_for_Low-Contrast_Images/links/5dd2ebea4585156b351e8927/An-Adaptive-Image-Contrast-Enhancement-Technique-for-Low-Contrast-Images.pdf?origin=publication_detail 基于直方图均衡的技术是用于对比度增强的广泛使用的技术。然而,它面临着对比度过度拉伸,这反过来会导致目标图像的细节丢失和不自然的外观。为了解决这个问题,上面的论文提出了一种新的图像对比度增强方案。
首先,当图像尺寸减小时,图像可能会丢失许多重要信息。为此,将图像从空间域变换到小波域,从而实现多分辨率。第二,伽马校正是一种经过验证的技术,它通过选择最佳伽马值来产生自然外观并保持图像的平均亮度。这里,粒子群优化(PSO)用于选择最佳伽马值。在这项研究中,提出了一种有效的适应度函数来最大化PSO的性能。实验结果表明,所提出的方法在不引入任何伪影的情况下更大程度地提高了图像对比度。
四、加速自适应对比度增强
加速自适应对比度增强(SUACE);基于OpenCV的实时自适应对比度增强技术的实现。
SUACE是一种图像对比度增强算法,最初是为增强红外静脉图像而发明的。但SUACE可用于任何需要实时对比度增强的应用。
GitHub - ravimalb/suace: Speeded Up Adaptive Contrast Enhancement (SUACE);一种基于OpenCV的对比度增强技术。https://github.com/ravimalb/suace
五、其它参考
平衡对比度增强
https://skydance.blog.csdn.net/article/details/119153046https://skydance.blog.csdn.net/article/details/119153046
数字图像处理 图像对比度增强算法概览相关推荐
- 基于熵保持映射先验的快速图像对比度增强算法的python实现
# -*- coding: utf-8 -*- # @FileName: (2区)基于熵保持映射先验的快速图像对比度增强算法 # @Software: PyCharm # @Author : Xu # ...
- 数字图像处理——图像频域增强
图像几何变换 图像频域增强 图像变换的目的 傅里叶变换 空间频率的理解 如何看频谱图 从频域变回空间域 图像频域增强 图像变换是图像频域增强技术的基础,也是变换域分析理论的基础,图像频域增强基于图像信 ...
- 【图像增强】基于matlab萤火虫算法图像对比度增强【含Matlab源码 2142期】
⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[图像增强]基于matlab萤火虫算法图像对比度增强[含Matlab源码 2142期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方 ...
- MUSICA(多尺度图像对比度增强)算法的简要原理及VC实现-1[r]
MUSICA的专利文档:MUSICA_patent - Original document.pdf 算法原理: 图像增强的一般方法是对比度拉伸和直方图均衡,这两种方法对于灰度级过于集中, 还有 ...
- 计算机图像进行滤波的函数,数字图像处理图像滤波.ppt
数字图像处理图像滤波 图像滤波 图像处理中所用到的图像往往含有噪声,需要用图像滤波的方法去除噪声. 内容框架 像素基础知识介绍 算术和逻辑运算 直方图 直方图均衡算法,用于图像锐化. 图像增强基本方法 ...
- 车辆摄像头夜晚场景图像ISP增强算法
车辆摄像头夜晚场景图像ISP增强算法 输入输出接口 Input: (1)图像视频分辨率(整型int) (2)图像视频格式(RGB,YUV,MP4等) (3)摄像头标定参数(中心位置(x,y)和5个畸变 ...
- 【每周CV论文】初学深度学习图像对比度增强应该要读的文章
欢迎来到<每周CV论文>.在这个专栏里,还是本着有三AI一贯的原则,专注于让大家能够系统性完成学习,所以我们推荐的文章也必定是同一主题的. 图像对比度增强,即增强图像中的有用信息,抑制无用 ...
- 数字图像处理图像反转的实现_使用8086微处理器反转16位数字
数字图像处理图像反转的实现 Problem statement: 问题陈述: Write an assembly language program in 8086 microprocessor to ...
- 数字图像处理图像反转的实现_反转8位数字| 8085微处理器
数字图像处理图像反转的实现 Problem statement: 问题陈述: To reverse 8 bits number using 8085 microprocessors. 使用8085微处 ...
最新文章
- Unity 简单示例代码和向导/Unity Aplication Block
- Android_注解+反射代替findViewById()
- Spring MVC-04循序渐进之基于注解的控制器
- 主存储器与CPU的连接
- 团队组建阶段,项目经理要做些什么?
- php正则大小写字母,php 常见email,url,英文大小写,字母数字组合等正则表达式详解...
- touch 修改文件时间戳,或者新建一个不存在的文件 - 副本
- Mybatis逆向工程的pojo实现序列化接口代码
- ROS笔记(4) RoboWare Studio 的安装
- socket解读,http和socket之长连接和短连接区别!
- Java 8 中处理集合的优雅姿势——Stream
- TensorFlow入门(2)矩阵基础
- c++获取子类窗口句柄位置_C++中各种获取窗口句柄的方法
- 【转•科普】为什么Nikola Tesla是迄今为止最伟大的极客(爱迪生啊爱迪生)
- Vue使用Upload上传图片报错:TypeError: Cannot create property 'xxx' on string 'xxxx'
- [NULL @ 000002d5c65b5180] missing picture in access unit
- 双人联机五子棋html代码,双人联机聊天或五子棋游戏设计【高手请进】
- Android学习日记(yzy):SQLite数据库和baseAdapter
- matlab图片白边_matlab 图像保存时去除白边
- 陪玩源码,根据用户需求和功能开发搭建