OpenCV--波滤器(二)

高通滤波器

代码和笔记

import cv2
import numpy as np


"""
高通滤波器--锐化图像,增强图像中的高频成分,
如边缘(边缘检测:旨在找出图像中亮度变化显著的区域,大幅度地减少了数据量,并剔除了可以认为不相关的信息,保留了图像的重要结构属性)和细节。
"""

"""
sobel算子,对图像求一阶导数,一阶导数越大,像素在该方向上的变化越大,边缘信号越强。
采用离散差分算子计算图像像素亮度值的近似梯度
"""
img = cv2.imread('./img/cat.jpeg')

# 计算x轴方向的梯度,只有垂直方向的边缘 ,cv2.CV_64F:位深 dx=1, dy=0:x轴和y轴的梯度要分开计算
dx = cv2.Sobel(img, cv2.CV_64F, dx=1, dy=0, ksize=3)
# 计算y轴方向的梯度,只有水平方向的边缘
dy = cv2.Sobel(img, cv2.CV_64F, dx=0, dy=1, ksize=3)
# # xy轴梯度合并 addWeighted也可以
dst = cv2.add(dx, dy)

cv2.imshow('img', img)
cv2.imshow('com', np.hstack((dx, dy)))
cv2.imshow('dst', dst)

"""
Scharr算子,对sobel的改进(卷积核大小为3时,会产生误差),其余类似
卷积核大小只能是3
"""
dx1 = cv2.Scharr(img, cv2.CV_64F, dx=1, dy=0)
dy1 = cv2.Scharr(img, cv2.CV_64F, dx=0, dy=1)

"""
拉普拉斯算子-通过计算图像灰度函数的二阶导数来检测图像中的边缘和纹理等变化
拉普拉斯算子利用二阶差分来计算图像的边缘。一阶差分可以检测边缘存在的可能性,而二阶差分能确定边缘的存在性。
具体而言,二阶差分是通过找出灰度值变化的拐点来确定边缘的位置。
效果比前面都要好,但是容易受到噪声影响
"""
dst1 = cv2.Laplacian(img, cv2.CV_64F, ksize=3)

"""
边缘检测--Canny--步骤如下:
噪声抑制:首先,使用高斯滤波器对图像进行平滑处理,以减少图像中的噪声。
高斯滤波器是一种线性平滑滤波器,可以有效地去除图像中的高频噪声,使得图像更加平滑。

梯度计算:计算图像的梯度幅值和方向。
这通常使用Sobel算子来实现,它计算图像中每个像素点灰度变化的强度和方向。梯度幅值表示灰度变化的强度,而梯度方向表示灰度变化的方向。

非极大值抑制:接下来,对图像中的每个像素点进行检查,以确定其是否为边缘点。
通过比较每个像素点在其梯度方向上的两侧像素点的幅值,如果当前像素点的幅值最大,则将其保留为边缘点,否则将其抑制。
这一步骤的目的是剔除大部分非边缘点,保留真正的边缘点。

高低阈值检测:使用高低阈值来确定最终的边缘。
只有当像素点的梯度幅值超过高阈值时,才会被认为是强边缘;而当像素点的梯度幅值低于低阈值时,则会被认为是弱边缘。
强边缘会被保留,而弱边缘中如果与强边缘相连的部分也会被保留,其余的弱边缘则会被抑制。
"""
# 100, 200高低阈值, 阈值小的话可以得到更细致的边缘
dst2 = cv2.Canny(img, 100, 200)

cv2.waitKey(0)
cv2.destroyAllWindows()

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
图像噪声是任何图像处理任务中的常见问题。为了消除这种噪声,图像处理实践中使用的一个广泛的方法是利用滤器。滤器可以应用于图像以去除噪声和增强细节。以下是如何使用Python和OpenCV来实现图像噪声消除。 首先,通过以下代码打开原始图像: ```python import cv2 import numpy as np #load image img = cv2.imread('noisy_image.jpg', 0) cv2.imshow('Original', img) cv2.waitKey(0) cv2.destroyAllWindows() ``` 在这里,我们使用了OpenCV的“imread”函数来加载图像。此函数具有两个参数,第一个是图像文件的名称或路径,第个是指定加载方式的标志。由于我们需要加载灰度图像,因此标志被设置为0。 然后,我们可以尝试使用高斯滤器进行图像去噪: ```python #apply gaussian blur blur = cv2.GaussianBlur(img, (5,5),0) cv2.imshow("Gaussian Blurred Image", blur) cv2.waitKey(0) cv2.destroyAllWindows() ``` 在这里,我们使用OpenCV的“GaussianBlur”函数来应用高斯模糊。这个函数有三个参数:输入图像,内核大小和模糊度标准差。内核大小指定模糊滤器的大小,模糊程度取决于标准差的值。 接着,我们可以尝试使用中值滤器: ```python #apply median blur median = cv2.medianBlur(img, 5) cv2.imshow("Median Blurred Image", median) cv2.waitKey(0) cv2.destroyAllWindows() ``` 在这里,我们使用OpenCV的“medianBlur”函数来应用中值模糊。这个函数有两个参数:输入图像和内核大小。内核大小指定模糊滤器的大小。 最后,我们可以使用双边滤器: ```python #apply bilateral filter bilateral = cv2.bilateralFilter(img, 5, 75, 75) cv2.imshow("Bilateral Blurred Image", bilateral) cv2.waitKey(0) cv2.destroyAllWindows() ``` 在这里,我们使用OpenCV的“bilateralFilter”函数来应用双边滤。这个函数有四个参数:输入图像、空间高斯函数标准差、灰度值相似性高斯函数标准差和过滤器大小。 总之,滤器是图像处理中用于去除或减少噪声的可靠工具。在本文中,我们介绍了Python和OpenCV中几种滤器的应用,例如高斯滤器、中值滤器和双边滤器。可以根据图像噪声的本质和需求选择最佳滤器。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

醉后才知酒浓

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值