OpenCV2:高中篇 图像锐化技术-边缘检测算子
一.简介
从一张图像中,把轮廓提取出来
边缘检测算子:Sobel Laplace Roberts Prewitt Canny 及 Marr-Hildreth
任何边缘检测算法都不可能在未经处理的原始数据上很好地处理,所以第一步是对原始数据与高斯平滑模板作卷积
二.边缘提取
1.Canny
Canny边缘检测的基本思想是:首先对图像选择一定的Gauss(高斯)滤波器进行平滑滤波,然后采用非极值抑制技术进行处理得到边缘图像
Canny算子法实现的方式为:图像先用2D高斯滤波模板进行卷积以消除噪声,再对滤波后图像中的每个像素计算其梯度的大小和方向
(1)降噪
(2)寻找梯度
(3)跟踪边缘
Canny算法分为4个步骤:
(1)滤波平滑噪声
任何边缘检测算法都不可能在未经处理的原始数据上工作,第一步是对原始数据与高斯mask作卷积,得到的图像与原始图像有些轻微模糊,用高斯滤波器来处理高斯平滑的图像
(2)利用已有的一阶偏导算子计算梯度
Canny算法的基本思想是寻找一副图像中灰度强度变化最强的位置,变化最强即梯度位置,平滑后的图像中每个像素点可以由Sobel算子(一种卷积运算)来获得
(3)非极大值抑制
这一步是将模糊(blurred)的边界变得清晰(sharp),保留了每个像素点上的梯度强度大的极大值,而删掉其他值
(4)双阈值法抑制假边缘,连接真边缘
强边界用白色表示,弱边界用灰色表示,通过这样来去除噪声点
CV_EXPORTS_W void Canny(InputArray image,
OutputArray edges,
double threshold1, double threshold2,
int apertureSize=3,
bool L2gradient=false)
- image,edges
输入和输出图像
- threshold1,threshold2
底阈值和高阈值,值越大,找到的边缘越少
- apertureSize
表示应用Sobel算子的孔径大小,默认值为3
- L2gradient
表示一个计算图像梯度幅值的表示,默认值为false
1 2 3 | cv::Mat im; cv::Mat result cv::Canny(im, result, 50, 150); |
2.Sobel(索贝尔边缘算子)
3.Laplace(拉普拉斯边缘算子)
4.Roberts(罗伯茨边缘算子)
Roberts 算子是一种利用局部差分算子寻找边缘的算子
Roberts 算子在边缘检测的效果中由于没有经过图像平滑处理的,因此图像噪声一般得不到很好的抑制,也因此影响到计算定位时容易丢失一部分的边缘。但是Roberts 算子的定位精度较高,对具有陡峭的低噪声图像响应较好
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)