前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OpenCV 滤波与卷积之 —— 梯度和导数

OpenCV 滤波与卷积之 —— 梯度和导数

作者头像
为为为什么
发布2022-08-09 14:58:41
6690
发布2022-08-09 14:58:41
举报
文章被收录于专栏:又见苍岚

本文摘录OpenCV 中的卷积、滤波相关操作内容,重点介绍 Opencv 中的梯度操作。

梯度和导数

平滑一般也称“模糊”,是一种简单而又常用的图像处理操作。平滑图像的目的有很多,但通常都是为了减少噪声和伪影。在降低图像分辨率的时候,平滑也是十分重要的。OpenCV 提供5种不同的平滑操作,每种操作都有对应的函数实现,这些操作平滑的结果有着细微的差别。

1. cv2.sobel()

索贝尔导数,官网链接

  • 函数使用
代码语言:javascript
复制
cv2.Sobel(
	src, 			# 源图像
	ddepth, 		# 输出图像深度,-1 和输入图像保持一致
	dx, 			# 导数 x 的阶。
	dy[, 			# 导数 y 的阶。
	dst[, 
	ksize=3[, 		# 扩展的 Sobel 核尺寸,必须是1、3、5或7。
	scale=1[, 		# 计算的导数值的可选缩放因子; 默认情况下,不应用缩放
	delta=0[, 
	borderType]]]]]) → dst

  • 示例代码
代码语言:javascript
复制
img = mt.cv_rgb_imread('img1.jpg', gray=False)
x0y1 = cv2.Sobel(img, -1, 0, 1)
x1y0 = cv2.Sobel(img, -1, 1, 0)
x1y1 = cv2.Sobel(img, -1, 1, 1)
PIS(img, [x0y1, 'x0y1'], [x1y0, 'x1y0'], [x1y1, 'x1y1'])

代码语言:javascript
复制
img = mt.cv_rgb_imread('img1.jpg', gray=False)
x0y2k7 = cv2.Sobel(img, -1, 0, 2, ksize=7)
x2y0k7 = cv2.Sobel(img, -1, 2, 0, ksize=7)
x3y3k7 = cv2.Sobel(img, -1, 3, 3, ksize=7)
PIS(img, [x0y2k7, 'x0y2k7'], [x2y0k7, 'x2y0k7'], [x3y3k7, 'x3y3k7'])

为了更好地理解Sobe1算子,我们必须明确它不是真正的导数,因为它定义在离散空间上。Sobel算子实际上表示的是一个多项式,也就是说在x方向上进行二阶Sobel运算表示的并不是二阶导数,而是对抛物线函数的局部拟合。这也就说明了为什么要使用一个更大的核,更大的核拟合了更多的像素。

2. Scharr滤波器

对于3×3 的Sobel滤波器,梯度角距离水平或垂直方向越远,误差越明显。在OpenCV中,调用cv2.sobel()时设置ksize为cv2.SCHARR,即可消除3×3 这样小但是快的Sobel导数滤波器所带来的误差。Scharr滤波器和Sobel滤波器同样很快,但是前者精度更高。因此选择3×3 的滤波器时,应当使用Scharr滤波器。

  • 示例代码
代码语言:javascript
复制
img = mt.cv_rgb_imread('img1.jpg', gray=False)
res = cv2.Sobel(img, -1, 1, 0, ksize=cv2.FILTER_SCHARR)
PIS(img, res)

3. cv2.Laplacian()

cv2.laplacian() 实现了对拉普拉斯(Laplacian)算子的离散近似 官方文档

  • 拉普拉斯变换
Laplace (f)=\frac{\partial^{2} f}{\partial x{2}}+\frac{\partial{2} f}{\partial y^{2}}
  • 函数使用
代码语言:javascript
复制
cv2.Laplacian(src, ddepth[, dst[, ksize[, scale[, delta[, borderType]]]]]) → dst

  • 示例代码
代码语言:javascript
复制
img = mt.cv_rgb_imread('img1.jpg', gray=False)
res3 = cv2.Laplacian(img, -1, ksize = 3)
res5 = cv2.Laplacian(img, -1, ksize = 5)
res7 = cv2.Laplacian(img, -1, ksize = 7)
PIS(img, res3, res5, res7)

示例源码

参考资料

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年3月14日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 梯度和导数
    • 1. cv2.sobel()
      • 2. Scharr滤波器
        • 3. cv2.Laplacian()
        • 示例源码
        • 参考资料
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档