【openCV边缘检测】用传统方法实现边缘检测(一)提取边缘
Gitee地址:https://gitee.com/jzhou955/edge_detection.git
欢迎star or fork。
项目需求
- 检测图片中特定部分的轮廓。
To do list
- 用各种算子提取元器件的边缘。
- 二值化边缘图,调整二值化阈值得到更清晰的轮廓。
- 调整二值化阈值,获取PCB的边缘。
- 利用色域差异进行边缘提取,提高准确度。
- 两种器件改用不同的色域分离方法,并且在原图上面叠加边缘线。
- 叠加的边缘线调整透明度以及粗细。
- B2B边缘线拟合成直线。
- 遍历测试图片集,看图片明暗对结果的影响。
- Clip中钢片上面的噪点太多,尝试去除:pyrMeanShiftFiltering。
- 提取钢板的上边缘:用两张方法提取出来的边缘图并将其重合。
项目记录
其实一开始的时候就使用了各种opencv中集成的边缘提取算法来对图片进行处理,比如说 Laplacian,Sobel,Scharr,Canny等,但是单种方法的效果都不够理想,最终还是结合多种ISP方法对图片进行处理。
边缘检测是计算机视觉领域非常重要的一种图像特征提取方法,同样也是比较好用的特征提取方法。我们通过边缘检测就是为了找到图像中像素亮度发生剧烈变化像素点集合,通常这些集合表现出来往往是轮廓。因为边缘的提取本身就是一个滤波的过程,通过不同的算子来去提取不同的特征。每种算子都有他的特点,抛开现在神经网络方法不谈,传统的方法一般有三种:Sobel算子,Laplacian算子,Canny算子。
在目标检测中,Sobel算子对灰度渐变和噪声较多的图像处理效果较好,但是Sobel算子对边缘定位不是很准确(图像的边缘不止一个像素),因此精度要求不是很高时,Sobel比较常用。
由于Laplacian算子法对噪声比较敏感,所以很少用该算子检测边缘,而是用来判断边缘像素视为与图像的明区还是暗区。拉普拉斯高斯算子是一种二阶导数算子,将在边缘处产生一个陡峭的零交叉, Laplacian算子是各向同性的,能对任何走向的界线和线条进行锐化,无方向性。这是拉普拉斯算子区别于其他算法的最大优点。
Canny最厉害的地方在于,他提出了一套对于边缘检测算法的标准:
1)以低的错误率检测边缘,也即意味着需要尽可能准确的捕获图像中尽可能多的边缘。
2) 检测到的边缘应精确定位在真实边缘的中心。
3) 图像中给定的边缘应只被标记一次,并且在可能的情况下,图像的噪声不应产生假的边缘。概括来说,边缘要全,位置要准,抵抗噪声要强
Canny边缘检测主要分四步进行:去噪声;计算梯度与方向角;非最大值抑制;滞后阈值化;
scharr:sobel的加强版
prewitt
laplacian
roport
- Roberts 边缘检测因为使用了很少的邻域像素来近似边缘强度,因此对图像中的噪声具有高度敏感性。因此,先对图像做平滑处理再进行Roberts边缘检测效果会更好。
3阶sobel
OpenCV相关函数
- cv2.Sobel(src, ddepth, dx, dy[, ksize[, scale[, delta[, borderType]]]])
- OpenCV 提供三种不同的梯度滤波器,或者说高通滤波器:Sobel,Scharr 和 Laplacian。在数学上,Sobel,Scharr 是求一阶或二阶导数,Scharr 是对 Sobel(使用小的卷积核求解求解梯度角度时)的优化,Laplacian是求二阶导数。
- src:输入图像;
- ddepth:图像颜色深度,针对不同的输入图像,输出图像有不同的深度,-1 表示图像深度一致;
- dx:x 方向求导阶数;
- dy:y 方向求导阶数;
- ksize:内核大小,一般取奇数,1,3,5,7等值;
- scale:缩放大小,默认值为 1;
- delta:增量数值,默认值为 0;
- borderType:边界类型,默认值为 BORDER_DEFAULT。
- 备注:如果 ksize=-1,会使用 3x3 的 Scharr 滤波器,该效果要比 3x3 的 Sobel 滤波器好(而且速度相同,所以在使用 3x3 滤波器时应该尽量使用 Scharr 滤波器)。
- cv.Canny:
- 第一个参数是输入图像img。
- 第二和第三个分别是minVal和maxVal。
要确定那些边界才是真正的边界,需要设置两个阀值:minVal和maxVal。当图像的灰度梯度高于maxVal时被认为是真的边界,那些低于minVal的边界会被抛弃。如果介于两者之间的话,就要看这个点是否与某个被确定为真正边界点相连,如果是,就认为它也是边界点,如果不是就抛弃。 - 第四个参数设置用来计算图像梯度的Sobel卷积核的大小,默认值为3。
- 最后一个参数是L2gradient,它可以用来设定求梯度大小的方程。
【openCV边缘检测】用传统方法实现边缘检测(一)提取边缘相关推荐
- OPENCV之寻找并绘制轮廓以及提取轮廓重心坐标
OPENCV之寻找并绘制轮廓以及提取轮廓重心坐标 1.寻找轮廓 声明:在寻找图像轮廓之前需要对图像进行阈值分割或者Canny.拉普拉斯等边缘检测算子处理. 寻找轮廓的算子: findContours( ...
- OpenCV使用 GrabCut 算法进行交互式前景提取
OpenCV使用 GrabCut 算法进行交互式前景提取 1. 效果图 2. 源码 参考 这篇博客将介绍如何使用Python,OpenCV中的GrabCut 算法来提取图像中的前景,并为此创建一个交互 ...
- python argparse 和opencv模块的组合使用_如何利用Python3和OpenCV对比两张图片的不同,提取差异性...
如何利用Python3和OpenCV对比两张图片的不同,提取差异性 导言:通过机器视觉来计算两个图片之间的差异性,可以快速有效辨别文件.图片是否被篡改,也能帮助用户轻松识别钓鱼网站,确保财产安全. 一 ...
- 如何利用Python3和OpenCV对比两张图片的不同,提取差异性
如何利用Python3和OpenCV对比两张图片的不同,提取差异性 导言:通过机器视觉来计算两个图片之间的差异性,可以快速有效辨别文件.图片是否被篡改,也能帮助用户轻松识别钓鱼网站,确保财产安全. 一 ...
- 用matlab进行边缘检测,用Matlab进行边缘检测
用Lena标准检测图像,图像与代码下面注明了是哪张图像. 一.没有噪声时的检测结果 1 原始图像 2 Sobel算子边缘检测 3 Prewitt算子边缘检测 4 Roberts算子边缘检测 5 Lap ...
- OpenCV 图像边缘提取(三)—— Laplance算子提取边缘原理及OpenCV API使用(C#)
理论:在二阶导数的时候,最大变化处的值为零即边缘是零值.通过二阶导数计算,依据此理论我们可以计算图像二阶导数,提取边缘. API public static void Laplacian(InputA ...
- OpenCV实战(14)——图像线条提取
OpenCV实战(14)--图像线条提取 0. 前言 1. 检测图像轮廓 1.1 图像轮廓 1.2 使用 Canny 算子检测图像轮廓 2. 使用霍夫变换检测图像中的线条 2.1 线条的表示 2.2 ...
- 利用openCV中的cvCanny函数检测人脸的边缘
前几天按照学校的要求做一个项目设计,指导老师让完成一个边缘检测的程序,用来提取出人脸的轮廓.于是将相关过程记录下来. 提取边缘,可以直接使用cvCanny函数. cvCanny是开放计算机视觉(Ope ...
- 【youcans 的 OpenCV 例程200篇】149. 图像分割之边缘模型
欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列,持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列,持续更新中 [youcans 的 OpenCV 例程20 ...
最新文章
- java中建立单链表_Java数据结构,单链表的建立
- SpringMvc 3.x跨域+ajax请求
- Linux 基础 - 磁盘管理 -06
- int类型在计算机中的储存(原码、补码、反码)
- 角色操作-查询所有角色流程分析
- js jQuery取消添加超链接的方法小结
- 机器学习算法一般步骤
- xgboost子树可视化
- WPF 之 鼠标双击事件
- 网络基础知识(面试基础)
- 高效编排有状态应用——TiDB 的云原生实践与思考
- Unity3D实践4:带有出入特效的提示框
- jsf UIComponent组件接口详细注释说明(jsf1.1规范)
- 一次CDN源站负载高的问题排查及解决
- sprintf函数的用法
- 自底向上和自顶向下的区别
- python图片中文字识别
- 远程控制软件TeamViewer轻松解决企业运维难题
- 如何系统磁盘和raid卡的槽位对应起来
- STM32 ADC多通道采样声音传感器和环境光传感器
热门文章
- html 内容未选择时隐藏_html入门 标签入门
- 笔记本机械硬盘性能深入研究
- 注册中心对比大全这样表是给公众号每日一面整理的, 顺便给个关注呗?
- 餐厅小票打印模板_快麦打印机教程 | 如何用手机控制DP358外卖小票机?
- linux minimal bash,制作CentOS8安装U盘时遇到的“Minimal BASH-like…”问题
- 《水文地质学基础》在线平时作业2
- 缩进text-indent标签造成图片也缩进解决方案
- GitHub上最火的40个Android开源项目
- linux 设置显卡命令,Linux 命令行下如何配置nVIDIA显卡 之三
- Java、JSP健身房会员管理系统