人工智能-图像滤波

  • 滤波概念

1)滤波过程就是把不需要的信号频率去掉的过程
2)滤波操作一般用卷积操作赖实现,卷积核一般称为滤波器
3)滤波分为:低通滤波、高通滤波、中通滤波、阻带滤波
4)低通滤波也叫平滑滤波,获取一些低频信息,可以使图像变模糊,主要用于去噪
5)高通滤波,获取一些高频信息,一般用于获取图像的边缘、轮廓或梯度
6)中通滤波一般用于获取已知频率范围内的信号
7)阻带滤波一般用于去掉已知频率范围内的信号
8)滤波分析一般有时域分析和频域分析
9)时域分析是直接对信号本身进行分析
10)频域分析是对信号的变化快慢进行分析

  • 卷积

卷积
卷积是如何实现滤波器的功能呢,这就需要对卷积核进行操作,卷积核相当于滤波器,我们可以通过卷积核的不断滑动来过滤掉一些频率信息,如下面的代码,卷积核采用高通滤波的形式进行卷积

import cv2
import numpy as np

src = cv2.imread('timg.jpg')
kernel = np.array([[1,1,0],[1,0,-1],[0,-1,-1]],np.float32) #定义一个卷积核
dst = cv2.filter2D(src,-1,kernel=kernel)

cv2.imshow('src show',src)
cv2.imshow('dst show',dst)

cv2.waitKey(0)

卷积滤波
下面介绍一下常用的卷积核(算子)

  • 平滑算子

1)均值滤波
和原图相比,高频信号被压低了,较原图来看变的模糊了一点

src = cv2.imread('timg.jpg')
dst = cv2.blur(src,(5,5))

cv2.imshow('src show',src)
cv2.imshow('dst show',dst)
cv2.waitKey(0)

均值滤波
2)高斯滤波
一般的噪声都是高斯白噪,高斯滤波比较常用,属于低通滤波

src = cv2.imread('timg.jpg')
dst = cv2.GaussianBlur(src,(3,3),1) #高斯滤波,最后一个参数是方差
cv2.imshow('src show',src)
cv2.imshow('dst show',dst)
cv2.waitKey(0)

高斯滤波
3)中值滤波
对椒盐噪声效果较好

src = cv2.imread('1.jpg')
# kernel = np.array([[1,1,0],[1,0,-1],[0,-1,-1]],np.float32) #定义一个卷积核
# dst = cv2.filter2D(src,-1,kernel=kernel)

# dst = cv2.blur(src,(5,5))
# dst = cv2.GaussianBlur(src,(3,3),1)
dst = cv2.medianBlur(src,5)
cv2.imshow('src show',src)
cv2.imshow('dst show',dst)

cv2.waitKey(0)

中值滤波
4)双边滤波

src = cv2.imread('3.PNG')
dst = cv2.bilateralFilter(src,13,80,80)
cv2.imshow('src show',src)
cv2.imshow('dst show',dst)

cv2.waitKey(0)

双边滤波

  • 锐化算子

1)Laplacian锐化

src = cv2.imread('4.jpg')
#拉普拉斯算子
dst = cv2.Laplacian(src,-1,1)
cv2.imshow('src show',src)
cv2.imshow('dst show',dst)

cv2.waitKey(0)

拉普拉斯
2)usm锐化
图像较原图轮廓更清晰

src = cv2.imread('4.jpg')
dst = cv2.GaussianBlur(src,(5,5),0)
dst = cv2.addWeighted(src,2,dst,-1,0)
cv2.imshow('src show',src)
cv2.imshow('dst show',dst)

cv2.waitKey(0)

usm
3)梯度算子
Sobel,Scharr和Laplacian梯度滤波器
1.Sobel,Scharr其实就是一阶或二阶导数,Scharr是对Sobel的优化。Laplacian是求二阶导数
2.Sobel算子是高斯平滑与微分操作的结合体,所以他的抗噪声能力较好
Sobel

src = cv2.imread('5.jpg')
# dst = cv2.Sobel(src,-1,1,0) #竖着方向
dst = cv2.Sobel(src,-1,0,1) #横着方向
cv2.imshow('src show',src)
cv2.imshow('dst show',dst)

cv2.waitKey(0)

sobel
sobel
Scharr

src = cv2.imread('5.jpg')
# dst = cv2.Scharr(src,-1,1,0) #竖着方向
dst = cv2.Scharr(src,-1,0,1) #横着方向
cv2.imshow('src show',src)
cv2.imshow('dst show',dst)

cv2.waitKey(0)

scharr
scharr

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值