当前位置: 首页 > news >正文

opencv-python图像增强三:图像清晰度增强

文章目录

  • 一、简介:
  • 二、图像清晰度增强方案:
  • 三、算法实现步骤
    • 3.1高反差保留实现
    • 3.2. usm锐化
    • 3.3 Overlay叠加
  • 四:整体代码实现
  • 五:效果


一、简介:

你是否有过这样的烦恼,拍出来的照片总是不够清晰,显得雾蒙蒙的?其实,通过一些简单的技巧,我们可以让这些模糊的照片焕发新生。首先,让我们来了解一下什么是图像清晰度。简单来说,图像清晰度就是指图片中的细节是否清晰可见。一张清晰的照片,细节丰富,边缘分明;而一张模糊的照片,则细节丢失,看起来不够锐利。图像清晰度增强就是指通过一系列算法和技术手段提高图像的视觉效果,使图像中的细节更加清晰,边缘更加锐利,整体图像更加鲜明。

二、图像清晰度增强方案:

二、图像清晰度增强方案:

为了提升图像的清晰度,我们制定了以下增强方案:
高反差保留:首先,我们对原图进行高反差保留处理,这一步骤旨在保留图像中的高频细节,如边缘和纹理,同时过滤掉低频的背景噪声。通过这种方式,图像的细节得到强化,而不会引入额外的噪声。
USM锐化:接着,我们对图像进行USM(Unsharp Masking)锐化处理。USM锐化是一种常用的图像增强技术,它通过增强图像的边缘对比度来提高图像的清晰度。这一步骤将进一步突出图像的细节,使图像看起来更加锐利。
细节图与原图叠加:最后,我们将经过USM锐化处理的细节图与原始图像进行叠加。这一步骤通过合并原始图像的色彩信息和锐化后的细节信息,实现图像清晰度的整体提升。
具体实施步骤如下
对原图进行小核高斯模糊处理,这一步骤有助于进一步去除图像上的噪声,为后续的细节保留和锐化打下良好的基础。对去噪后的图像应用高反差保留,以保留图像中的细节信息。
对保留细节后的图像进行USM锐化,以增强图像的边缘和细节。将锐化后的细节图与原始图像进行叠加,通过叠加处理,最终的图像既保留了原始色彩,又增强了清晰度和细节。
通过上述方案,我们可以有效地提升图像的清晰度,使图像更加符合视觉审美和实际应用的需求。

三、算法实现步骤

3.1高反差保留实现

高反差保留是一种图像处理技术,它的主要目的是强化图像中的细节和边缘,同时尽量保持图像的整体亮度不变。简而言之,高反差保留的过程如下:
识别反差:首先,算法会分析图像中的每个像素与其周围像素之间的反差程度。反差通常是通过计算像素值的梯度来确定的,梯度越大,反差就越明显。
保留反差:在识别出反差之后,算法会将这些反差信息保留下来。具体来说,就是将那些反差较大的像素点保留其原始值,而将反差较小的像素点(通常是图像的平坦区域)转换为接近中间灰度的值。
融合图像:最后,将经过反差保留处理的图像与原始图像进行融合。这样,原始图像中的低反差区域(如平滑过渡的色彩或亮度区域)会保持不变,而高反差区域(如边缘和细节)则会得到增强。
高反差保留的效果是使图像的细节更加突出,而不会显著改变图像的整体色调。这种技术在图像增强、锐化处理以及艺术效果制作中非常常用

代码如下:


def high_reserve(img, ksize, sigm):# 将输入图像转换为浮点数,以便进行后续的数学运算img = img * 1.0# 使用高斯模糊对图像进行模糊处理,ksize是高斯核的大小,sigm是高斯核的标准差gauss_out = cv2.GaussianBlur(img, (ksize, ksize), sigm)# 计算原始图像与高斯模糊后的图像之差,然后加上128以调整亮度img_out = img - gauss_out + 128# 将图像数据缩放到0到1的范围内,便于后续处理img_out = img_out / 255.0# 饱和处理,防止像素值超出0到1的范围# 创建一个掩码,标记小于0的像素mask_1 = img_out < 0# 创建一个掩码,标记大于1的像素mask_2 = img_out > 1# 将小于0的像素值设置为0img_out = img_out * (1 - mask_1)# 将大于1的像素值设置为1img_out = img_out * (1 - mask_2) + mask_2 # 返回处理后的图像return img_out

3.2. usm锐化

