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)

五:效果

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】网络编程套接字Scoket:UDP网络编程

目录 一、了解UDP协议 二、了解端口和IP地址 三、套接字概述与Socket的概念 四、Socket的类型 五、 Socket的信息数据结构 六、网络字节序与主机字节序的互相转换 七、地址转换函数 八、UDP网络编程流程及相关函数 socket函数 bind函数 recvfrom函数 sendto函数 …

UIAbility组件基础(一)

一、概述 UIAbility组件是一种包含UI的应用组件&#xff0c;主要用于和用户交互。UIAbility组件是系统调度的基本单元&#xff0c;为应用提供绘制界面的窗口。一个应用可以包含一个或多个UIAbility组件。每一个UIAbility组件实例都会在最近任务列表中显示一个对应的任务。 U…

C语言 ——— 学习、使用memmove函数 并模拟实现

目录 memmvoe函数的功能 学习memmove函数​编辑 模拟实现memmove函数 memmvoe函数的功能 memmvoe函数的功能类似于memcpy函数&#xff0c;都是内存拷贝&#xff0c;唯一的区别是memcpy函数不能成功拷贝原数据&#xff0c;而memmvoe函数可以 举例来说&#xff1a; [1, 2, 3…

单元测试注解:@ContextConfiguration

ContextConfiguration注解 ContextConfiguration注解主要用于在‌Spring框架中加载和配置Spring上下文&#xff0c;特别是在测试场景中。 它允许开发者指定要加载的配置文件或配置类的位置&#xff0c;以便在运行时或测试时能够正确地构建和初始化Spring上下文。 基本用途和工…

全国首个数据要素人才标准,亿信华辰携76家单位共同起草

在数字化浪潮汹涌的今天&#xff0c;数据已跃升为社会经济发展的核心引擎。如何精准、高效地评估数据要素领域人才的专业能力&#xff0c;成为了亟待解决的关键议题。亿信华辰积极响应国家战略布局&#xff0c;依托自身在大数据管理与应用领域的深厚底蕴&#xff0c;携手业界76…

CUDA Programming - (1) CUDA简介

1. GPU 简介 处理器一般包含以下几部分&#xff1a;Cache 缓存&#xff0c;ALU 计算单元&#xff0c;Control 控制中心&#xff0c;RAM 内存。 CPU&#xff08;Central Processing Unit&#xff09;&#xff1a;中央处理器。适合进行逻辑&#xff0c;ALU计算核心较少。适合控…

企业源代码加密软件有哪些?2024最好用的十款源代码加密软件

在当今快速发展的技术环境中&#xff0c;企业源代码的安全性至关重要。源代码不仅包含着企业的核心知识产权&#xff0c;还可能涉及敏感的商业数据。因此&#xff0c;选择一款合适的源代码加密软件&#xff0c;对于保护企业资产和避免数据泄露风险至关重要。随着安全技术的不断…

Codeforces Pinely Round 4 (Div. 1 + Div. 2) A~G

A.Maximize the Last Element&#xff08;枚举&#xff09; 题意&#xff1a; 给你一个由 n n n个整数组成的数组 a a a&#xff0c;其中 n n n是奇数。 在一次操作中&#xff0c;你将从数组 a a a中删除两个相邻的元素&#xff0c;然后将数组的剩余部分连接起来。例如&…

git常见命令和常见问题解决

文章目录 常见命令问题问题1&#xff08;git push相关&#xff09;问题2&#xff08;git push相关&#xff09;问题3&#xff08;git push相关&#xff09;删除github的仓库github新创建本地仓库的操作…or create a new repository on the command line…or push an existing …

led台灯对眼睛好不好?揭秘使用护眼台灯能不能有效预防近视

在当前社会&#xff0c;近视的影响不容小视&#xff0c;除了对视觉健康的影响外&#xff0c;近视还可能对个人的心理健康产生负面影响。视力不佳可能导致自卑感和社会交往障碍&#xff0c;尤其是在儿童和青少年时期。保护视力健康要从小做起&#xff0c;家长们可以关注孩子的用…

[openSSL]TLS 1.3握手分析

