图像梯度

我们知道一阶导数可以用来求极值。把图片想象成连续函数,因为边缘部分的像素值与旁边的像素明显有区别,所以对图片局部求极值,就可以得到整幅图片的边缘信息。不过图片是二维的离散函数,导数就变成了差分,这个查分就变成了图像梯度。

1. 垂直边缘提取

滤波是应用卷积来实现的,卷积的关键就是卷积核。我们来考察下面这个卷积核:

这个核是用来提取图片中的垂直边缘的,怎么做到的呢?看下图:

当前列左右两侧的元素进行差分,由于边缘的值明显小于(或大于)周边像素,所以边缘的差分结果会明显不同,这样就提取出垂直边缘。同理,把上面的那个矩阵转置一下,就是提取水平边缘。这种差分操作就成为图像的梯度计算:

importcv2importnumpy as np

img= cv2.imread('sudoku.jpg', 0)#自己进行垂直边缘提取

kernel = np.array([[-1, 0, 1],

[-2, 0, 2],

[-1, 0, 1]], dtype=np.float32)

dst_v= cv2.filter2D(img, -1, kernel)#自己进行水平边缘提取

dst_h = cv2.filter2D(img, -1, kernel.T)#横向并排对比显示

cv2.imshow('edge', np.hstack((img, dst_v, dst_h)))

cv2.waitKey(0)

2. Sobel算子

上面这种差分方法就叫Sobel算子,它先在垂直方向上计算梯度 Gx = k1 x src,再在水平方向计算梯度Gy = k2 x src,最后求出总梯度:

我们可以把前面的代码用Sobel算子更简单的实现:

sobelx = cv2.Sobel(img, -1, 1, 0, ksize=3) #只计算x方向

sobely = cv2.Sobel(img, -1, 0, 1, ksize=3) #只计算y方向#横向并排对比显示

cv2.imshow('edge', np.hstack((img, sobelx, sobely)))

cv2.waitKey(0)

还有其他算子,比如只利用领域间的原始差值来检测边缘的Prewitt算子

还有比Sobel更好用的Scharr算子

这些算法都是一阶边缘检测的代表。

3. Laplacian算子

高数中用一阶导数求极值,在这些极值的地方,二阶导数为0,所以也可以求二阶导计算梯度:

一维的一阶和二阶差分公式分别为:

提取前面的系数,那么一维的Laplacian的滤波核是:

对于二维函数f(x,y),两个方向的二阶差分分别是:

合在一起:

同样提取前面的系数,那么二维的Laplacian滤波核就是:

这就是 Laplacian 算子的图像卷积模板,有些资料在此基础上考虑斜对角情况,将卷积核扩展为:

laplacian = cv2.Laplacian(img, -1)#横向并排对比显示

cv2.imshow('edge', np.hstack((img, laplacian)))

cv2.waitKey(0)

Laplacian算子是二阶边缘检测的典型代表。

