Python实现多种图像锐化方法:拉普拉斯算子和Sobel算子

news2024/9/20 12:39:52

Python实现多种图像锐化方法:拉普拉斯算子和Sobel算子

图像和视频逐渐成为人们生活中信息获取的重要来源,而图像和视频在传输过程中有很多因素可能造成图像模糊,比如不正确的聚焦会产生离焦模糊,景物和照相机的相对运动会造成运动模糊,图像压缩造成的高频成分丢失模糊。

模糊降低了图像的清晰度,严重影响了图像质量,导致图像分析、处理变得困难,因此必须使用有效的图像锐化方法来提高图像清晰度。

本文首先介绍了两种图像锐化方法:拉普拉斯算法和Sobel算法。

然后针对灰度图像进行了高斯模糊处理,并采用了上述算法来进行图像锐化。

图像锐化

图像模糊降低了图像的清晰度,严重影响图像质量,导致图像分析、处理变得异常困难,因此必须要使用有效的去除图像模糊方法来提高图像清晰度,从而提高系统的整体性能。

去除图像模糊算法又称为图像锐化,是指补偿图像的轮廓,增强图像的边缘及灰度跳变的部分,使图像变得清晰。目前有很多的图像锐化方法,如梯度法、Sobel算子、拉普拉斯算子、高通滤波等。本文主要介绍拉普拉斯算子和Sobel算子

拉普拉斯算子

拉普拉斯是一种微分算子,它的应用可增强图像中灰度突变的区域,减弱灰度的缓慢变化区域。

因此可以选择拉普拉斯算子对原图像进行锐化处理:先产生描述灰度突变的图像,再将拉普拉斯图像与原始图像叠加从而产生锐化图像!

在这里插入图片描述

Sobel算子

Sobel算子是一阶微分的边缘检测算子,它是将原图像中某个像素的值,作为它本身灰度值和其相邻像素灰度值进行运算的函数。它实际上是一种模板匹配算法,模板中有一个锚点,通常是矩阵中心点,和原图像中待计算点对应;整个模板对应的区域,就是原图像中像素点的相邻区域,模板运算目的是让图像变好。

在这里插入图片描述

Python代码实现拉普拉斯算子和Sobel算子

# @description:
# @author:Jianping Zhou
# @email:jianpingzhou0927@gmail.com
# @Time:2022/11/29 9:30
import cv2
import numpy as np
from skimage import io

# 导入图片
raw_img = cv2.imread("../BMP_images/lena512.BMP")
cv2.imshow('raw_image', raw_img)

# 转换灰度
# gimg = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
gimg = raw_img

# 高斯模糊化
# dst = cv2.GaussianBlur(img,ksize=(5,5),sigmaX=0,sigmaY=0)
# 创建毛玻璃特效
# 参数2:高斯核的宽和高(建议是奇数)
# 参数3:x和y轴的标准差
img = cv2.GaussianBlur(gimg, (11, 11), 0)
cv2.imshow('GaussianBlur_image', img)
io.imsave('./results/GaussianBlur_image.png', img)

# 拉普拉斯算子锐化
kernel = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]], np.float32)  # 定义拉普拉斯算子
dst = cv2.filter2D(img, -1, kernel=kernel)  # 调用opencv图像锐化函数

# sobel算子锐化
# 对x方向梯度进行sobel边缘提取
x = cv2.Sobel(gimg, cv2.CV_64F, 1, 0)
# 对y方向梯度进行sobel边缘提取
y = cv2.Sobel(gimg, cv2.CV_64F, 0, 1)
# 对x方向转回uint8
absX = cv2.convertScaleAbs(x)
# 对y方向转会uint8
absY = cv2.convertScaleAbs(y)
# x,y方向合成边缘检测结果
dst1 = cv2.addWeighted(absX, 0.5, absY, 0.5, 0)
# 与原图像堆叠
res = dst1 + gimg

# 测试
# print("dstshape:",dst1)
# print("resshape:",res)

# 按要求左右显示原图与拉普拉斯处理结果
# result1 = np.hstack([raw_img, img, dst])
result1 = dst
cv2.imshow('lapres', result1)
io.imsave('./results/lapres.png', result1)

