【数字图像处理】3.对比度增强

news2024/12/29 10:13:09

目录

3.1 灰度直方图

3.2 线性变换

3.3 直方图正规化

3.4 伽马变换

3.5 全局直方图均衡化

3.6 CLAHE


对比度增强是图像增强的一种,它主要解决的是图像的灰度级范围较小造成的对比度较低的问题,目的是将图像的灰度级增强到指定范围,使得图像变清晰。对比度增强:线性变换、分段线性变换、伽马变换、直方图正规化,直方图均衡化,局部自适应直方图均衡化。

3.1 灰度直方图

灰度直方图:是图像灰度级的函数,用来描述每个灰度级在图像矩阵中的像素个数或者占有率。

gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)  # 颜色变换
hist = cv2.calcHist(gray,[6],None,[155],[120,256])  # 原图、通道、掩模、直方图尺寸(x轴)、像素值范围

cv2.calcHist(images, channels, mask, histSize, ranges[, hist[, accumulate ]]) 
channels,是用于计算直方图的通道,这里使用灰度图计算直方图,所以就直接使用第一个通道。
Mask,图像掩模,没有使用则填写None。
histSize,表示这个直方图分成多少份(即多少个直方柱)。
ranges,表示直方图中各个像素的值,[0.0, 256.0]表示直方图能表示像素值从0.0到256的像素。
accumulate,为一个布尔值,用来表示直方图是否叠加。

  

3.2 线性变换

原理:假设输入图像为I,宽为W,高为H,输出图像为O。

线性变换公式定义:


当a=1,b=0时,O是I的一个副本;当a>1, 增大对比度;当a<1, 对比度的减小。b的值影响亮度:b>0,亮度增加,当b<0,亮度减小。

注:不同数据类型的常数对结果的影响(uint8、float64)uint8是一种无符号8位整数数据类型,它的取值范围是0到255,可以表示的整数数量为256个。float64是一种双精度浮点数数据类型,它的取值范围是从正负1.7976931348623157e+308到正负4.9406564584124654e-324,可以表示的浮点数数量非常大。

histI = cv2.calcHist(I,[0],None,[255],[0,256]) # 原图灰度图
# 线性变换
a = 2
O = float(a)*I
# 进行数据截断,大于255的值要截断为255
O[O>255] = 240
# 数据类型转换
O = np.round(O)
O = O.astype(np.uint8)
histO = cv2.calcHist(O,[0],None,[255],[0,255])  # 线性变换之后灰度图

cv2.calcHist(原图,直方图通道,掩膜,直方图大小,像素值范围,输出直方图=None,是否是累积直方图=None)

直方图通道需要计算直方图的通道,可以是一个整数或整数的列表。例如,如果输入图像是一个三通道的彩色图像,则可以选择计算蓝色通道的直方图、绿色通道的直方图、红色通道的直方图或者所有通道的直方图

掩膜指定感兴趣区域,只对指定区域内部分进行直方图统计,如果不需要则输入 None

③直方图的大小(即直方图的区间数),可以是一个列表或元组,表示每个通道的直方图大小,例如 [256, 256, 256] 表示三个通道的直方图大小均为 256 个区间

像素值的范围,可以是一个列表或元组,表示每个通道的像素值范围,例如 [0, 256, 0, 256, 0, 256] 表示三通道的像素值范围均为 0-255。对于单通道灰度图像,可以省略其中一个 0-256 的范围,例如 [0, 256] 表示像素值范围在 0-255 之间(包含 0 和 255)

 

3.3 直方图正规化

假设输入图像为I,宽为W,高为H,将I出现的最小灰度值记为Imin,最大灰度值记为Imax,为使输出图像)的灰度级范围为[Omin,Omax],I和O的映射为:

 直方图正规化就是一种自动选取a和b值得线性变换方法。

 

histI = cv2.calcHist(I,[0],None,[255],[0,256])
# 求I的最小值和最大值
Imax = np.max(I)
Imin = np.min(I)
# 要输出的最小灰度级和最大灰度级
Omin,Omax = 0,255
# 计算a和b的值
a = float(Omax-Omin)/(Imax-Imin)
b = Omin-a*Imax
# 矩阵的线性变换
O = a*I + b
# 数据类型转换
O = O.astype(np.uint8)
histO = cv2.calcHist(O,[0],None,[255],[0,256])