文章目录 前言一、ECDHE密钥交换二、TLS单向身份认证三、TLS双向身份认证 前言 关于TLS握手网上资料很多&#xff0c;但是有一些写的很不清楚&#xff0c;导致学习时对概念和流程出现混淆&#xff0c;以下是我觉得写得比较清晰和准确的供学习参考。 浅析 TLS&#xff08;ECDHE…

超算互联网-Stable Diffusion 2.1文生图教程

一、名词简介 1. 超算互联网 超算互联网是一种基于云计算的高性能计算平台&#xff0c;用户可以通过互联网接入超级计算资源。它集成了大量的计算节点&#xff0c;提供强大的计算能力&#xff0c;适用于科学计算、深度学习、人工智能等领域。用户可以利用超算互联网平台运行复…

老阳推荐的temu选品师项目能不能做成?

在不断变化的电商领域&#xff0c;temU选品师项目作为一种新兴职业&#xff0c;受到了越来越多的关注。老阳的推荐使得这一项目引起了不少人的兴趣&#xff0c;那么&#xff0c;temU选品师项目究竟能否成功呢?让我们从一个新的角度来探讨这一问题。 新兴市场的机遇与挑战 temU…

基于VEH的无痕HOOK

这里的无痕HOOK指的是不破坏程序机器码,这样就可以绕过CRC或MD5的校验。 VEH利用了Windows的调试机制和异常处理,人为抛出异常,从异常的上下文中获取寄存器信息。 DLL入口 // dllmain.cpp : 定义 DLL 应用程序的入口点。 #include "pch.h" #include "CHoo…

jenkins一键推送到远程服务器并用docker容器启动

1.安装jenkins 我后端使用的是宝塔面板来安装的容器化jenkins,要选中允许外部访问&#xff0c;安装完之后没有那个选项了&#xff0c;一开始安装的时候要选中不使用域名和后面的允许外部访问。Jenkins 版本为&#xff1a; 2.462.1 2.配置Jenkins 2.1 Git plugin 安装完毕之…

100 Exercises To Learn Rust 挑战!构文・整数・变量

前一篇文章 【0】准备 【1】构文・整数・变量 ← 本次全部文章列表 《100 Exercise To Learn Rust》第2回&#xff0c;也就是实际演习的第1回&#xff01;从这次开始&#xff0c;我们会适度减少前置说明&#xff0c;直接进入问题的解决&#xff01; 本次的相关页面 1.1. Syn…

Java:接口interface

文章目录 接口interface好处为什么要用接口 接口案例需求思路代码Student.javaClassManage.javaStudentOperator 接口StudentOperatorImpl1.javaStudentOperatorImpl2.javaTest.java 黑马程序员学习笔记 接口interface 接口中&#xff1a;变量默认为常量&#xff0c;方法默认为…

全网最详细HAProxy入门小知识

目录 一. 负载均衡 负载均衡的意义&#xff1a; 负载均衡的类型&#xff1a; 二. HAProxy 简介 HAProxy 的特点&#xff1a; 社区版和企业版&#xff1a; 三. HAProxy 的安装和服务信息 1、实验环境 1&#xff09;安装并配置 Nginx 2&#xff09;在客户端测试 2、安装…

使用C语言构建Lua库

Lua 本身是用 C 语言编写的&#xff0c;因此使用 C 编写扩展可以更好地与 Lua 引擎集成&#xff0c;减少性能瓶颈&#xff0c;同时C 语言提供了对底层硬件和操作系统功能的直接访问能力&#xff0c;让 Lua 可以通过 C 扩展来实现对文件系统、网络等高级功能的支持。因为C 语言非…

大语言模型的模型量化(INT8/INT4)技术

目录 一、LLM.in8 的量化方案 1.1 模型量化的动机和原理1.2 LLM.int8 量化的精度和性能1.3 LLM.int8 量化的实践 二、SmoothQuant 量化方案 2.1 SmoothQuant 的基本原理2.2 SmoothQuant 的实践 三、GPTQ 量化训练方案 3.1 GPTQ 的基本原理3.2 GPTQ 的实践 参考资料 一、LLM.i…