# 按要求左右显示原图与sobel处理结果
# result2 = np.hstack([raw_img, img, res])
result2 = res
cv2.imshow('sobelres', result2)
io.imsave('./results/sobelres.png', result2)

# 去缓存
cv2.waitKey(0)
cv2.destroyAllWindows()

更多详细代码发布在https://github.com/JeremyChou28/digital_image_processing/tree/main/project3

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

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

相关文章

(开源)2023工训大赛智能垃圾分类项目(可循环播放视频,显示垃圾分类信息,拍照识别,垃圾分类,满载报警,压缩)

省赛:由于这个比赛是两年一届,并未做足充分的准备,但是通过一定的单片机基础,加上速成能力,也就是熬夜学,通过疯狂的网络搜索,在省赛第5 入选国赛 下面来简单介绍一下我们作品: 主控&#xff1…

代码随想录算法训练营第二十四天(回溯算法篇)|理论基础

结束了二叉树的篇章,我们进入到回溯啦! 学习资料:代码随想录 (programmercarl.com) 理论基础 回溯算法又称回溯搜算算法,是一种搜索方法。 作为递归的“副产品”,只要右递归的地方就会有对应的回溯的过程。 回溯算…

Git命令大全:从基础到高级应用

目录 一、增加/删除文件 1.1 添加文件到暂存区 1.2 添加所有文件到暂存区 1.3 从暂存区移除文件 1.4 从版本库和工作区删除文件 二、代码提交 2.1 提交暂存区文件到本地仓库 2.2 修改最后一次提交信息 三、本地分支 3.1 创建新分支 3.2 切换分支 3.3 创建并切换到新分支 3.4 删…

微信小程序:布局样式

效果 wxml <view class"layout"><view class"left"><view>1</view><view>1</view><view>1</view><view>1</view><view>1</view></view><view class"right"&…

计算机毕业设计 基于Web的城市旅游网站的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

发布jar包到maven中央仓库

1. 环境 在网上找的很多文章中写得都有很多问题&#xff0c;这里记录一下最近一次成功地发布jar包到maven中央仓库的过程。并附带上每一个步骤官方的指导链接。 系统&#xff1a;mac&#xff08;windows系统在下载辅助工具时不太一样&#xff0c;在配置上和mac系统没有区别&…

rk3568 RGMII KSZ8795 MAC TO MAC

RK3568与KSZ8795交换机芯片连接&#xff0c;直接MAC TO MAC方式&#xff0c;这样一下就扩展会4路网口&#xff0c;应该场合比较多&#xff0c;移植过程如下&#xff1a; 参考《Rockchip_Developer_Guide_Linux_MAC_TO_MAC_CN.pdf》 《rockchip RGMIImv88e6390 管理型交换机功…

【HarmonyOS】【DevEco Studio】安装教程及环境配置问题解决

目录 一、DevEco Studio 安装二、配置环境ohmp安装报错问题解决方法一&#xff1a;注册表删除数值&#xff08;没解决&#xff09;方法二&#xff1a;进入DevEco Studio点击Settings进入设置&#xff08;没解决&#xff09;方法三&#xff1a;自己去官网下载ohmp的包安装&#…

13.Spring 整合 Kafka + 发送系统通知 + 显示系统通知

目录 1.Spring 整合 Kafka 2.发送系统通知 2.1 封装事件对象 2.2 开发事件的生产者和消费者 2.3 触发事件&#xff1a;在评论、点赞、关注后通知​编辑 3.显示系统通知 3.1 通知列表 3.1.1 数据访问层 3.1.2 业务层 3.1.3 表现层 3.2 开发通知详情 3.2.1 开发数据…

mac安装pnpm与使用

1、什么是pnpm&#xff1f; pnpm 全称 performant npm&#xff0c;意思是高性能的 npm。pnpm 由 npm/yarn 衍生而来&#xff0c;解决了 npm/yarn 内部潜在的 bug&#xff0c;极大的优化了性能&#xff0c;扩展了使用场景。被誉为 “最先进的包管理工具”。 2、pnpm特点 速度…