# 直方图正规化
dst = cv2.normalize(img,255,0,cv2.NORM_MINMAX,cv2.CV_8U)

cv2.normalize(src[, dst[, alpha[, beta[, norm_type[, dtype[, mask]]]]]])

①src-输入数组

②dst-输出数组,支持原地运算

③alpha-range normalization模式的最小值

④beta-range normalization模式的最大值,不用于norm normalization(范数归一化)模式。

⑤normType-归一化的类型,可以有以下的取值:

    NORM_MINMAX:数组的数值被平移或缩放到一个指定的范围,线性归一化,一般较常用。

    NORM_INF: 此类型的定义没有查到,根据OpenCV 1的对应项,可能是归一化数组的C-范数(绝对值的最大值)

    NORM_L1 :  归一化数组的L1-范数(绝对值的和)

    NORM_L2: 归一化数组的(欧几里德)L2-范数

⑥dtype-dtype为负数时,输出数组的type与输入数组的type相同;否则,输出数组与输入数组只是通道数相同,而tpye=CV_MAT_DEPTH(dtype).

⑦mask-操作掩膜,用于指示函数是否仅仅对指定的元素进行操作。

 

 

3.4 伽马变换

图像归一化后得到图像I(r,c),伽马变换就是O(r,c)=I(r,c)^γ, 0<=r<H, 0<=c<W, 当γ=1,图像不变。如果图像整体或者感兴趣区域较暗,令0<γ<1可以增强对比度;如果较亮,则令γ>1,降低对比度。实质上是对图像矩阵中的每一个值进行幂运算。

# 图像归一化
f1 = image/255.0
# 伽马变换
gamma = 0.5
O= np.power(f1,gamma)

 

 

3.5 全局直方图均衡化

直方图均衡化是将原始的直方图拉伸,使之均匀分布在全部灰度范围内,从而增强图像的对比度。
直方图均衡化的中心思想是把原始图像的的灰度直方图从比较集中的某个区域变成在全部灰度范围内的均匀分布。旨在使得图像整体效果均匀,黑与白之间的各个像素级之间的点更均匀一点。

全局直方图均衡化(HE):可以更好的提高对比度,但是暗区域的噪声可能会放大,变得清晰,而亮区域可能会损失信息。为了提出该问题,采用CLAHE

直方图均衡化的步骤:
第一步:计算图像灰度直方图

第二步:计算灰度直方图的累加直方图

第三步:根据累加直方图的直方图均衡化原理得到输入灰度级和输出灰度级之间的映射关系

第四步:根据第三步得到的灰度级映射关系,循环得到输出图像的每个像素灰度级。

# 全局直方图均衡化
def equalHist(img, z_max = 255): # z_max = L-1 = 255
    # 灰度图像矩阵的高、宽
    H, W = img.shape
    # S is the total of pixels
    S = H * W

    out = np.zeros(img.shape)
    sum_h = 0
    for i in range(256):
        ind = np.where(img == i)
        sum_h += len(img[ind])
        z_prime = z_max / S * sum_h
        out[ind] = z_prime

    out = out.astype(np.uint8)
    return out

image = cv2.imread('../Img/1686370964745.jpg', cv2.IMREAD_GRAYSCALE)
cv2.imshow('image',image)
image1 = equalHist(image)
image2 = cv2.equalizeHist(image,cv2.CV_8UC1)

 

3.6 CLAHE

CLAHE限制对比度的自适应直方图均衡化原理:
1.将图像划分为不重叠的区域块
2.对每个块分别进行直方图均衡化
3.在没有噪声的情况下,每个小区域的灰度直方图会被限制在一个小的灰度级范围内;在有噪声的情况下,每一个分割的区域执行直方图均衡化后,噪声会放大。为了避免出现噪声这种情况,提出限制对比度,如果直方图的bin超过了提前预设好的“限制对比度”,那么就将超出的部分剪裁并均匀分布到其他的bin,这样就重构了直方图。

 

gray = cv2.cvtColor(src,cv2.COLOR_BGR2GRAY)
clahe = cv2.createCLAHE(clipLimit=5.0,tileGridSize=(8,8))
dst = clahe.apply(gray)