USM(Unsharp Masking,非锐化掩蔽)锐化是一种常用的图像处理技术,用于增强图像的边缘和细节,使图像看起来更加清晰和鲜明。以下是USM锐化的基本原理和步骤:
原理:USM锐化的核心思想是先模糊原图像,然后从原图中减去这个模糊的版本,最后将得到的边缘增强结果与原图混合,以此来提升图像的清晰度。
步骤:
1.高斯模糊:首先,对原始图像应用高斯模糊。这个过程会创建一个模糊版本的图像,模糊的程度由用户设定的半径(radius)参数控制。
2. 边缘提取:接下来,从原始图像中减去模糊的图像。这个操作会突出图像中的边缘和细节,因为这些区域在减法操作后会有较高的对比度。
3. 混合:最后,将提取出的边缘信息与原始图像进行混合。混合的比例由用户设定的数量(amount)参数控制,这个参数决定了锐化效果的强度。

代码如下:

def usm(img, number):# 使用高斯模糊对原始图像进行模糊处理,(0, 0)表示核大小自动根据sigma值计算# number参数是高斯核的标准差sigma,控制模糊的程度blur_img = cv2.GaussianBlur(img, (0, 0), number)# 使用addWeighted函数对原始图像和模糊图像进行混合# 参数1.5和-0.5分别是原始图像和模糊图像的权重,0是加到混合结果上的常数# 这里的权重设置使得混合结果中原始图像的边缘和细节得到增强usm = cv2.addWeighted(img, 1.5, blur_img, -0.5, 0)# 返回USM锐化处理后的图像return usm

3.3 Overlay叠加

Overlay”(叠加)是一种混合模式,它用于将两个图层的内容以特定的方式混合在一起,创造出一系列视觉效果。叠加混合模式通常用于增强图像的对比度和饱和度,同时保留底层图层的细节。
叠加混合模式的效果取决于底层图层的亮度。它根据底层图层的亮度来调整混合图层(即顶层图层)的颜色,遵循以下规则:
1. 当底层图层像素的亮度低于50%时:
叠加混合模式会将顶层图层的颜色与底层图层进行“乘法”混合。这会导致底层较暗的区域变得更暗,从而增强对比度。
2. 当底层图层像素的亮度高于50%时:
叠加混合模式会将顶层图层的颜色与底层图层进行“屏幕”混合。这会导致底层较亮的区域变得更亮,同样增强对比度。

代码实现:

def Overlay(target, blend):# 创建一个布尔型掩码,其中blend小于0.5的像素位置为True,否则为Falsemask = blend < 0.5# 使用掩码对图像进行分区域处理# 当掩码为True时(即blend小于0.5),使用公式2 * target * blend计算混合结果# 当掩码为False时(即blend大于等于0.5),使用公式1 - 2 * (1 - target) * (1 - blend)计算混合结果img = 2 * target * blend * mask + (1 - mask) * (1 - 2 * (1 - target) * (1 - blend))# 返回处理后的图像return img

注:
2 * target * blend * mask:
mask 是一个布尔数组,它表示混合图层 blend 中像素值小于0.5的位置。
当 mask 为 True 时,即 blend 的像素值小于0.5,这个部分会被激活。
2 * target * blend 实现了“乘法”混合效果,这会使得较暗的区域变得更暗,增强对比度。
(1 - mask):
这是一个反掩码,它表示混合图层 blend 中像素值大于等于0.5的位置。
当 mask 为 False 时,即 blend 的像素值大于等于0.5,这个部分会被激活。
(1 - 2 * (1 - target) * (1 - blend)):
这个表达式实现了“屏幕”混合效果,当 blend 的像素值大于等于0.5时应用。
(1 - target) 和 (1 - blend) 分别计算了目标图层和混合图层像素值的补数。
2 * (1 - target) * (1 - blend) 实现了补数的“乘法”混合,然后通过 1 - 取反,得到“屏幕”混合效果,这会使得较亮的区域变得更亮。

四:整体代码实现

