【无标题】图像增强技术:直方图均衡化、拉普拉斯算子、对数变换与伽马变换
图像增强技术:直方图均衡化、拉普拉斯算子、对数变换与伽马变换
在图像处理领域,图像增强是一种关键技术,用于提升图像的视觉效果和质量。本文将介绍四种常用的图像增强方法:直方图均衡化、拉普拉斯算子、对数变换和伽马变换。我们将使用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倍能力的成长速度,福利待遇也是很好的。 要进入网易云音乐做文案策划,你可以按照以下步骤进…...
【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...
华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...
Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...
什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比
在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...
如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...
