深度学习 03_滤波器(OpenCV系列)

本文介绍了图像处理中的卷积概念,包括卷积的步长、填充以及卷积核的选择,特别强调了卷积核常为奇数的原因。接着,通过OpenCV库展示了卷积、方盒滤波、均值滤波、高斯滤波、中值滤波和双边滤波在模糊效果中的应用。此外,还探讨了边缘检测算子,如Sobel、Scharr和Laplacian算子,以及Canny边缘检测算法的步骤和特点。

5. 滤波器

5.1 卷积

5.1.1 什么是图片卷积

图像卷积就是卷积核在图像上按行滑动遍历像素时不断的相乘求和的过程

在这里插入图片描述

5.1.2 步长

**步长就是卷积核在图像上移动的步幅.**上面例子中卷积核每次移动一个像素步长的结果, 如果将这个步长修改为2, 结果会如何? 为了充分扫描图片, 步长一般设为1.

5.1.3 padding

从上面例子中我们发现, 卷积之后图片的长宽会变小. 如果要保持图片大小不变, 我们需要在图片周围填充0. padding指的就是填充的0的圈数.
如果要保持卷积之后图片大小不变, 可以得出等式: (N+2P−F+1)=N(N + 2P - F + 1) = N(N+2PF+1)=N从而可以推导出P=F−12P = \frac{F -1}{2}P=2F1

5.1.4 卷积核的大小

图片卷积中, 卷积核一般为奇数, 比如 3 * 3, 5 * 5, 7 * 7.为什么一般是奇数呢, 出于以下两个方面的考虑:

  1. 根据上面padding的计算公式, 如果要保持图片大小不变, 采用偶数卷积核的话, 比如4 * 4, 将会出现填充1.5圈零的情况.
  2. 奇数维度的过滤器有中心,便于指出过滤器的位置, 即OpenCV卷积中的锚点.

5.1.5 卷积案例

  • filter2D(src, ddepth, kernel[, dst[, anchor[, delta[, borderType]]]])
    • ddepth是卷积之后图片的位深, 即卷积之后图片的数据类型, 一般设为-1, 表示和原图类型一致.
    • kernel是卷积核大小, 用元组或者ndarray表示, 要求数据类型必须是float型.
    • anchor 锚点, 即卷积核的中心点, 是可选参数, 默认是(-1,-1)
    • delta 可选参数, 表示卷积之后额外加的一个值, 相当于线性方程中的偏差, 默认是0.
    • borderType 边界类型.一般不设.
# OpenCV图像卷积操作
import cv2
import numpy as np

#导入图片
img = cv2.imread('./dog.jpeg')

# 相当于原始图片中的每个点都被平均了一下, 所以图像变模糊了.
kernel = np.ones((5, 5), np.float32) / 25
# ddepth = -1 表示图片的数据类型不变
dst = cv2.filter2D(img, -1, kernel)

# 很明显卷积之后的图片模糊了.
cv2.imshow('img'
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值