clipLimit:对比度限制值,控制直方图均衡化的增益大小,范围在 0-1 之间。如果小于等于 0 则表示没有对比度限制,直方图均衡化的结果与原始图像相同;

tileGridSize:每个 tile 的大小,需要保证整个图像被 tile 完全覆盖,通常选择一个正方形的 tile。例如 (8, 8) 表示每个 tile 的大小为 8 像素

 

 

 

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

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

相关文章

Unity Metaverse(八)、RTC Engine 基于Agora声网SDK实现音视频通话

文章目录 简介创建应用构建应用场景API调用与回调事件测试 简介 本文介绍如何在Unity中接入声网SDK&#xff0c;它可以应用的场景有许多&#xff0c;例如直播、电商、游戏、社交等&#xff0c;音视频通话是其实时互动的基础能力。 如下图所示&#xff0c;可以在官网中选择Unit…

【Python实用基础整合(三)】儒略日计算、Pandas写Excel文件多Sheet以及datetime64[ns]时间格式处理

一、儒略日计算 儒略日&#xff08;Julian Day&#xff09;是在儒略周期内以连续的日数计算时间的计时法&#xff0c;主要用于天文学领域&#xff0c;SMOKE、CMAQ、CAMx等模型中也有使用。Linux中主要使用IOAPI库中的juldate和jul2greg来进行常规日期和儒略日的相互转化。Pyth…

MongoDB索引详解-03

MongoDB索引 索引是一种用来快速查询数据的数据结构。BTree 就是一种常用的数据库索引数据结构&#xff0c; MongoDB采用BTree 做索引 &#xff0c;索引创建在colletions上。MongoDB不使用索引的查 询&#xff0c;先扫描所有的文档&#xff0c;再匹配符合条件的文档。 使用索…

docker注意事项和https

docker容器安全注意&#xff1a; 尽量别做的事&#xff1a; 尽量不用 --privileged 运行容器授权容器root用户拥有宿主机的root权限 尽量不在 容器中运行 ssh 服务 尽量不用 --network host 使用 host 网络模式运行容器 尽量要做的事&#xff1a; 尽量使用最小化的镜像 尽量…

四六级套路总结

四六级 四级六级作文背多分 四级 英语四级&#xff08;必过12.10&#xff09; 听力&#xff1a; 全出现 头尾出现 &#xff08;直接选&#xff09; 长篇&#xff1a; 勾 8分钟&#xff0c;边勾边默念 念 勾完五句念一遍&#xff0c;十句通读&#xff08;时间够不要慌&#xff…

SpringSecurity从入门到精通

简介 ​ Spring Security 是 Spring 家族中的一个安全管理框架。相比与另外一个安全框架Shiro&#xff0c;它提供了更丰富的功能&#xff0c;社区资源也比Shiro丰富。 ​ 一般来说中大型的项目都是使用SpringSecurity 来做安全框架。小项目有Shiro的比较多&#xff0c;因为相比…

Three.js--》实现3D汽车展厅效果展示

目录 项目搭建 初始化three.js基础代码 加载汽车模型 设置展厅效果 设置GUI面板动态控制车身操作 车门操作与车身视角展示 设置手动点击打开关闭车门 设置图片背景 今天简单实现一个three.js的小Demo&#xff0c;加强自己对three知识的掌握与学习&#xff0c;只有在项目…

【振奋人心】中科院芯片突破,中国ai将逆袭

最近&#xff0c;中国科学院在人工智能芯片领域取得了一项重大突破。中科院计算技术研究所和中国电子科技集团公司第五十三研究所联合研发的新型神经网络加速器芯片&#xff0c;成功实现高效率和低功耗的特性&#xff0c;而且在典型人工智能测试中获取了高达1000倍计算效率的提…

滤波器设计总结

滤波器的主要参数 中心频率&#xff08;Center Frequency&#xff09;&#xff1a;滤波器通带的频率f0&#xff0c;一般取f0&#xff08;f1f2&#xff09;/2&#xff0c;f1、f2为带通或带阻滤波器左、右相对下降1dB或3dB边频点。窄带滤波器常以插损最小点为中心频率计算通带带…

