ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

09. 算子(索贝尔、沙尔、拉普拉斯算子)

2022-06-23 23:04:49  阅读:147  来源: 互联网

标签:Sobel 09 cv2 ksize dx dy 算子 沙尔


1. 索贝尔(sobel)算子

前面的各种滤波,可以视为低通滤波,后面的各种算子可以视为高通滤波,区别:前面的滤波都是降噪的,算子都是来找图像边界、边缘的。索贝尔算子模拟一阶求导,倒数越大的地方说明变换越剧烈,越有可能是边缘。
Sobel(src, ddepth, dx, dy[, dst[, ksize[, scale[, delta[, borderType]]]]])
image

  • ddepth 一般写-1,如果使用cv的写法的话,就是cv2.CV_64F
  • dx 设置为1,表示求X方向的梯度
  • ksize 是一个数字
  • sobel算子必须分开计算x,y轴,不然的话效果很差
import cv2
import numpy as np
img = cv2.imread('./bg.jpg')
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)
# dst = cv2.add(dx, dy)  或以下写法
dst = cv2.addWeightd(dx, 0.5, dy, 0.5, gamma=0)
import cv2
import numpy as np

# 卷积
bg = cv2.imread('images/pau3W8ytsv.jpg')
print(bg.shape)
cv2.namedWindow('image', cv2.WINDOW_NORMAL)
cv2.resizeWindow('image', 800, 375)

# dx = cv2.Sobel(bg, -1, dx=1, dy=0, ksize=3)
# dy = cv2.Sobel(bg, -1, dx=0, dy=1, ksize=3)
# 这种写法和上面的写法是一样的,这些算子,就是通过不同的卷积核来实现的
kx = np.array([[-1, 0, 1], [-2, 0, 2], [-1, 0, 1]], np.float32)
ky = np.array([[-1, -2, -1], [0, 0, 0], [1, 2, 1]], np.float32)
dx = cv2.filter2D(bg, -1, kx)
dy = cv2.filter2D(bg, -1, ky)

print(dx.shape, dx.dtype)
print(dy.shape, dy.dtype)
dst = cv2.add(dx, dy)

cv2.imshow('image', bg)
cv2.imshow('dst', dst)

cv2.waitKey(0)
cv2.destroyAllWindows()

2. 沙尔(Scharr)算子

Scharr(src, ddepth, dx, dy[, dst[, scale[, delta[, borderType]]]])

  • 当内核大小为3时,以上Sobel内核可能产生比较明显的误差,毕竟Sobel算子只是求取了倒数的近似值,为解决这一问题,提供了沙尔函数,但该函数仅作用于大小为3的内核。该函数的运算与Sobel函数一样快,但结果却更加精确
  • Scharr算子核Sobel很类似,只不过使用不同的kernel值,放大了像素变换的情况
    image
  • Scharr算子只支持3*3的kernel,所以没有了kernel参数了;
  • Scharr算子只能求x方向或y方向的边缘;
  • Sobel算子的ksize设置为-1就是Scharr算子;
  • Scharr擅长寻找细小的边缘,一般用的较少;

3. 拉普拉斯算子

原理:在一阶导数上,在求导,二阶导数为0,利用这一特性去寻找图像的边缘
image

  • Laplacian(src, ddpth[, dst[, ksize[, scale[, delta[, borderType]]]]])
  • ksize 是一个数字

标签:Sobel,09,cv2,ksize,dx,dy,算子,沙尔
来源: https://www.cnblogs.com/TheoryDance/p/16407100.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有