图像处理:Python使用OpenCV进行图像锐化 (非锐化掩模、拉普拉斯滤波器)
文章目录
- 非锐化掩模 (Unsharp Masking)
- 拉普拉斯滤波器 (Laplacian Filter)
- 效果对比
- 总结
在图像处理中,锐化操作用于增强图像的边缘和细节,使图像看起来更清晰。常见的图像锐化方法包括非锐化掩模(Unsharp Masking)和拉普拉斯滤波器(Laplacian Filter)。
非锐化掩模 (Unsharp Masking)
步骤:
- 模糊图像:使用高斯模糊滤波器对原图像进行模糊处理,得到模糊图像。
- 计算细节层:通过从原图像中减去模糊图像,得到细节层。
- 增强图像:将细节层乘以一个增益系数后加回到原图像,得到增强后的图像。
公式:
设原图像为 ( I ),模糊图像为 (I blur ),细节层为 ( D ),增益系数为 ( k ),最终的锐化图像 ( I’ ) 计算如下:
D = I − I blur D = I - I_{\text{blur}} D=I−Iblur
I ′ = I + k ⋅ D I' = I + k \cdot D I′=I+k⋅D
代码示例:
import cv2
import numpy as npdef unsharp_mask(image, k=1.5):# 高斯模糊图像blurred = cv2.GaussianBlur(image, (9, 9), 10.0)# 计算细节层detail = image - blurred# 增强图像sharpened = image + k * detailreturn np.clip(sharpened, 0, 255).astype(np.uint8)image = cv2.imread('Task3.jpg')
sharpened_image = unsharp_mask(image)
cv2.imshow('Original Image', image)
cv2.imshow('Unsharp Masked Image', sharpened_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
拉普拉斯滤波器 (Laplacian Filter)
步骤:
- 计算拉普拉斯图像:使用拉普拉斯算子计算图像的二阶导数,得到拉普拉斯图像。
- 增强图像:将拉普拉斯图像加回到原图像中,得到锐化后的图像。
公式:
设原图像为 ( I ),拉普拉斯图像为 ( L ),最终的锐化图像 ( I’ ) 计算如下:
L = Δ I = ∂ 2 I ∂ x 2 + ∂ 2 I ∂ y 2 L = \Delta I = \frac{\partial^2 I}{\partial x^2} + \frac{\partial^2 I}{\partial y^2} L=ΔI=∂x2∂2I+∂y2∂2I
I ′ = I + k ⋅ L I' = I + k \cdot L I′=I+k⋅L
代码示例:
import cv2
import numpy as npdef laplacian_sharpen(image, k=1.0):# 计算拉普拉斯图像laplacian = cv2.Laplacian(image, cv2.CV_64F)laplacian = np.uint8(np.absolute(laplacian))# 增强图像sharpened = cv2.addWeighted(image, 1, laplacian, k, 0)return sharpenedimage = cv2.imread('path_to_your_image.jpg')
sharpened_image = laplacian_sharpen(image)
cv2.imshow('Original Image', image)
cv2.imshow('Laplacian Sharpened Image', sharpened_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
效果对比
了将非锐化掩模(Unsharp Masking)和拉普拉斯滤波器(Laplacian Filter)的方法整合到一个代码中,并对比展示效果,将两个锐化方法的结果放在同一个窗口中进行展示
import cv2
import numpy as np
import matplotlib.pyplot as pltdef unsharp_mask(image, k=1.5):# 高斯模糊图像blurred = cv2.GaussianBlur(image, (9, 9), 10.0)# 计算细节层detail = image - blurred# 增强图像sharpened = image + k * detailreturn np.clip(sharpened, 0, 255).astype(np.uint8)def laplacian_sharpen(image, k=1.0):# 计算拉普拉斯图像laplacian = cv2.Laplacian(image, cv2.CV_64F)laplacian = np.uint8(np.absolute(laplacian))# 增强图像sharpened = cv2.addWeighted(image, 1, laplacian, k, 0)return sharpeneddef display_images(original, unsharp, laplacian):titles = ['Original Image', 'Unsharp Masked ', 'Laplacian Sharpened ']images = [original, unsharp, laplacian]plt.figure(figsize=(10, 10)) for i in range(3):plt.subplot(1, 3, i + 1)plt.imshow(cv2.cvtColor(images[i], cv2.COLOR_BGR2RGB))plt.title(titles[i])plt.xticks([]), plt.yticks([])plt.show()def main():image_path = 'Task3.jpg' # 请替换为你的图像路径image = cv2.imread(image_path)if image is None:print(f"Error: Unable to load image at {image_path}")returnunsharp_image = unsharp_mask(image)laplacian_image = laplacian_sharpen(image)display_images(image, unsharp_image, laplacian_image)if __name__ == "__main__":main()
具体效果对比如下:不同的图片的效果可能不同

总结
这两种锐化方法各有优缺点,要根据具体需求选择合适的方法:
-
非锐化掩模:
- 优点:能够灵活控制图像的锐化程度,通过调整增益系数和模糊程度,可以获得较为自然的锐化效果。
- 缺点:在处理带有高噪声的图像时,容易放大噪声。
-
拉普拉斯滤波器:
- 优点:计算简单,能够快速增强图像边缘和细节。
- 缺点:容易引入噪声和伪影,对噪声不敏感的图像效果更好。
通过应用这些方法,可以有效增强图像的边缘和细节,使图像看起来更加清晰和锐利。
相关文章:
图像处理:Python使用OpenCV进行图像锐化 (非锐化掩模、拉普拉斯滤波器)
文章目录 非锐化掩模 (Unsharp Masking)拉普拉斯滤波器 (Laplacian Filter)效果对比总结 在图像处理中,锐化操作用于增强图像的边缘和细节,使图像看起来更清晰。常见的图像锐化方法包括非锐化掩模(Unsharp Masking)和拉普拉斯滤波…...
windows用脚本编译qt的项目
mingw的 cd build ::设置jom环境 set PATHC:\Qt\Qt5.15.2\Tools\mingw810_32\bin;%PATH% set PATHC:\Qt\Qt5.15.2\5.15.2\mingw81_32\bin;%PATH% ::设置Qt环境 amd64_x86 或者 amd64 ::CALL "D:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxilia…...
mybatis-plus使用拦截器实现sql完整打印
shigen坚持更新文章的博客写手,擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长,分享认知,留住感动。 个人IP:shigen 在使用mybatis-plus(mybatis)的时候,往往需要…...
GPT-4并非世界模型,LeCun双手赞同!ACL力证LLM无法模拟真实世界
一直以来,支持LLM的观点之一是模型可以集成海量事实知识,作为通往「世界模拟器」的基础。虽然也有不少反对意见,但缺乏实证依据。那么,LLM能否作为世界模拟器? 最近,亚利桑那大学、微软、霍普金斯大学等机构…...
第 6 章: Spring 中的 JDBC
JDBC 的全称是 Java Database Connectivity,是一套面向关系型数据库的规范。虽然数据库各有不同,但这些数据库都提供了基于 JDBC 规范实现的 JDBC 驱动。开发者只需要面向 JDBC 接口编程,就能在很大程度上规避数据库差异带来的问题。Java 应用…...
[C++ STL] vector 详解
标题:[C STL] vector 详解 水墨不写bug 目录 一、背景 二、vector简介 三、vector的接口介绍 (1)默认成员函数接口 i,构造函数(constructor) ii,析构函数(destructor࿰…...
PHP简约轻型聊天室留言源码
无名轻聊是一款phptxt的轻型聊天室。 无名轻聊特点: 自适应电脑/手机 数据使用txt存放,默认显示近50条聊天记录 采用jqueryajax轮询方式,适合小型聊天环境。 访问地址加?zhi进入管理模式,发送 clear 清空聊天记录。 修改在…...
代码随想录算法训练营day23|669.修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树
669.修剪二叉搜索树 这道题目需要考虑当前节点是否在[low,high]之间, 因为是平衡二叉树, 所以当当前节点值小于low时,那么其左节点肯定更小,因此删除该节点的方式是给root节点返回其右节点的递归,注意:这里…...
实时通信websocket和sse
microsoft/fetch-event-source是一个JavaScript库,用于处理服务器发送的事件(Server-Sent Events,简称SSE)。它提供了一个简单易用的API,使得客户端可以与服务器进行实时通信。这个库主要用于浏览器环境 安装依赖npm i…...
(超详细)基于动态顺序表实现简单的通讯录项目
前言: 我们在上一章节用c语言实现了线性表中的的动态顺序表,那么顺序表就只是顺序表吗?当然不是,使用顺序表结构可以实现很多项目,许多项目的数据结构都会用到顺序表,本章节我们就要使用顺序表实现一个简易…...
修改SubVI的LabVIEW默认搜索路径
在启动顶级VI后,LabVIEW可能会遇到找不到subVI的情况。这通常是由于subVI的路径发生了变化或没有被正确配置。 LabVIEW默认搜索路径 默认情况下,LabVIEW会按以下顺序搜索文件位置(*表示LabVIEW将搜索子目录): <t…...
基于python深度学习的CNN图像识别鲜花-含数据集+pyqt界面
代码下载: https://download.csdn.net/download/qq_34904125/89383615 本代码是基于python pytorch环境安装的。 下载本代码后,有个requirement.txt文本,里面介绍了如何安装环境,环境需要自行配置。 或可直接参考下面博文进行…...
第九站:Java黑——安全编码的坚固防线(第②篇)
4. 验证和过滤输入数据示例:使用Apache Commons Lang 对输入数据进行验证和过滤是防止多种安全漏洞的关键步骤,包括但不限于SQL注入和命令注入。Apache Commons Lang库提供了一些实用方法来帮助进行字符串操作和验证。以下是一个简单的示例,…...
如何优雅的删除正式环境中的大表
引起 MySQL 数据库性能抖动的原因有很多,比如大事务、定时批量查询等,而这些原因我们一般都会注意到。但是,有一个引起性能抖动的原因却经常被我们忽视,那就是在生产环境删除无用的大表,即 DROP TABLE。 一、为什么要 DROP TABLE? 生产环境中,为什么要 DROP TABLE?相…...
Vulnhub-DC-1,7
靶机IP:192.168.20.141 kaliIP:192.168.20.128 网络有问题的可以看下搭建Vulnhub靶机网络问题(获取不到IP) 前言 1和7都是Drupal的网站,只写了7,包含1的知识点 信息收集 用nmap扫描端口及版本号 进入主页查看作者给的提示,不是暴力破解的…...
使用MySQL全文索引实现高效搜索功能
MySQL全文索引是MySQL提供的一种高效的搜索功能,可以快速地搜索文本内容。全文索引可以用于搜索大量文本数据,通常应用在文章、博客、论坛等需要搜索的场景中。 什么是MySQL全文索引 MySQL全文索引是一种用于快速搜索文本内容的索引技术。它可以在存储和…...
数据结构学习笔记-图
1.图的存储 (1)邻接矩阵法 #define MaxVertexNum 100 //顶点数目的最大值 typedef struct{char Vex[MaxVertexNum]; //顶点表int Edge[MaxVertexNum][MaxVertexNum]; //邻接矩阵表,边表int vexnum,arcnum; //图的当前顶点数和边…...
【归并排序】| 详解归并排序核心代码之合并两个有序数组 力扣88
🎗️ 主页:小夜时雨 🎗️专栏:动态规划 🎗️如何活着,是我找寻的方向 目录 1. 题目解析2. 代码 1. 题目解析 题目链接: https://leetcode.cn/problems/merge-sorted-array/description/ 本道题是归并排序的…...
51单片机STC89C52RC——2.3 两个独立按键模拟控制LED流水灯方向
目的 按下K1键LED流水向左移动 按下K2键LED流水向右移动 一,STC单片机模块 二,独立按键 2.1 独立按键位置 2.2 独立按键电路图 这里要注意一个设计的bug P3_1 引脚对应是K1 P3_0 引脚对应是K2 要实现按一下点亮、再按一下熄灭,我们就需…...
Neo4j连接
终端输入: neo4j console 浏览器访问:http://localhost:7474/ 输入用户名和密码:neo4j, 梦想密码(首次neo4j) 代码连接用新的服务器地址: g Graph(neo4j://localhost:7687, auth(neo4j, ))…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...
基于Java+MySQL实现(GUI)客户管理系统
客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...
水泥厂自动化升级利器:Devicenet转Modbus rtu协议转换网关
在水泥厂的生产流程中,工业自动化网关起着至关重要的作用,尤其是JH-DVN-RTU疆鸿智能Devicenet转Modbus rtu协议转换网关,为水泥厂实现高效生产与精准控制提供了有力支持。 水泥厂设备众多,其中不少设备采用Devicenet协议。Devicen…...
第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10+pip3.10)
第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10pip3.10) 一:前言二:安装编译依赖二:安装Python3.10三:安装PIP3.10四:安装Paddlepaddle基础框架4.1…...
WebRTC调研
WebRTC是什么,为什么,如何使用 WebRTC有什么优势 WebRTC Architecture Amazon KVS WebRTC 其它厂商WebRTC 海康门禁WebRTC 海康门禁其他界面整理 威视通WebRTC 局域网 Google浏览器 Microsoft Edge 公网 RTSP RTMP NVR ONVIF SIP SRT WebRTC协…...
leetcode73-矩阵置零
leetcode 73 思路 记录 0 元素的位置:遍历整个矩阵,找出所有值为 0 的元素,并将它们的坐标记录在数组zeroPosition中置零操作:遍历记录的所有 0 元素位置,将每个位置对应的行和列的所有元素置为 0 具体步骤 初始化…...
Windows 下端口占用排查与释放全攻略
Windows 下端口占用排查与释放全攻略 在开发和运维过程中,经常会遇到端口被占用的问题(如 8080、3306 等常用端口)。本文将详细介绍如何通过命令行和图形化界面快速定位并释放被占用的端口,帮助你高效解决此类问题。 一、准…...
麒麟系统使用-进行.NET开发
文章目录 前言一、搭建dotnet环境1.获取相关资源2.配置dotnet 二、使用dotnet三、其他说明总结 前言 麒麟系统的内核是基于linux的,如果需要进行.NET开发,则需要安装特定的应用。由于NET Framework 是仅适用于 Windows 版本的 .NET,所以要进…...
CSS 工具对比:UnoCSS vs Tailwind CSS,谁是你的菜?
在现代前端开发中,Utility-First (功能优先) CSS 框架已经成为主流。其中,Tailwind CSS 无疑是市场的领导者和标杆。然而,一个名为 UnoCSS 的新星正以其惊人的性能和极致的灵活性迅速崛起。 这篇文章将深入探讨这两款工具的核心理念、技术差…...