import cv2
import numpy as npdef high_reserve(img,ksize,sigm):img = img * 1.0gauss_out = cv2.GaussianBlur(img,(ksize,ksize),sigm)img_out = img - gauss_out + 128img_out = img_out/255.0# 饱和处理mask_1 = img_out  < 0mask_2 = img_out  > 1img_out = img_out * (1-mask_1)img_out = img_out * (1-mask_2) + mask_2return img_outdef usm(img ,number):blur_img = cv2.GaussianBlur(img, (0, 0), number)usm = cv2.addWeighted(img, 1.5, blur_img, -0.5, 0)return usm
def Overlay(target, blend):mask = blend < 0.5img = 2 * target * blend * mask + (1 - mask) * (1 - 2 * (1 - target) * (1 - blend))return imgimg = cv2.imread(r'F:\traditional_vison\R-C.png')
img_gas = cv2.GaussianBlur(img,(3,3),1.5)
# img = cv2.resize(img,(640,480))
# print(img.shape)
high = high_reserve(img_gas,11,5)
usm1 = usm(high,11)
add = (Overlay(img_gas/255,usm1)*255).astype(np.uint8)cv2.imshow("de_blur",add)
cv2.imshow("img_gas",img_gas)
# add=cv2.medianBlur((add*255).astype(np.uint8),3)
# cv2.imwrite(r"E:\PS\R-C (1).jpg",add)
cv2.waitKey(0)

五:效果

左侧为原始图像,右侧为增强后的图像
在这里插入图片描述

相关文章:

opencv-python图像增强三:图像清晰度增强

文章目录 一、简介&#xff1a;二、图像清晰度增强方案&#xff1a;三、算法实现步骤3.1高反差保留实现3.2. usm锐化3.3 Overlay叠加 四&#xff1a;整体代码实现五&#xff1a;效果 一、简介&#xff1a; 你是否有过这样的烦恼&#xff0c;拍出来的照片总是不够清晰&#xff…...

第130天:内网安全-横向移动PTH哈希PTT 票据PTK密匙Kerberos密码喷射

环境搭建 这里这个环境继续上一篇文章搭建的环境 案例一&#xff1a;域横向移动-PTH-Mimikatz&NTLM 什么是pth&#xff1f; PTH Pass The Hash &#xff0c;通过密码散列值 ( 通常是 NTLM Hash) 来进行攻击。在域环境中&#xff0c;用户登录计算机时使用的域账号&…...

SB3045LFCT-ASEMI无人机专用SB3045LFCT

编辑&#xff1a;ll SB3045LFCT-ASEMI无人机专用SB3045LFCT 型号&#xff1a;SB3045LFCT 品牌&#xff1a;ASEMI 封装&#xff1a;TO-220F 批号&#xff1a;最新 最大平均正向电流&#xff08;IF&#xff09;&#xff1a;30A 最大循环峰值反向电压&#xff08;VRRM&…...

RPA财务机器人是什么,RPA的具体应用场景有哪些?| 实在RPA研究

数字化转型关键期&#xff0c;越来越多的人工智能及超自动化技术在企业财务工作中得以普及应用&#xff0c;以提升财务工作效率&#xff0c;促进财务部门实现 RPA财务机器人是什么&#xff1f; RPA&#xff0c;即机器人流程自动化&#xff08;Robotic Process Automation&#…...

滑动窗口 | Java | (hot100) 力扣 3

力扣 3.无重复字符的最长子串 暴力法&#xff1a;双层for循环&#xff0c;i-j的字符查重 滑动窗口&#xff1a;因为这题被分在这个类别里&#xff0c;那么已知要用滑动窗口&#xff0c;思路应该是什么。 反正我想不出来…… 看了别人的题解写出来的出错点&#xff1a;特别容易…...

【产品经理】竞品分析怎么理解?拆解一下

什么叫竞品&#xff1f;&#xff08;研究的对象&#xff09; 竞品看你怎么理解&#xff0c;有时候不一定是你的竞争对手&#xff0c;有可能是其他行业也做了这个功能&#xff0c;那你也可以学习&#xff0c;有类似的功能或者策略都可以学习&#xff0c;不过这个可能在管理学上…...

合规性导航:处理爬虫数据用于机器学习的最佳实践

在数据驱动的时代&#xff0c;机器学习已成为企业和研究者的重要工具。然而&#xff0c;使用爬虫技术抓取的数据进行机器学习时&#xff0c;合规性问题不容忽视。本文将详细探讨在使用爬虫抓取的数据进行机器学习时可能遇到的合规性问题&#xff0c;并提供相应的最佳实践。 一…...

spring中使用到的设计模式有哪些

Spring 框架是一个高度模块化和灵活的框架&#xff0c;广泛使用了各种设计模式来实现其核心功能和架构。这些设计模式帮助 Spring 提供了高可配置性、可扩展性和可维护性。以下是 Spring 框架中使用到的一些关键设计模式&#xff1a;...

splitcontainer控件设置固定大小