开源大型语言模型(llm)总结

大型语言模型&#xff08;LLM&#xff09;是人工智能领域中的一个重要研究方向&#xff0c;在ChatGPT之后&#xff0c;它经历了快速的发展。这些发展主要涉及以下几个方面&#xff1a; 模型规模的增长&#xff1a;LLM的规模越来越大&#xff0c;参数数量显著增加。这种扩展使得…

11个Java开发者收藏的网站!

导读Java是一种面向对象的编程语言&#xff0c;由Sun Microsystems公司在1995年的时候正式发布。直到今天&#xff0c;Java都一直是最受欢迎的编程语言之一。如今&#xff0c;Java应用于各种各样的技术领域&#xff0c;例如网站开发、Android开发、游戏开发、大数据等等。 在世…

12-代码实战——服务器版表白墙

目录 1.版本一&#xff1a;将数据存到内存中 ①约定前后端交互接口 a.添加表白信息&#xff1a; b.查询表白列表&#xff1a; ②在webapp包下创建message-wall.html前端文件 ③在java包下创建AddMessageServlet后端类 ④在java包下创建MessageListServlet后端类 2.版本…

华为OD机试之乱序整数序列两数之和绝对值最小(Java源码)

乱序整数序列两数之和绝对值最小 题目描述 给定一个随机的整数&#xff08;可能存在正整数和负整数&#xff09;数组 nums&#xff0c;请你在该数组中找出两个数&#xff0c;其和的绝对值(|nums[x]nums[y]|)为最小值&#xff0c;并返回这个两个数&#xff08;按从小到大返回&…

NXP IMX6ULL的官方文档、官方BSP、交叉编译工具链下载

目录 1 官网下载BSP以及相关文档 1.1 文档下载 1.2 NXP 官方uboot和kernel源码下载 1.3 官方评估板硬件资料下载 1.4 官方BSP下载 2 官网SDK下载 3 交叉编译工具链下载及安装 买了块IMX6ULL的开发板&#xff0c;然后移植uboot和kernel的时候&#xff0c;不想直接用开发板…

English Learning - L3 综合练习 7 TED-Living Beyond the Limits 2023.06.14 周三

English Learning - L3 综合练习 7 TED-Living Beyond the Limits 2023.06.14 周三 句 1扩展 go 句 2句 3句 4 - 6句 7-8句 9 - 10句 11扩展 detour 句 12 -13句 14扩展生词 句 15 -16句 17 -18扩展 patchwork 句 18句 19扩展生词 句 20句 21扩展生词 句 22句 23句 24句 25 -26…

国产麒麟配置规范

配置规范问题&#xff1a; 麒麟的加固 1.检查设备密码复杂度策略 /etc/pam.d/password-auth 添加/etc/pam.d/system-authpassword requisite pam_cracklib.so ucredit-1 lcredit-1 dcredit-1在password required pam_cracklib.so 后添加 minlen6 2.检查是否设置口令生存周…

103.实战网页行动呼吁部分-第三节

上节课我们实现的内容是这样的&#xff1a; ● 首先&#xff0c;我们设置一下label的字体样式 .cta-form label {display: block;font-size: 1.6rem;font-weight: 700;margin-bottom: 1.2rem; }● 接着设置输入框的样式 .cta-form input {width: 100%;padding: 1.2rem;font…

以产品为主导的增长揭开 Zipline 十亿美元估值的秘密

如今一提到物流&#xff0c;人们常常会将之定性为红海市场。然而&#xff0c;无人机配送服务的出现却预示着物流行业的变革。从2023年到2026年&#xff0c;全球包裹配送业务的价值预计将以每年53%的速度增长&#xff0c;到2026年底&#xff0c;其价值将超过60亿美元。在摩根斯坦…

CMU15-445 2022 Fall 通关记录 —— Project 1: Buffer Pool

指导书 Project #1 - Buffer Pool | CMU 15-445/645 :: Intro to Database Systems (Fall 2022) — 项目 #1 - 缓冲池 | CMU 15-445/645 :: 数据库系统简介&#xff08;2022 年秋季&#xff09; Task #1&#xff1a;Extendible Hash Table 首先应当了解 可扩展哈希表 的概念…