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

这篇具有很好参考价值的文章主要介绍了Python实现多种图像锐化方法:拉普拉斯算子和Sobel算子。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

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

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

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

图像锐化

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

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

拉普拉斯算子

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

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

Python实现多种图像锐化方法:拉普拉斯算子和Sobel算子,通信专业课程笔记,python,图像处理

Sobel算子

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

Python实现多种图像锐化方法:拉普拉斯算子和Sobel算子,通信专业课程笔记,python,图像处理

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文章来源地址https://www.toymoban.com/news/detail-757548.html

到了这里,关于Python实现多种图像锐化方法:拉普拉斯算子和Sobel算子的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包