导航:首页 > 源码编译 > canny算法

canny算法

发布时间:2022-01-23 04:59:18

① Canny算子的发展

Canny 的目标是找到一个最优的边缘检测算法,最优边缘检测的含义是:
好的检测- 算法能够尽可能多地标识出图像中的实际边缘。
好的定位- 标识出的边缘要尽可能与实际图像中的实际边缘尽可能接近。
最小响应- 图像中的边缘只能标识一次,并且可能存在的图像噪声不应标识为边缘。
为了满足这些要求 Canny 使用了变分法,这是一种寻找满足特定功能的函数的方法。最优检测使用四个指数函数项的和表示,但是它非常近似于高斯函数的一阶导数。

② Canny算子的介绍

Canny边缘检测算子是John F. Canny于 1986 年开发出来的一个多级边缘检测算法。更为重要的是 Canny 创立了边缘检测计算理论(Computational theory of edge detection)解释这项技术如何工作。

③ canny算法的OpenCV中的Canny函数

采用
Canny
算法做边缘检测
void
cvCanny(
const
CvArr*
image,
CvArr*
edges,
double
threshold1,double
threshold2,
int
aperture_size=3
);
--image
输入图像.
--edges
输出的边缘图像
--threshold1
第一个阈值
--threshold2
第二个阈值
--aperture_size
Sobel
算子内核大小
(见
cvSobel).
函数
cvCanny
采用
CANNY
算法发现输入图像的边缘而且在输出图像中标识这些边缘。threshold1和threshold2
当中的小阈值用来控制边缘连接,大的阈值用来控制强边缘的初始分割。

④ canny 算法的阈值,有两个,到底是做什么用的

第一个是低阈值,第二个高阈值
高阈值比较严格,求的边缘很少,认为高阈值的边缘都是有效。低阈值宽松,求的边缘很多(一般包括了高阈值求到的边缘),其中不少是无效的边缘(反正不想要的)。
先用高阈值求边缘。canny求得的边缘希望是连在一起的(通常是封闭的),但高阈值求的边缘一般断断续续。断开的地方如果低阈值求的边缘存在,就用低阈值的边缘接上去,目的让边缘尽量都连在一起。其它情况下低阈值的边缘是不用的。

两个阈值是有区别的,高的那个阈值是将要提取轮廓的物体与背景区分开来,就像阈值分割的那个参数一样,是决定目标与背景对比度的,低的那个阈值是用来平滑边缘的轮廓,有时高的阈值设置太大了,可能边缘轮廓不连续或者不够平滑,通过低阈值来平滑轮廓线,或者使不连续的部分连接起来

⑤ canny算法的最优边缘准则

Canny 的目标是找到一个最优的边缘检测算法,最优边缘检测的含义是:
(1)最优检测:算法能够尽可能多地标识出图像中的实际边缘,漏检真实边缘的概率和误检非边缘的概率都尽可能小;
(2)最优定位准则:检测到的边缘点的位置距离实际边缘点的位置最近,或者是由于噪声影响引起检测出的边缘偏离物体的真实边缘的程度最小;
(3)检测点与边缘点一一对应:算子检测的边缘点与实际边缘点应该是一一对应。
为了满足这些要求 Canny 使用了变分法(calculus of variations),这是一种寻找优化特定功能的函数的方法。最优检测使用四个指数函数项表示,但是它非常近似于高斯函数的一阶导数。

⑥ canny算法的算法的实现步骤

Canny边缘检测算法可以分为以下5个步骤: 应用高斯滤波来平滑图像,目的是去除噪声 找寻图像的强度梯度(intensity gradients) 应用非最大抑制(non-maximum suppression)技术来消除边误检(本来不是但检测出来是) 应用双阈值的方法来决定可能的(潜在的)边界 利用滞后技术来跟踪边界 1. 图像平滑(去噪声)
任何边缘检测算法都不可能在未经处理的原始数据上很好地工作,所以第一步是对原始数据与高斯 mask 作卷积,得到的图像与原始图像相比有些轻微的模糊(blurred)。这样,单独的一个像素噪声在经过高斯平滑的图像上变得几乎没有影响。以下为一个5X5高斯滤波器(高斯核,标准差delta=1.4),其中A为原始图像,B为平滑后的图像。


2. 寻找图像中的强度梯度
Canny算法的基本思想是找寻一幅图相中灰度强度变化最强的位置。所谓变化最强,即指梯度方向。平滑后的图像中每个像素点的梯度可以由Sobel算子(一种卷积运算)来获得(opencv中有封装好的函数,可以求图像中每个像素点的n阶导数)。首先,利用如下的核来分别求得沿水平(x)和垂直(y)方向的梯度G_X和G_Y。
K_{GX} = [-1 0 1 ; -2 0 2 ; -1 0 1], K_{GY} = {1 2 1 ; 0 0 0 ; -1 -2 -1}
之后便可利用公式来求得每一个像素点的梯度度量值(gradient magnitude,可能翻译得不准确)。
,有时为了计算简便,也会使用G_X和G_Y的无穷大范数来代替二范数。把平滑后的图像中的每一个点用G代替,可以获得如下图像。从下图可以看出,在变化剧烈的地方(边界处),将获得较大的梯度度量值G,对应的颜色为白色。然而,这些边界通常非常粗,难以标定边界的真正位置。为了做到这一点(参考非极大抑制Non-maximum suppression一节),还必须存储梯度方向,其公式如下图所示。也就是说在这一步我们会存数两块数据,一是梯度的强度信息,另一个是梯度的方向信息。