Eolink Apikit 如何进行 Websocket 接口测试?

什么是 websocket &#xff1f; WebSocket 是 HTML5 下一种新的协议&#xff08;websocket协议本质上是一个基于 tcp 的协议&#xff09;。 它实现了浏览器与服务器全双工通信&#xff0c;能更好的节省服务器资源和带宽并达到实时通讯的目的 Websocket 是一个持久化的协议。…

限流常用算法以及基于Sentinel的微服务限流及熔断

一、服务限流的作用及实现 在没有任何保护机制的情况下&#xff0c;如果所有的流量都进入服务器&#xff0c;很可能造成服务器宕机导致整个系统不可用&#xff0c;从而造成巨大的损失。为了保证系统在这些场景中仍然能够稳定运行&#xff0c;就需要采取一定的系统保护策略&…

docker compose部署wordpress

准备机器&#xff1a; 192.168.58.151 &#xff08;关闭防火墙和selinux&#xff09; 安装好docker服务 &#xff08;详细参照&#xff1a;http://t.csdnimg.cn/usG0s 中的国内源安装docker&#xff09; 部署wordpress: 创建目录&#xff1a; [rootdocker ~]# mkdir…

【什么是POI,为什么它会导致内存溢出?】

什么是POI&#xff0c;为什么它会导致内存溢出 什么是POIExcel并没看到的那么小POI的溢出原理 拓展知识几种Workbook格式 什么是POI Apache POl&#xff0c;是一个非常流行的文档处理工具&#xff0c;通常大家会选择用它来处理Excel文件。但是在实际使用的时候经常会遇到内存溢…

VR汽车技术服务虚拟仿真实训平台更好地辅助职业上岗培训

VR汽车虚拟仿真教学软件是一种基于虚拟现实技术的教学辅助工具。它能够模拟真实的汽车环境和操作场景&#xff0c;让学生能够通过虚拟仿真来学习和实践汽车相关知识和技能。 与传统的教学方式相比&#xff0c;VR汽车虚拟仿真教学软件具有更高的视觉沉浸感和互动性&#xff0c;能…

网络时间服务器

本章主要介绍网络时间服务器。 使用chrony配置时间服务器 配置chrony客户端向服务器同步时间 1 时间同步的必要性 一些服务对时间要求非常严格&#xff0c;例如&#xff0c;图所示的由三台服务器搭建的ceph集群。 这三台服务器的时间必须保持一致&#xff0c;如果不一致&#…

https网站连接图标四种状态(安全、没有完全安全、过期和危险)

浏览 Web 时&#xff0c;地址栏中会显示一个图标&#xff0c;指示与要访问的网站的连接的安全性。 此图标可帮助您确定是否可以安全发送和接收网站的信息。 连接会告知发送到站点和从站点发送的信息&#xff08;如密码、地址或信用卡&#xff09;是否安全发送&#xff0c;且无法…

Linux环境下maven的安装

到官网下载maven 步入下面的地址选择合适的maven版本 https://dlcdn.apache.org/maven/ 以笔者为例&#xff0c;选择了3.5.4这个版本 将maven上传到Linux服务器并解压 tar -zxvf apache-maven-3.5.4-bin.tar.gz配置环境变量 我们使用vim编辑profile vim /etc/profile环境…

day03、关系模型之基本概念

关系模型之基本概念 1.关系模型概述1.1 关系模型三要素基本结构&#xff1a;relation/Table基本操作:relation operator 2.什么是关系3.关系模型中的完整性约束 本视频来源于B站&#xff0c;战德臣老师 1.关系模型概述 1.1 关系模型三要素 基本结构&#xff1a;relation/Table…

MATLAB——二维小波的单层分解

%% 学习目标&#xff1a;二维小波的单层分解 %% 二维小波适合图像处理和分析&#xff0c;将图像分解为4个图像 两个维度 低通&#xff0c;高通 clear all; close all; load woman.mat; %% which woman.mat Yind2gray(X,map); %将索引图像转换为灰度图像 [c…