要设置SplitContainer控件以固定的大小&#xff0c;可以通过设置SplitContainer的FixedPanel属性来实现。您还需要设置IsSplitterFixed属性为true来锁定分割条的大小&#xff0c;并且通过设置SplitterWidth或SplitterLength属性来调整分割条的宽度或高度。 以下是一个示例代码…...

最近在写的支付模块

最近再写支付模块就到处借鉴 旨在回顾一下。 1.确认订单功能 使用场景是&#xff1a;用户在选择好购物车后&#xff0c;或者是直接选择商品后&#xff08;选择商品封装为购物车&#xff09; 这样做是根据尚硅谷来学习的 目前需要这些属性&#xff0c;原因是在确认订单页面后…...

解决域名加别名后再代理或者映射到fastadmin项目

如果遇到微应用不想再添加或者不方便添加单独的二级域名时&#xff0c;就需要用到代理或者映射来进入到我们的微应用项目中。 可以修改route.php路由文件的下面这个参数 __alias__ > [别名 > 模块/控制器] 如图 然后再修改config.php文件里面的view_replace_str参数…...

Armv9.5架构新增的关键扩展--精简版

Armv9.5架构扩展是对Armv9.4的扩展。它增加了强制性和可选的架构特性。有些特性必须一起实现。实现是符合Armv9.5规范,需要满足以下条件: 符合/兼容Armv9.4规范包含所有Armv9.5架构的强制性特性。符合Armv9.5规范的实现还可以包括: Armv9.5的可选特性以下是arm9.5架构中关键…...

STM32 GPIO 模块

B站视频地址&#xff1a;芯片内部GPIO模块细节 引脚 将 STM32 芯片&#xff0c;类比为【大脑】 而旁边的引脚&#xff0c;类比为【神经】 通过引脚&#xff0c;使得&#xff0c;STM32&#xff0c;可以和外部世界&#xff0c;进行交流 比如&#xff0c;当我们和别人说话时&am…...

网络剪枝——network-slimming 项目复现

目录 文章目录 目录网络剪枝——network-slimming 项目复现clone 存储库Baselinevgg训练结果 resnet训练结果 densenet训练结果 Sparsityvgg训练结果 resnet训练结果 densenet训练结果 Prunevgg命令结果 resnet命令结果 densenet命令结果 Fine-tunevgg训练结果 resnet训练结果 …...

Spring 懒加载的实际应用

引言 在 Spring 框架中&#xff0c;懒加载机制允许你在应用程序运行时延迟加载 Bean。这意味着 Bean 只会在第一次被请求时才实例化&#xff0c;而不是在应用程序启动时就立即创建。这种机制可以提高应用程序的启动速度&#xff0c;并节省内存资源。 Spring 的懒加载机制 懒…...

PyQT 串口改动每次点开时更新串口信息

class MainWindow(QWidget, Ui_Form):def __init__(self):super().__init__(parentNone)self.setupUi(self)self.comboBox.installEventFilter(self) # 加载事件过滤器self.comboBox.addItems(get_ports())def eventFilter(self, obj, event): # 定义事件过滤器if isinstance(o…...

三级_网络技术_19_路由器的配置及使用

1.在Cisco路由器上配置DHCP服务&#xff0c;使得客户端可以分配到的地址范围是222.28.71.2-222.28.71.200地址租用时间是2小时30分钟&#xff0c;不记录地址冲突日志默认路由是222.28.71.1&#xff0c;分配的dns服务器地址是222.28126.27和222.28.126.26。以下配置完全正确的是…...

【STM32 Blue Pill编程】-STM32CubeIDE开发环境搭建与点亮LED

开发环境搭建与点亮LED 文章目录 开发环境搭建与点亮LED1、STM32F103C8T6及STM32 Blue Pill 介绍2、下载并安装STM32CubeIDE3、编程并点亮LED3.1 在Stm32CubeIDE中编写第一个STM32程序3.1.1 创建项目3.1.2 设备配置3.1.2.1 系统时钟配置3.1.2.2 系统调试配置3.1.2.3 GPIO配置3.…...

【数据结构】六、图:4.图的遍历(深度优先算法DFS、广度优先算法BFS)

三、基本操作 文章目录 三、基本操作1.图的遍历1.1 深度优先遍历DFS1.1.1 DFS算法1.1.2 DFS算法的性能分析1.1.3 深度优先的生成树和生成森林 1.2 广度优先遍历BFS1.2.1 BFS算法1.2.2 BFS算法性能分析1.2.3 广度优先的生成树和生成森林 1.3 图的遍历与图的连通性 1.图的遍历 图…...