python怎么计算图像梯度_OpenCV-Python-图像梯度相关推荐

  1. Python数学计算工具5、Python求最最小公倍数

    最小公倍数百度解析: 两个或多个整数公有的倍数叫做它们的公倍数,其中除0以外最小的一个公倍数就叫做这几个整数的最小公倍数.整数a,b的最小公倍数记为[a,b],同样的,a,b,c的最小公倍数记为[a, ...

  2. python 科学计算设计_《Python科学计算-(第2版)》怎么样_目录_pdf在线阅读 - 课课家教育...

    第1章 Python科学计算环境的安装与简介 1 1.1 Python简介 1 1.1.1 Python 2还是Python 3 1 1.1.2 开发环境 2 1.1.3 集成开发环境(IDE) 5 ...

  3. python科学计算第三版-Python科学计算PDF

    Python科学计算(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1VYs9BamMhCnu4rfN6TG5bg 提取码:2zzk 复制这段内容后打开百度网盘手机A ...

  4. python 科学计算基础教程电子版-Python 科学计算基础 (整理)

    Python是一种面向对象的.动态的程序设计语言,具有非常简洁而清晰的语法,既可以用于快速开发程序脚本,也可以用于开发大规模的软件,特别适合于完成各种高层任务. 随着NumPy.SciPy.matpl ...

  5. python怎么计算图像梯度_opencv python图像梯度实例详解

    这篇文章主要介绍了opencv python图像梯度实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一阶导数与Soble算子 二阶导数与拉普 ...

  6. python柱状图标注均值标准差_OpenCV Python 图像矩阵的均值和标准差

    By 凌顺 2019年9月17日 本示例使用的OpenCV版本是:OpenCV 4.1.1 运行Python的编辑器:Jupyter notebook 6.0.0 实现目的 学会使用NumPy的mea ...

  7. python 科学计算设计_用Python做科学计算 高清晰PDF

    用Python做科学计算一书介绍如何用Python开发科学计算的应用程序,除了介绍数值计算之外,我们还将着重介绍如何制作交互式的2D.3D图像:如何设计精巧的程序界面:如何和C语言所编写的高速计算程序 ...

  8. python科学计算_可视化图解Python科学计算包NumPy

    NumPy包是python生态系统中数据分析.机器学习和科学计算的主力. 它极大地简化了向量和矩阵的操作.Python的一些主要软件包依赖于NumPy作为其基础架构的基础部分(例如scikit-lea ...

  9. python 科学计算设计_用Python做科学计算 pdf版

    本书将介绍如何用Python开发科学计算的应用程序,除了介绍数值计算之外,我们还将着重介绍如何制作交互式的2D.3D图像:如何设计精巧的程序界面:如何和C语言所编写的高速计算程序结合:如何编写声音.图 ...

  10. python opencv视频处理教程_OpenCV+Python详细教程-图片+视频(一)-Go语言中文社区...

    环境 Python3以上的版本+OpenCV+PyCharm 图片 目标 读入,显示,保存图像 对应的函数:cv2.imread(),cv2.imshow(),cv.imwrite() 1.1读取图像 ...

最新文章

  1. Nginx下配置Http Basic Auth保护目录
  2. 机器学习基础专题:主成分分析技术PCA
  3. 计算机传票录入教案,传票翻打教案.docx
  4. JS:2.1,流程控制(if,switch)高级
  5. 20211119 Latex中参考文献中的人名怪字母如何输入
  6. 【技术分享】CSS 实现渐变色背景
  7. 【转】产品经理如何进行BRD,MRD,PRD,DRD,FRD编写
  8. 文本挖掘之 文本相似度判定
  9. 更改API级别的Android Studio
  10. 特征提取算法 知乎_对话 | 港科大教授权龙:为什么三维重建才是计算机视觉的灵魂?...
  11. 卷积神经网络--MINIST数据集
  12. 如何用“项目管理方法论”的思维,提升研发项目管理水平?
  13. 商品信息SKU数据库设计
  14. 新手必看的入门编程教程
  15. echart--axisLabel中值太长不自动换行
  16. 菜鸟入门--摄影术语
  17. ppt关闭受保护视图
  18. C#验证身份证是否有效
  19. Verilog HDL学习笔记
  20. rpt是什么的缩写_rpt是什么意思车上的

热门文章

  1. calculate简写_通用简写表
  2. 十分钟理清常见的开源协议
  3. 微信小程序学习记录【1】【项目结构构成、官方文档构成、基本配置】
  4. 校园枪击案后,这个美国小哥开发了“枪支检测器”!迅速定位疑犯,适配任何摄像头...
  5. Linux上部署和使用Blast序列比对工具
  6. 理解 与 计算 物联网产品的电池使用寿命
  7. BlackBerry Java客户端开发项目实例教程二
  8. Understanding Throughput-Oriented Architectures
  9. Kafka生产者和消费者分区策略部分源码解析
  10. 阿里云发布三大人工智能产品,构建最全AI平台