3. 非极大抑制Non-maximum suppression
这一步的目的是将模糊(blurred)的边界变得清晰(sharp)。通俗的讲,就是保留了每个像素点上梯度强度的极大值,而删掉其他的值。对于每个像素点,进行如下操作:
a) 将其梯度方向近似为以下值中的一个(0,45,90,135,180,225,270,315)(即上下左右和45度方向)
b) 比较该像素点,和其梯度方向正负方向的像素点的梯度强度
c) 如果该像素点梯度强度最大则保留,否则抑制(删除,即置为0)
为了更好的解释这个概念,看下图。

图中的数字代表了像素点的梯度强度,箭头方向代表了梯度方向。以第二排第三个像素点为例,由于梯度方向向上,则将这一点的强度(7)与其上下两个像素点的强度(5和4)比较,由于这一点强度最大,则保留。处理后效果如下图所示。

上图中,可以想象,边界处的梯度方向总是指向垂直于边界的方向,即最后会保留一条边界处最亮的一条细线。
4.双阈值(Double Thresholding)
经过非极大抑制后图像中仍然有很多噪声点。Canny算法中应用了一种叫双阈值的技术。即设定一个阈值上界和阈值下界(opencv中通常由人为指定的),图像中的像素点如果大于阈值上界则认为必然是边界(称为强边界,strong edge),小于阈值下界则认为必然不是边界,两者之间的则认为是候选项(称为弱边界,weak edge),需进行进一步处理。经过双阈值处理的图像如下图所示

上图中右侧强边界用白色表示,弱边界用灰色表示。
5.利用滞后的边界跟踪
这里就不细作解释了。大体思想是,和强边界相连的弱边界认为是边界,其他的弱边界则被抑制。
以上内容均翻译自参考文献【4】
上一个网络版本:
图像中的边缘可能会指向不同的方向,所以 Canny 算法使用 4 个 掩模(mask) 检测水平、垂直以及对角线方向的边缘。原始图像与每个 mask 所作的卷积都存储起来。对于每个点我们都标识在这个点上的最大值以及生成的边缘的方向。这样我们就从原始图像生成了图像中每个点亮度梯度图以及亮度梯度的方向。以下两个公式分别求取高斯滤波后图像的梯度幅值及其方向的表达式。这一步,也叫称为非极大抑制(Non-maximum suppression)。


3. 在图像中跟踪边缘
较高的亮度梯度比较有可能是边缘,但是没有一个确切的值来限定多大的亮度梯度是边缘多大又不是,所以 Canny 使用了滞后阈值。
滞后阈值(Hysteresis thresholding) 需要两个阈值,即高阈值与低阈值。假设图像中的重要边缘都是连续的曲线,这样我们就可以跟踪给定曲线中模糊的部分,并且避免将没有组成曲线 的噪声像素当成边缘。所以我们从一个较大的阈值开始,这将标识出我们比较确信的真实边缘,使用前面导出的方向信息,我们从这些真正的边缘开始在图像中跟踪 整个的边缘。在跟踪的时候,我们使用一个较小的阈值,这样就可以跟踪曲线的模糊部分直到我们回到起点。
一旦这个过程完成,我们就得到了一个二值图像,每点表示是否是一个边缘点。
一个获得亚像素精度边缘的改进实现是在梯度方向检测二阶方向导数的过零点,它在梯度方向的三阶方向导数满足符号条件。
滞后阈值也可以用于亚像素边缘检测。

⑦ 求教canny算子中非极大值抑制算法的理解

冈萨雷斯 的图像处理理论讲的很好,我推荐给你吧 还有opencv 虽然把这些算法全部封装了,但是以后叫你改进算法,还是要知道原理,和大致代码的意思。 canny 边缘检测 还是好好去理解吧

⑧ canny算子

楼下好搞笑,,,那是边缘提取的算法哦。。。哈哈哈 笑死我了

⑨ Canny算子的结论

Canny 算法适用于不同的场合。它的参数允许根据不同实现的特定要求进行调整以识别不同的边缘特性。对于PC上的实时图像处理来说可能慢得无法使用,尤其是在使用大的高斯滤波器的情况下。但是,我们讨论计算能力的时候,也要考虑到随着处理器速度不断提升,有望在未来几年使得这不再成为一个问题。

⑩ 用C语言编程实现CANNY算法

创建一个名字为canny.par的文件,就同你建立一个test.txt一样

阅读全文

与canny算法相关的资料

热点内容
android图片变灰 浏览:268
linuxvi下一个 浏览:973
安卓手机的应用锁怎么解 浏览:735
linux增加路径 浏览:849
sql身份证号最后四位加密 浏览:533
xp系统表格加密 浏览:856
光遇安卓军大衣什么时候上线 浏览:840
android应用商店图标 浏览:341
java计算圆的面积 浏览:643
应用编译优化recovery 浏览:577
域控命令n 浏览:258
php导出文件 浏览:13
谷歌地图网页版无法连接服务器地址 浏览:298
菜鸟工具在线编译python 浏览:858
栅格化命令有何作用 浏览:823
为什么压缩文件不能解压 浏览:311
足球app哪个软件好 浏览:96
产品经理逼疯程序员的一天 浏览:17
修改svn服务器ip地址 浏览:584
下列关于编译说法正确的是 浏览:246