29、号外!号外!ERA5再分析数据下载方式更新啦

文章目录 1. 前言2. 账号注册与协议签署2.1 账号注册2.2 签署CDS-Beta使用条款2.3 更新.cdsapi文件 3. 常见问题与解决方法&#xff08;持续更新中&#xff09;3.1 问题1&#xff1a;更新完.cdsapi文件之后&#xff0c;原有下载代码不可以使用3.2 问题2: RuntimeError: 403 Cli…...

智能识别,2024年SD卡数据恢复软件的智能进化

除了手机之外现在有不少的设备还是依靠SD卡来存储数据&#xff0c;比如相机、摄像头、无人机等。有的时候会因为一些意外的情况导致数据丢失&#xff0c;那是真的丢失了吗&#xff1f;大部分情况还是可以依靠sd卡数据恢复工具来找回这些“消失”的数据哦。 1.福昕数据恢复 链…...

浙大数据结构慕课课后题(04-树5 Root of AVL Tree)

题目要求&#xff1a; AVL 树是一种自平衡的二叉搜索树。在 AVL 树中&#xff0c;任何节点的两个子子树的高度最多相差一;如果在任何时候它们相差不止一&#xff0c;则进行重新平衡以恢复此属性。图 1-4 说明了旋转规则。 图1 图2 图3 图4 现在给定一系列插入&#xff0c;您应该…...

Golang | Leetcode Golang题解之第331题验证二叉树的前序序列化

题目&#xff1a; 题解&#xff1a; func isValidSerialization(preorder string) bool {n : len(preorder)slots : 1for i : 0; i < n; {if slots 0 {return false}if preorder[i] , {i} else if preorder[i] # {slots--i} else {// 读一个数字for i < n &&…...

zdppy+vue3+onlyoffice文档管理系统项目实战 20240812上课笔记

遗留问题 1、增加新建和导入按钮&#xff0c;有按钮了&#xff0c;但是还没有完善&#xff0c;图标还不对&#xff0c;需要解决 2、登录功能 3、用户管理 4、角色管理 5、权限管理 6、分享功能 解决新建和导入的图标问题 解决代码&#xff1a; <a-button type"prim…...

怎么将mov视频转换成mp4?将mov视频转换成mp4的方法

怎么将mov视频转换成mp4&#xff1f;由于mov格式通常与苹果设备兼容性较好&#xff0c;而mp4则更广泛地支持于各种播放器和设备中&#xff0c;因此将mov转换为mp4可以确保视频在更多场景下能够流畅播放。通过这种转换&#xff0c;你可以确保视频在各种平台和设备上的兼容性&…...

大数据技术——实战项目:广告数仓(第五部分)

目录 第9章 广告数仓DIM层 9.1 广告信息维度表 9.2 平台信息维度表 9.3 数据装载脚本 第10章 广告数仓DWD层 10.1 广告事件事实表 10.1.1 建表语句 10.1.2 数据装载 10.1.2.1 初步解析日志 10.1.2.2 解析IP和UA 10.1.2.3 标注无效流量 10.2 数据装载脚本 第9章 广…...

计算机毕业设计 家电销售展示平台 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…...

C# 根据MySQL数据库中数据,批量删除OSS上的垃圾文件

protected void btndeleteTask_Click(object sender, EventArgs e){//获取标识为已删除数据&#xff0c;一次加载500条int countlocks _goodsItemsApplication.CountAllNeedExecuteTask();int totalPagelocks (countlocks 500 - 1) / 500;//分批次处理for (int curentpage …...

Vue3+Element-plus+setup使用vuemap/vue-amap实现高德地图API相关操作

首先要下载依赖并且引入 npm安装 // 安装核心库 npm install vuemap/vue-amap --save// 安装loca库 npm install vuemap/vue-amap-loca --save// 安装扩展库 npm install vuemap/vue-amap-extra --save cdn <script src"https://cdn.jsdelivr.net/npm/vuemap/vue-a…...

Windows配置开机直达桌面并跳过锁屏登录界面在 Windows 10 中添加在启动时自动运行的应用

目录 Win10开机直达桌面并跳过锁屏登录界面修改组策略修改注册表跳过登录界面 在 Windows 10 中添加在启动时自动运行的应用设置系统级别服务一、Windows下使用sc将应用程序设置为系统服务1. 什么是sc命令&#xff1f;2. sc命令的基本语法3. 创建Windows服务的步骤与示例创建服…...