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

news2024/11/25 23:00:48

文章目录

  • 一、简介:
  • 二、图像清晰度增强方案:
  • 三、算法实现步骤
    • 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的像素值设置为0
    img_out = img_out * (1 - mask_1)
    # 将大于1的像素值设置为1
    img_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,否则为False
    mask = 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 np


def high_reserve(img,ksize,sigm):
    img = img * 1.0
    gauss_out = cv2.GaussianBlur(img,(ksize,ksize),sigm)
    img_out = img - gauss_out + 128
    img_out = img_out/255.0
    # 饱和处理
    mask_1 = img_out  < 0
    mask_2 = img_out  > 1
    img_out = img_out * (1-mask_1)
    img_out = img_out * (1-mask_2) + mask_2
    return img_out

def 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.5
    img = 2 * target * blend * mask + (1 - mask) * (1 - 2 * (1 - target) * (1 - blend))
    return img

img = 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)

五:效果

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

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

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

相关文章

视频汇聚/安防监控综合平台EasyCVR接入海康私有协议EHOME显示失败是什么原因?

安防监控/视频综合管理平台/视频集中存储/磁盘阵列EasyCVR视频汇聚平台&#xff0c;支持多种视频格式和编码方式&#xff08;H.264/H.265&#xff09;&#xff0c;能够轻松对接各类前端监控设备&#xff0c;实现视频流的统一接入与集中管理。安防监控EasyCVR平台支持多种流媒体…

Stable Diffusion【 ControlNet实战】OpenPose 轻松制作武侠动作

前言 hello&#xff0c;大家好** 好了&#xff0c;进入正题。如何通过Stable Diffusion ControlNet来进行姿态控制。来一起来看下老徐的简单示例&#xff1a; 老徐参数设置&#xff1a; **大模型&#xff1a;**墨幽人造人_v1080 所有的AI设计工具&#xff0c;模型和插件&…

25届秋招网络安全面试资料库

吉祥知识星球http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247485367&idx1&sn837891059c360ad60db7e9ac980a3321&chksmc0e47eebf793f7fdb8fcd7eed8ce29160cf79ba303b59858ba3a6660c6dac536774afb2a6330#rd 《网安面试指南》http://mp.weixin.qq.com/s?…

机器人中的wrench(力旋量)

在机器人领域&#xff0c;wrench&#xff08;力旋量&#xff09;是一个由力和力矩组成的6D空间向量&#xff0c;用于描述刚体在空间中受到的力和力矩的综合作用。具体来说&#xff0c;wrench可以看作是一个包含线性分量和旋转分量的矢量&#xff0c;其中线性分量代表作用在刚体…

时间序列+预训练大模型!最新开源成果性能暴涨42.8%

今天我们来聊一个新兴的、创新空间很大的方向&#xff1a;时间序列预训练大模型。 预训练大模型因为在大规模多领域的数据集上进行训练&#xff0c;能学习到丰富的、跨领域的时间序列表示&#xff0c;在面对新的、没见过的时间序列数据时&#xff0c;它能够表现出更强的泛化性…

快速排序效率

为了搞清楚快速排序的效率&#xff0c;我们先从分区开始。分解来看&#xff0c;你会发现它包含两种步骤。 ❏ 比较&#xff1a;每个值都要与轴做比较。 ❏ 交换&#xff1a;在适当时候将左右指针所指的两个值交换位置。 一次分区至少有N次比较&#xff0c;即数组的每个值都要…

打开第四十二天:买卖股票的最佳时机IV、最佳买卖股票时机含冷冻期、买卖股票的最佳时机含手续费

一、买卖股票的最佳时机IV&#xff08;困难&#xff09; 题目 文章 视频 这道题目可以说是上一题的进阶版&#xff0c;这里要求至多有k次交易。 确定dp数组以及下标的含义 在上一题中定义了一个二维dp数组&#xff0c;本题其实依然可以用一个二维dp数组。使用二维数组 dp…

wireshark使用介绍及案例分享

一、wireshark介绍 1、定义 wireshark是非常流行的网络封包分析软件,简称小鲨鱼,功能十分强大。可以截取各种网络封包,显示网络封包的详细信息。对应的,linux下的抓包工具是 tcpdump。 1.1、网络基础 参考TCP/IP五层模型,帧结构如下: 帧字段 帧字段含义 Frame 物理层的…

百元蓝牙耳机哪个牌子的比较好?四款百元必入热门机型盘点

