python图像锐化滤波_OpenCV-Python学习(九):图像滤波
目录:
1.滤波的相关概念
2.卷积操作
3.平滑操作(低通滤波)
均值滤波
中值滤波
高斯滤波
双边滤波
4.锐化操作(高通滤波)
自定义锐化核
USM锐化(UnsharpMask)
5.梯度操作(高通滤波)
Sobel算子
Scharr算子
Laplacian算子
一、滤波的概念
滤波是将信号中特定波段频率滤除的操作,是抑制和防止干扰的一项重要措施。
图像滤波是图像预处理中不可缺少的操作,其处理效果的好坏将直接影响到后续图像处理和分析的有效性和可靠性。图像滤波,即在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制。图像滤波的目的:
1.消除图像中混入的噪声;
2.为图像识别抽取出图像特征。
滤波可分为 低通滤波、高通滤波、中通滤波、阻带滤波。
低通滤波/平滑滤波:减弱或阻隔高频信号,保留低频信号。可使图像变模糊,主要用于去噪。
高通滤波:减弱或阻隔低频信号,保留高频信号。一般用于获取图像边缘、轮廓或梯度。
中通滤波:获取已知频率范围内的信号。
阻带滤波:去掉已知频率范围内的信号。
二、卷积操作
图像的滤波操作一般用卷积操作来实现,卷积核一般称为滤波器。
卷积操作:图像卷积可以看成是一个滑动的窗口(卷积核)在一个比它大的图像上有规则(从左向右,从上往下)地滑动,对每一次窗口覆盖到的图像子区域都会进行点乘操作,并将得到的值作为原图中被窗口覆盖区域的中心像素点的新值。
与CNN里的卷积不同,经典的卷积算子(即卷积核)往往是人们根据研究和经验事先设定好的特征提取算子,而CNN里的卷积核是通过训练不断调整最终得到合适的权值参数。
函数:
1.卷积操作
filter2D(src, ddepth, kernel, dst=None, anchor=None, delta=None, borderType=None)
参数:
ddepth:图像深度。ddepth=-1表示目标图像与原始图像使用相同的图像深度
示例:
import cv2
import numpy
img = cv2.imread("image/1.jpg")
# 1.定义一个卷积核
kernel = numpy.float32([[1, 1, 0], [1, 0, -1], [0, -1, -1]])
# 2.卷积操作
dst = cv2.filter2D(img, -1, kernel)
cv2.imshow("iamge", img)
cv2.imshow("dst", dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
结果如下:
三、平滑操作(低通滤波)
函数:
2.平滑操作(低通滤波)
1)均值滤波:blur(src, ksize)
2)中值滤波:medianBlur(src, ksize),ksize为大于1的奇数
中值滤波一般用于处理椒盐噪声。
3)高斯滤波:GaussianBlur(src, ksize, sigmaX, dst=None, sigmaY=None, borderType=None)
ksize为奇数,
sigmaX是高斯函数在x轴方向上的标准差。
sigmaY是高斯函数在y轴方向上的标准差。若不指定sigmaY,则sigmaY=sigmaX。
4)双边滤波:bilateralFilter(src, d, sigmaColor, sigmaSpace, dst=None, borderType=None)
d是每个像素的领域直径,
sigmaColor:在颜色空间中的过滤sigma。
sigmaSpace:在坐标系空间中的过滤sigma。
sigma为无穷大时,效果等价于高斯模糊。sigma为0时,与原图一样。
高斯滤波和双边滤波的区别:
1)高斯核只考虑了空间分布,没有考虑到像素值的差异,会将图像的边缘模糊掉。
2)双边滤波是基于高斯滤波提出的,结合了图像的空间邻近度和像素值相似度的一种折衷处理,具有保边特性。
示例:
import cv2
img1 = cv2.imread("image/5.jpg")
img2 = cv2.imread("image/25.jpg")
# 1.均值滤波: blur(src, ksize, dst=None, anchor=None, borderType=None)
mean = cv2.blur(img1, ksize=(5, 5))
# 2.中值滤波: medianBlur(src, ksize, dst=None) ksize为大于1的奇数
median = cv2.medianBlur(img1, ksize=7)
# 3.高斯滤波: GaussianBlur(src, ksize, sigmaX, dst=None, sigmaY=None, borderType=None)
# ksize为奇数
# sigmaX是高斯函数在x轴方向上的标准差。若不指定sigmaY,则sigmaY=sigmaX。
gaussian = cv2.GaussianBlur(img2, ksize=(7, 7), sigmaX=6, sigmaY=6)
# 4.双边滤波: bilateralFilter(src, d, sigmaColor, sigmaSpace, dst=None, borderType=None)
# d是每个像素的领域直径
# sigmaColor:在颜色空间中的过滤sigma。sigmaSpace:在坐标系空间中的过滤sigma。
# sigma为无穷大时,效果等价于高斯模糊。sigma为0时,与原图一样。
bilateral = cv2.bilateralFilter(img2, 9, 75, 75)
# bilateral = cv2.bilateralFilter(img2, 9, 0, 0)
cv2.imshow("img1", img1)
cv2.imshow("mean", mean)
cv2.imshow("median", median)
cv2.imshow("img2", img2)
cv2.imshow("gaussian", gaussian)
cv2.imshow("bilateral", bilateral)
cv2.waitKey(0)
cv2.destroyWindow()
结果如下:
四、锐化操作(高通滤波)
示例:
import cv2
import numpy
src = cv2.imread("image/1.jpg")
# 1.自定义锐化核
kernel = numpy.float32([[0, -1, 0], [-1, 5, -1], [0, -1, 0]])
dst1 = cv2.filter2D(src, -1, kernel)
# 2.USM锐化(UnsharpMask)
gaussian = cv2.GaussianBlur(src, (5, 5), 6)
dst2 = cv2.addWeighted(src, 2, gaussian, -1, 0)
cv2.imshow("src", src)
cv2.imshow("dst1", dst1)
cv2.imshow("dst2", dst2)
cv2.waitKey(0)
cv2.destroyWindow()
结果如下:
五、梯度操作(高通滤波)
梯度算子有 Sobel、Scharr 和 Laplacian算子。
Sobel 和 Scharr 其实就是求一阶或二阶导数。Scharr 是对 Sobel(使用小的卷积核求解求解梯度角度时)的优化。而Laplacian 是求二阶导数。
Sobel 算子是高斯平滑与微分操作的结合体,所以它的抗噪声能力很好。
Scharr 滤波器是对Sobel滤波器的改进版本。
函数:
4.梯度操作(高通滤波)
1)Sobel算子
Sobel(src, ddepth, dx, dy, dst=None, ksize=None, scale=None, delta=None, borderType=None)
dx和dy表示的是求导的阶数,0表示这个方向上没有求导,一般为0、1、2。
2)Scharr算子
Scharr(src, ddepth, dx, dy, dst=None, scale=None, delta=None, borderType=None)
dx和dy表示的是求导的阶数,0表示这个方向上没有求导,一般为0、1、2。
3)Laplacian算子
Laplacian(src, ddepth, dst=None, ksize=None, scale=None, delta=None, borderType=None)
示例:
import cv2
import matplotlib.pyplot as plt
gray = cv2.imread("image/2.jpg", cv2.IMREAD_GRAYSCALE)
# 1.Sobel算子: dx和dy表示的是求导的阶数,0表示这个方向上没有求导,一般为0、1、2。
sobel_x = cv2.Sobel(gray, -1, dx=1, dy=0) # x轴方向上的一阶导数
sobel_y = cv2.Sobel(gray, -1, dx=0, dy=1) # y轴方向上的一阶导数
sobel_x_abs = cv2.convertScaleAbs(sobel_x)
sobel_y_abs = cv2.convertScaleAbs(sobel_y)
sobel = cv2.addWeighted(sobel_x, 0.5, sobel_y, 0.5, 0) # 近似有|G|=|Gx|+|Gy|
# 2.Scharr算子: dx和dy表示的是求导的阶数,0表示这个方向上没有求导,一般为0、1、2。
scharr_x = cv2.Scharr(gray, -1, dx=1, dy=0) # x轴方向上的一阶导数
scharr_y = cv2.Scharr(gray, -1, dx=0, dy=1) # y轴方向上的一阶导数
scharr_x_abs = cv2.convertScaleAbs(scharr_x)
scharr_y_abs = cv2.convertScaleAbs(scharr_y)
scharr = cv2.addWeighted(scharr_x_abs, 0.5, scharr_y_abs, 0.5, 0) # 近似有|G|=|Gx|+|Gy|
# 近似有|G|=|Gx|+|Gy|
# 3.Laplacian算子
laplacian = cv2.Laplacian(gray, -1)
# 结合matplotlib显示多张图片
titles = ['Original Gray', 'Sobel x', 'Sobel y', 'Sobel', 'Scharr x', 'Scharr y', 'Scharr', 'Laplacian']
images = [gray, sobel_x, sobel_y, sobel, scharr_x, scharr_y, scharr, laplacian]
for i in range(8):
plt.subplot(2, 4, i + 1)
plt.imshow(images[i], cmap="gray")
plt.title(titles[i])
plt.xticks([]), plt.yticks([])
plt.show()
结果如下:
python图像锐化滤波_OpenCV-Python学习(九):图像滤波相关推荐
- python均值滤波_opencv+python实现均值滤波
本文实例为大家分享了opencv+python实现均值滤波的具体代码,供大家参考,具体内容如下 原理 均值滤波其实就是对目标像素及周边像素取平均值后再填回目标像素来实现滤波目的的方法,当滤波核的大小是 ...
- python实现均值滤波_opencv+python实现均值滤波
本文实例为大家分享了opencv+python实现均值滤波的具体代码,供大家参考,具体内容如下 原理 均值滤波其实就是对目标像素及周边像素取平均值后再填回目标像素来实现滤波目的的方法,当滤波核的大小是 ...
- python图像降采样_OpenCV:十一、图像上采样和降采样
前言 目标 本章中,将学习: 图像金字塔概念 采样API 代码演示 图像金字塔概念 图像金字塔是图像中对尺度表达的一种,最主要用于图像的分割,是一种以多分辨率来解释图像的有效但概念简单的结构. 图像金 ...
- python仿真智能驾驶_opencv+python智能车道检测,助力无人驾驶
近年来,基于人工智能的车道检测算法得到了广泛的研讨.与传统的基于特征的方法相比,许多方法表现出了优越的功能.但是,当使用具有应战性的图像时,其准确率通常仍在低80%或高90%之间,甚至更低. 准确牢靠 ...
- python 答题卡识别_opencv+python机读卡识别整合版
稍微整理了一下这个系列的一二三四章,可能看着更舒服吧--这个系列的解决方案不止一种,调参的方法也是各种各样,反正能够满足需求就极好了 1.预处理 这次的机读卡识别项目来源暑期培训,主要包括内容一张手机 ...
- 【数字图像处理】图像直方图均衡化、空域滤波(均值滤波、中值滤波)、图像锐化(Laplace算子)、图像傅里叶变换实验
图像直方图均衡化.空域滤波.图像锐化.图像傅里叶变换 一.图像直方图均衡化 二.图像空域滤波 1.均值滤波(滤波次数n→3) 2.中值滤波(滤波次数n→3) 3.图像锐化(Laplace算子) 三.图 ...
- 图像锐化一:几个常见的滤波核
文章目录 1.滤波核 2.代码 3. 效果分析 示例1. 示例2. 图像锐化和图像平滑相对应,前者用于增强细节表现,后者一般用于降噪 在图像锐化时,往往会 1. 放大 噪声,2. 引入aritfact ...
- 图像处理合集:图像基础操作(图像翻转、图像锐化、图像平滑等)、图像阈值分割(边缘检测、迭代法、OSTU、区域增长法等)、图像特征提取(图像分割、灰度共生矩阵、PCA图像压缩)
文章目录 说明 一.图像锐化或增强相关 1. 图像点处理 1.1 图像翻转 1.2 幂运算和对数运算 2. 直方图处理 3. 图像平滑 4. 图像锐化 5. 图像增强 二.图像阈值分割 1. 边缘检测 ...
- 深度学习图像融合_基于深度学习的图像超分辨率最新进展与趋势【附PDF】
因PDF资源在微信公众号关注公众号:人工智能前沿讲习回复"超分辨"获取文章PDF 1.主题简介 图像超分辨率是计算机视觉和图像处理领域一个非常重要的研究问题,在医疗图像分析.生物特 ...
- python实现运动模糊图像_OpenCV+Python实现图像运动模糊和高斯模糊
原标题:OpenCV+Python实现图像运动模糊和高斯模糊 运动模糊:由于相机和物体之间的相对运动造成的模糊,又称为动态模糊 OpenCV+Python实现运动模糊,主要用到的函数是cv2.filt ...
最新文章
- 打印页table头部重叠_手把手教你如何清理打印机喷头
- 近邻取样插值和其速度优化
- 火墙之firewalld
- linux eclipse 关联源码,获取Hadoop的源码和通过Eclipse关联Hadoop的源码
- 论文投稿新规则,不用跑出SOTA,还能“内定”发论文?!
- mysql安装被打断_Mysql的安装/性能优化/安全加固
- Unity之读取配置表去加载物体
- java1.8+pydev_Ubuntu 18.04.4 中使用 Eclipse+PyDev 配置 Python 开发环境
- typedef struct 和 struct 的区别
- 百度文库API免费下载百度文库收费资料【python】
- 常用的开源3D游戏引擎(转)
- CS5序列号文件,以后就不用担心序列号了
- 删除win10自带微软中文输入法
- linux下c使用lzma_lzma文件及命令简介
- hub_probe()
- Unity2020找不到Device Simulator
- java上看小说软件_i悦读小说阅读软件 For java
- 洛谷 P2404 自然数的拆分问题(搜索、保证顺序进行搜索)
- Oracle 12c 读书笔记——筑梦之路
- homeassistant搭建_梅林搭建home-assistant
热门文章
- c# rar解压大小_C#解压缩Zip,Rar等压缩文件(详细说明)
- 数据仓库面试学习总结
- 【PHP】高端响应式自适应房屋出售建筑设计企业织梦模板
- 计算机房电源解决方案,数据网络机房 供电系统解决方案
- 商业分析实践指南pdf下载_自媒体营销知识:抖音平台商业营销性分析(可下载)...
- Linux系统管理的基础命令
- 《服务器上搭建Discuz论坛》
- Java实现验证码识别
- Hexo启动页面显示extends includes/layout.pug block content include includes/recent-posts.pug include
- LeetCode题解(1443):收集无向树中所有苹果的最少移动距离(Python)