图像梯度处理

  • Sobel算子

  

  水平方向:

  • 对于线条A和线条B,右侧像素值与左侧像素值的差值不为零,因此是边界

   上下像素值差值为0,左右素值的差值不为零,分布为正负,

   离的近的为2,离的远的为1

  

          P5=(P3-P1)+2(P6-P4)+(P9-P7)  

  竖直方向:

  • 对于线条A和线条B,上侧像素值与下侧像素值的差值不为零,因此是边界

   左右像素值差值为0,上下素值的差值不为零,分布为正负,

   离的近的为2,离的远的为1

          P5=(P7-P1)+2(P8-P2)+(P9-P3)

  在使用时,P5可能是负数,所以要取绝对值!

  cv2.Sobel( src, depth, dx, dy[, ksize[, scale[, delta[, borderType]]]] )

  • src表示输入图像

  • depth表示输出图像的深度

  • dx表示x轴方向的求导阶数

  • dy表示y轴方向的求导阶数

    • 注意要分别算x,y轴,不能同时算。同时算不准确
  • ksize表示Sobel核的大小

  • scale表示计算导数值所采用的缩放因子,默认值是1

  • delta表示加在输出图像的值,默认值是0

  • borderType表示边界样式

img = cv2.imread('1.jpg',cv2.IMREAD_GRAYSCALE)
#x轴方向的求导阶数
soblex = cv2.Sobel(img,cv2.CV_64F,1,0,ksize=3)
#取绝对值
soblex = cv2.convertScaleAbs(soblex)
#x轴方向的求导阶数
sobley = cv2.Sobel(img,cv2.CV_64F,0,1,ksize=3)
sobley = cv2.convertScaleAbs(sobley)
#x,y轴综合
soblexy = cv2.addWeighted(soblex,0.5,sobley,0.5,0) #对比,xy同时算
soblexy2 = cv2.Sobel(img,cv2.CV_64F,1,1,ksize=3)
soblexy2 = cv2.convertScaleAbs(soblexy2) res = np.hstack((img,soblexy,soblexy2))
cv_show('img',res)

  • Scharr算子

  Scharr算子和Sobel算子具有同样速度且精度更高。当Sobel核结构不大时,精度不高,Scharr算子具有更高的精度,Scharr算子是Sobel算子的改进。

img = cv2.imread('1.jpg',cv2.IMREAD_GRAYSCALE)
scharrx = cv2.Scharr(img,cv2.CV_64F,1,0)
scharrx = cv2.convertScaleAbs(scharrx)
scharry = cv2.Scharr(img,cv2.CV_64F,0,1)
scharry = cv2.convertScaleAbs(scharry)
scharrxy = cv2.addWeighted(scharrx,0.5,scharry,0.5,0) res = np.hstack((img,scharrxy))
cv_show('img',res)

  • Laplacian算子

  Laplacian(拉普拉斯)算子是二阶导数算子,具有旋转不变性,没有边缘的方向信息,双倍加强噪声对图像的影响。通常情况下,Laplacian算子的系数之和为零。

  Laplacian算子对噪音点敏感!

   

  

                

    

     •非边界(梯度小,边缘不明显)

    P5=(94+80+92+85)-4x88=-1

    •边界(梯度大,边缘明显)

    P5=(200+204+175+158)-4x88=385

    P5=(20+24+17+15)-4x88=-276

img = cv2.imread('1.jpg',cv2.IMREAD_GRAYSCALE)
laplacian = cv2.Laplacian(img,cv2.CV_64F)
laplacian = cv2.convertScaleAbs(laplacian) res = np.hstack((img,laplacian))
cv_show('res',res)

 

  • Sobel算子 Scharr算子 Laplacian算子对比

  

