【无标题】图像增强技术:直方图均衡化、拉普拉斯算子、对数变换与伽马变换
图像增强技术:直方图均衡化、拉普拉斯算子、对数变换与伽马变换
在图像处理领域,图像增强是一种关键技术,用于提升图像的视觉效果和质量。本文将介绍四种常用的图像增强方法:直方图均衡化、拉普拉斯算子、对数变换和伽马变换。我们将使用Python和OpenCV库来实现这些技术,并展示其在增强图像对比度和细节方面的效果。
1. 直方图均衡化
原理
直方图均衡化通过重新分配图像的灰度值,使得图像的灰度分布更加均匀,从而增强图像的对比度。这对于对比度较低的图像特别有效。
Python 实现
import cv2
import numpy as np# 读取彩色图像
image = cv2.imread("Test.jpg")
if image is None:print("打开图片失败,请检查")
else:cv2.imshow("原图像", image)# 分离BGR通道b, g, r = cv2.split(image)# 对每个通道进行直方图均衡化b_eq = cv2.equalizeHist(b)g_eq = cv2.equalizeHist(g)r_eq = cv2.equalizeHist(r)# 合并通道image_eq = cv2.merge([b_eq, g_eq, r_eq])# 显示增强效果cv2.imshow("直方图均衡化图像增强效果", image_eq)cv2.waitKey(0)cv2.destroyAllWindows()
结果
直方图均衡化前后的图像对比显示了图像的对比度和细节有显著提升。
2. 拉普拉斯算子
原理
拉普拉斯算子是一种二阶导数算子,能够增强图像中的边缘和细节。通过与图像卷积,它可以增强局部对比度。
Python 实现
import cv2
import numpy as np# 读取彩色图像
image = cv2.imread("Test.jpg")
if image is None:print("打开图片失败,请检查")
else:cv2.imshow("原图像", image)# 定义拉普拉斯算子kernel = np.array([[0, -1, 0],[-1, 5,-1],[0, -1, 0]], np.float32)# 应用拉普拉斯算子进行图像增强image_enhanced = cv2.filter2D(image, -1, kernel)# 显示增强效果cv2.imshow("拉普拉斯算子图像增强效果", image_enhanced)cv2.waitKey(0)cv2.destroyAllWindows()
结果
拉普拉斯算子增强后的图像显示了图像边缘和细节的显著增强。
3. 对数变换
原理
对数变换通过扩展低灰度值部分的细节,同时压缩高灰度值部分的细节,从而增强图像的对比度,尤其是低灰度部分的细节。
Python 实现
import cv2
import numpy as np# 读取彩色图像
image = cv2.imread("Test.jpg")
if image is None:print("打开图片失败,请检查")
else:# 转换为浮点型并归一化image_log = np.float32(image) / 255# 应用对数变换image_log = cv2.log(1 + image_log)# 归一化到0~255image_log = cv2.normalize(image_log, None, 0, 255, cv2.NORM_MINMAX)# 转换为8位图像image_log = np.uint8(image_log)# 显示增强效果cv2.imshow("原图像", image)cv2.imshow("对数变换图像增强效果", image_log)cv2.waitKey(0)cv2.destroyAllWindows()
结果
对数变换增强后的图像中,低灰度部分的细节得到了显著增强。
4. 伽马变换
原理
伽马变换通过调整图像的灰度值分布来校正图像的对比度。根据不同的伽马值,可以增强低灰度或高灰度部分的细节。
Python 实现
import cv2
import numpy as npdef adjust_gamma(image, gamma=1.0):# 构建查找表invGamma = 1.0 / gammatable = np.array([(i / 255.0) ** invGamma * 255 for i in np.arange(0, 256)]).astype("uint8")# 应用伽马校正return cv2.LUT(image, table)# 读取彩色图像
image = cv2.imread("Test.jpg")
if image is None:print("打开图片失败,请检查")
else:cv2.imshow("原图像", image)# 伽马变换增强gamma = 0.5 # 可以调整此值来增强不同的细节image_gamma = adjust_gamma(image, gamma=gamma)# 显示增强效果cv2.imshow("伽马变换图像增强效果", image_gamma)cv2.waitKey(0)cv2.destroyAllWindows()
结果
伽马变换后,图像的对比度得到显著改善,特别是高灰度部分或低灰度部分的细节增强效果显著。
这些图像增强技术提供了不同的方式来改善图像的视觉效果。通过选择适当的方法,可以有效地增强图像的对比度和细节,适用于不同的应用场景。希望本文能够帮助大家理解并应用这些技术来提升图像质量。
相关文章:
【无标题】图像增强技术:直方图均衡化、拉普拉斯算子、对数变换与伽马变换
图像增强技术:直方图均衡化、拉普拉斯算子、对数变换与伽马变换 在图像处理领域,图像增强是一种关键技术,用于提升图像的视觉效果和质量。本文将介绍四种常用的图像增强方法:直方图均衡化、拉普拉斯算子、对数变换和伽马变换。我…...
自动化专业英语
前言 电子信息、电气工程、自动化专业英语词汇汇总,不定期更新 常用 Asynchronous:异步synchronous:同步notification:通知blade:平面shaft:轴magnetic:磁场的bearing:轴承valve&…...
如何使用 Python 进行数据可视化,比如绘制折线图?
要使用Python进行数据可视化,可以使用matplotlib库来绘制折线图。以下是一个简单的示例代码: 首先,确保已安装matplotlib库。可以使用以下命令安装: pip install matplotlib在Python脚本中导入matplotlib库: import…...
PostgreSQL数据库的事务ID和事务机制
PostgreSQL后续简称PG。PG只读事务不会分配事务ID。为了在共享锁等情况下对事务进行标识,需要一种非持久化的事务ID,即虚拟事务ID,vxid。虚拟事务ID不需要把事务ID持久化到磁盘。因为事务ID是很宝贵的资源,简单的select语句不会申…...
LeetCode 热题 HOT 100 (020/100)【宇宙最简单版】[创作中]
【链表】No. 0142 环形链表 II【中等】👉力扣对应题目指路 希望对你有帮助呀!!💜💜 如有更好理解的思路,欢迎大家留言补充 ~ 一起加油叭 💦 欢迎关注、订阅专栏 【力扣详解】谢谢你的支持&#…...
XML动态sql查询当前时间之前的信息报错
如图,sql语句在数据库里可以正常运行但是再XML文件不可以正常运行,报错。 原因:在XML中小于号"<"是会被默认认定成文一个标签的开始,所以用小于号就会报错。 解决办法: 1.把表达式反过来改成大于号 2…...
EMQX服务器安装MQTT测试
cd /usr/local/develop wget https://www.emqx.com/en/downloads/broker/5.7.1/emqx-5.7.1-el7-amd64.tar.gz mkdir -p emqx && tar -zxvf emqx-5.7.1-el7-amd64.tar.gz -C emqx ./emqx/bin/emqx start 重启 ./emqx/bin/emqx restart http://10.8.0.1:18083/ 账号ad…...
3. 无重复字符的最长子串(滑动窗口)
目录 :题目: 二:代码: 三:结果: 一:题目: 给定一个字符串 s ,请你找出其中不含有重复字符的 最长 子串 的长度。 二:代码: class Solution { …...
用javaagent和javassist实现Arthas的watch功能
一、被监控的服务 spring-boot-demo 1、 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation&q…...
golang 图片转1bit color bmp图片
问题背景 一些打印机需要的都是1bit color bmp图片,但是golang中没有直接的办法,官方image库最低bpp为8,打印机无法使用。 在github上找到了很多资源,都没有直接能转的,突然看到一个老外,可以支持plattered图片转位1bit color bmp图片,然后自己先把图片转位plattered黑…...
Leetcode75-5 反转字符串的元音字母
本质上来说就是反转字符串 一部分需要反转 一部分不动 思路: 1.用String字符串倒序拼接 就是过滤掉不是元音字符 然后把所有的字符(非元音的直接复制过来 元音字母直接从反转的字符串里边复制即可) 2.看了题解发现自己写的啰嗦了 就是一个双指针问题用…...
static关键字在Java中的作用与用法
static关键字在Java中的作用与用法 大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿! 在Java中,static关键字是一个非常重要的概念,用于定义静态成员、方法和内部类。它的使用可…...
50etf期权行权采用什么交割方式 ?
50ETF期权是欧式期,要到期日当天才能行权交制,其交割方式是实物交割买卖双方在到期行权日时需要准备一手交钱,一手收货或是一手交,一手收钱,如果持有期权到达到期日之前,投资者认为行权并不划算,…...
ts-node 报错 ERR_UNKNOWN_FILE_EXTENSION
问题 有个monorepo项目,在最外层一次性打包 3 个项目的脚本已经成功实现,如下: "build:test": "cross-env NODE_ENVtest vite build --mode test && esno ./build/script/postBuild.ts", "build:prod"…...
水域救援设备,保护水域安全_鼎跃安全
季作为一年中最炎热的季节,不仅带来了难耐的高温,也悄然间加剧了水域安全问题的严峻性。这一时期,正值学生群体享受悠长暑假的宝贵时光,他们往往倾向于寻找清凉之地以解酷暑,水域因此成为了不少学生的首选之地。然而&a…...
openmetadata本地编译环境搭建
openmetadata本地编译环境搭建 本地环境: Docker 20 or higher Java JDK 17 Antlr 4.9.2 - sudo make install_antlr_cli JQ - brew install jq (osx) apt-get install jq (Ubuntu) Maven 3.5.x or higher - (with Java JDK 11) Python 3.7, 3.8 or 3.9 Node…...
LeetCode Hard|【25. K 个一组翻转链表】
力扣题目链接 首先我们考虑一种很直观的思路: 遍历链表,统计链表长度遍历链表,进行翻转 对于每一组长度为 K 的节点,进行翻转如果剩余节点不足 K 个,则不进行翻转 连接翻转后的子链表 这里我们用的就是只用 O(1) 额外内…...
python爬虫预备知识三-多进程
python实现多进程的方法:fork、multiprocessing模块创建多进程。 os.fork方法 os.fork方法只适合于unix/linux系统,不支持windows系统。 fork方法调用一次会返回两次,原因在于操作系统将当前进程(父进程)复制出一份…...
【zlm】针对单个设备的音频的编码的设置
目录 结论 原理 测试 结论 为了防止zlm音频配置里设置成opus优先,在国标推流时,调用push时,默认加上codecpcma 如下 https://10.60.100.196:10443/index/api/webrtc?applive&streamtest&typepush&codecpcma 原理 测试 …...
文案人的梦工场,网易入职指南!
网易云对于咱们一些有点文艺的文案策划来说,简直就是梦中情司。 在这里工作锻炼机会很多,也很开拓眼界,能获得相当于在别处3倍能力的成长速度,福利待遇也是很好的。 要进入网易云音乐做文案策划,你可以按照以下步骤进…...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...
佰力博科技与您探讨热释电测量的几种方法
热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...
Java求职者面试指南:计算机基础与源码原理深度解析
Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...
掌握 HTTP 请求:理解 cURL GET 语法
cURL 是一个强大的命令行工具,用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中,cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...