一款优秀的蓝牙耳机都能极大提升我们的使用体验&#xff0c;然而&#xff0c;对于大多数消费者而言&#xff0c;高端蓝牙耳机昂贵的价格常常令人望而却步&#xff0c;幸运的是&#xff0c;市场上有很多性价比极高的品牌提供了百元左右的优质选择&#xff0c;那么百元蓝牙耳机哪…

基于STM32开发的智能电能监测系统

目录 引言环境准备工作 硬件准备软件安装与配置系统设计 系统架构硬件连接代码实现 初始化代码控制代码应用场景 家庭电能监测工业用电管理常见问题及解决方案 常见问题解决方案结论 1. 引言 智能电能监测系统通过实时采集电流、电压等电力参数&#xff0c;计算电能消耗&…

FPGA开发——UART串口通信的介绍和回环实验框架构建

一、简介 1、原理 UART&#xff08;Universal Asynchronous Receiver/Transmitter&#xff0c;通用异步收发器&#xff09;是一种广泛使用的串行通信协议&#xff0c;特别适用于微控制器、计算机和各种嵌入式设备之间的数据通信。 UART是一种异步串行通信方式&#xff0c;通过…

Prometheus+Grafana-1-基础介绍及安装

一、体系架构(了解) 数据采集流程 说白了就是采集数据->计算是否超过阈值->发起警告 Prometheus查询界面如下 1.报警简介 展现形式&#xff1a;短信&#xff0c;邮件&#xff0c;电话&#xff0c;通讯软件。 阈值(Trigger Value)&#xff0c;如达到阈值可以触发预警。…

巨详细的规则引擎 Drools——小白也可食用

巨详细的规则引擎 Drools——小白也可食用 一、问题1.1、传统做法1.2、存在的问题1.3、引入 二、规则引擎概述2.1、什么是规则引擎2.2、使用规则引擎的优势2.3、规则引擎应用场景2.4、Drools介绍 三、Drools入门案例3.1、创建Springboot项目3.2、引入依赖3.3、添加Drools配置类…

鸿蒙(API 12 Beta3版)【投播组件开发指导】分布式媒体会话

通过本开发指导&#xff0c;完成一次音视频跨设备投播。 约束与限制 需同时满足以下条件&#xff0c;才能使用该功能&#xff1a; 设备限制 本端设备&#xff1a;HarmonyOS NEXT Developer Preview0及以上版本的手机设备 远端设备&#xff1a;HarmonyOS NEXT Developer Previ…

动起来!Axure动画的实用技巧

前言 在数字产品的世界中&#xff0c;用户体验的每一个细节都至关重要。 动画&#xff0c;作为一种增强交互性和视觉吸引力的手段&#xff0c;已经成为现代界面设计中不可或缺的元素。 Axure&#xff0c;作为一款强大的原型设计工具&#xff0c;提供了丰富的动画功能&#x…

进程第二部分

1.任务&#xff1a;子进程做的事情和父进程差不多&#xff08;子承父业&#xff09; 父进程创建出子进程之后&#xff0c;子进程做的事情与父进程完全不同&#xff08;自力更生&#xff09; 2.exec: int exec l(const char *path, const char *arg, ...); int exec v(const c…

python管理mysql

[rootserver1 ~]# pip3 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple //这是设置清华镜像站&#xff0c;提高下载安装速度&#xff0c;如果报错提示找不到config&#xff0c;这是因为版本低&#xff0c;临时使用清华镜像站来升级 pip&…

愤怒的江小白,这几年怎么了?

近日&#xff0c;东方甄选和江小白的纠纷引发了广泛关注。 8月8日晚间&#xff0c;东方甄选直播间中&#xff0c;主播天权在带货某款白酒产品时突然对比点评江小白产品&#xff0c;称江小白“不是白酒”&#xff1a;“你现在去看江小白的包装&#xff0c;上面是没有‘白酒’这…

1Panel 部署 爱影CMS

前言 本文以 爱影CMS 为例提供了一种在 1Panel 面板中在 docker 内运行二进制程序的一种思路。符合 1Panel 基于容器管理并部署应用&#xff0c;实现最小的漏洞暴露面的思路。 环境准备 完整的 1Panel 环境&#xff08;1Panel 如何安装&#xff1f; / 1Panel Pro 优惠购)服务…

软件测试学习搭子抱团取暖(已有400+)

希望优秀的测试人都聚齐在一起&#xff0c;大家一起解决面试难题&#xff0c;工作上的问题&#xff0c;在解决问题的同时自己也能提升&#xff0c;同时相互交流分享资料等测试面试经验&#xff0c;一起讨论交流呀。定个小目标2000。