Sobel算子 Scharr算子 Laplacian算子的更多相关文章

  1. OpenCV——边缘检测(sobel算子、Laplacian算子、scharr滤波器)

    #include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace st ...

  2. 【OpenCV新手教程之十二】OpenCV边缘检測:Canny算子,Sobel算子,Laplace算子,Scharr滤波器合辑

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/25560901 作者:毛星云(浅墨) ...

  3. 机器学习进阶-图像梯度计算-scharr算子与laplacian算子(拉普拉斯) 1.cv2.Scharr(使用scharr算子进行计算) 2.cv2.laplician(使用拉普拉斯算子进行计算)

    1. cv2.Scharr(src,ddepth, dx, dy), 使用Scharr算子进行计算 参数说明:src表示输入的图片,ddepth表示图片的深度,通常使用-1, 这里使用cv2.CV_6 ...

  4. [OpenCV入门教程之十二】OpenCV边缘检测:Canny算子,Sobel算子,Laplace算子,Scharr滤波器合辑

    http://blog.csdn.net/poem_qianmo/article/details/25560901 本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog ...

  5. Python 图像处理 OpenCV (12): Roberts 算子、 Prewitt 算子、 Sobel 算子和 Laplacian 算子边缘检测技术

    前文传送门: 「Python 图像处理 OpenCV (1):入门」 「Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像」 「Python ...

  6. Laplacian算子

    多元函数的二阶导数又称为Laplacian算子: \[ \triangledown f(x, y) = \frac {\partial^2 f}{\partial x^2} + \frac {\par ...

  7. 实现Sobel算子滤波、Robers算子滤波、Laplace算子滤波

    前几天,老师布置了这样一个任务,读取图片并显示,反色后进行显示:进行Sobel算子滤波,然后反色,进行显示:进行Robers算子滤波,然后反色,进行显示.我最后加上了Laplace算子滤波,进行了比较 ...

  8. Spark常用算子-KeyValue数据类型的算子

    package com.test; import java.util.ArrayList; import java.util.List; import java.util.Map; import or ...

  9. Spark常用算子-value数据类型的算子

    package com.test; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; im ...

随机推荐

  1. 浅谈Java之属性赋值的先后顺序

    首先,什么是属性? 属性也叫作成员变量,是类的组成部分之一. 我们都知道Java一个类可以包含有: 属性,或者成员变量 构造器 方法,或者叫函数 代码块,或者叫程序段 内部类 那么结合这些,我们就有了 ...

  2. PHP+mysql常考题

    PHP+mysql常考题 来自<PHP程序员面试笔试宝典>,涵盖了近三年了各大型企业常考的PHP面试题,针对面试题提取出来各种面试知识也涵盖在了本书. 常考的mysql基础题 问题:设教务 ...

  3. 记录一次elasticsearch-5.6.4宕机排查经历

    犯罪现场~~ es: 三节点,配置相同 内存: 248G CPU: 没注意看 磁盘: 2T data: 380G左右 indices: 近9800条 在下才疏学浅,目前跟着大佬学习,这个问题还没解决, ...

  4. Devops 开发运维高级篇之微服务代码上传和代码检查

    Devops 开发运维高级篇之微服务代码上传和代码检查 微服务持续集成(1)-项目代码上传到Gitlab 微服务持续集成(2)-从Gitlab拉取项目源码 微服务持续集成(3)-提交到SonarQub ...

  5. 深入剖析CVE-2021-40444-Cabless利用链

    背景 CVE-2021-40444为微软MHTML远程命令执行漏洞,攻击者可通过传播Microsoft Office文档,诱导目标点击文档从而在目标机器上执行任意代码.该漏洞最初的利用思路是使用下载c ...

  6. 数据透视:Excel数据透视和Python数据透视

    作者 | leo 早于90年代初,数据透视的概念就被提出,主要的应用场景是处理大量数据的交互式汇总查询,它实现了行或列的移动,使得行可以移到列上,列移到行上,从而根据使用者的诉求取对关注的数据子集进行 ...

  7. PentestBOX教程

    0x01 Pentest BOX Pentest Box:渗透测试盒子,是一款Windows平台下预配置的便携式开源渗透测试环境,而它也是著名黑客Kapustkiy常用的工具之一.这里集成的大都是Li ...

  8. Gopher必读:HttpClient的两个坑位

    http是我们最常见的客户端/服务端传输协议,在golang中,默认的net/http包有一些坑位,需要调整以获得更加性能. 在golang程序中,我也遇到因为不合理使用 http client导致的 ...

  9. BI和报表的区别在哪?还傻傻分不清楚吗?

    1.面向人群不同 报表主要针对IT人员,或者专业的报表开发人员.用户需要具备一定的编程知识.制作一张报表通常需要先由业务人员提出需求,再由IT部门人员取数制作报表. BI主要面向业务人员和管理人员.B ...

  10. 泛型种树(generic) 代码

    再这个案例中我们,为什么要使用泛型约束 使用约束的原因 约束指定类型参数的功能和预期. 声明这些约束意味着你可以使用约束类型的操作和方法调用. 如果泛型类或 方法对泛型成员使用除简单赋值之外的任何操作 ...