高斯滤波后Canny算子边缘检测结果
halcon边缘检测例子
halcon边缘检测例子
Halcon是一款功能强大的机器视觉库,其边缘检测功能可以帮助我们在图像中找出物体的边缘,从而实现目标检测和分割。下面将以Halcon边缘检测例子为题,列举一些常用的边缘检测方法和技巧。
一、Sobel算子边缘检测
Sobel算子是一种常用的边缘检测算法,它通过计算图像的一阶导数来寻找边缘。Halcon中可以使用函数SobelA来实现Sobel算子的边缘检测,可以设置不同的参数来调整检测结果的灵敏度。
二、Canny算子边缘检测
Canny算子是一种经典的边缘检测算法,它结合了高斯滤波、梯度计算和非最大值抑制等步骤,可以得到更准确的边缘检测结果。Halcon中可以使用函数EdgesSubPix来实现Canny算子的边缘检测,可以设置不同的参数来调整检测结果的质量和灵敏度。
三、Laplacian算子边缘检测
Laplacian算子是一种基于二阶导数的边缘检测算法,它可以检测出图像中的高频变化,从而找到边缘。Halcon中可以使用函数Laplace来实现Laplacian算子的边缘检测,可以设置不同的参数来调整检测结果的灵敏度。
四、Roberts算子边缘检测
Roberts算子是一种简单但有效的边缘检测算法,它通过计算图像
中像素点的灰度差来判断是否存在边缘。Halcon中可以使用函数RobertsA来实现Roberts算子的边缘检测,可以设置不同的参数来调整检测结果的灵敏度。
五、Prewitt算子边缘检测
Prewitt算子是一种基于一阶导数的边缘检测算法,它通过计算图像中像素点的灰度变化来寻找边缘。Halcon中可以使用函数PrewittA来实现Prewitt算子的边缘检测,可以设置不同的参数来调整检测结果的灵敏度。
canny边缘检测matlab代码
canny边缘检测matlab代码
Canny边缘检测是一种常用的图像处理算法,它可以有效地检测图像
中的边缘,并将其显示为白色线条。在Matlab中,可以使用以下代
码实现Canny边缘检测:
1. 读取图像
首先,需要读取待处理的图像。可以使用imread函数来读取图片:
```matlab
img = imread('image.jpg');
```
其中,image.jpg是待处理的图片文件名。
2. 灰度化
Canny算法只能处理灰度图像,因此需要将彩色图像转换为灰度图像。可以使用rgb2gray函数来实现:
```matlab
gray_img = rgb2gray(img);
```
3. 高斯滤波
在进行边缘检测之前,需要对图像进行高斯滤波来消除噪声。可以使用fspecial和imfilter函数来实现:
```matlab
gaussian_filter = fspecial('gaussian', [5 5], 1);
blur_img = imfilter(gray_img, gaussian_filter, 'replicate');
```
其中,[5 5]表示高斯核的大小为5x5,1表示标准差。
4. 计算梯度幅值和方向
接下来,需要计算每个像素点的梯度幅值和方向。可以使用Sobel算子来计算梯度,并利用arctan函数计算方向角度:
```matlab
sobel_x = [-1 0 1; -2 0 2; -1 0 1];
sobel_y = [-1 -2 -1; 0 0 0; 1 2 1];
grad_x = imfilter(blur_img, sobel_x, 'replicate');
边缘检测算法流程
边缘检测算法流程
边缘检测是计算机视觉和图像处理中的一项关键技术。它通过识别图像中像素强度变化的区域来提取图像的重要特征。以下是边缘检测算法的主要流程:
1.图像预处理
预处理是边缘检测的第一步,主要目的是改善图像质量,为后续的边缘检测操作做准备。预处理步骤可能包括灰度转换、噪声去除、平滑等。这些步骤可以帮助消除图像中的噪声,并使图像的特征更加突出。
2.滤波处理
滤波处理的目的是减少图像中的噪声,同时保留边缘信息。常用的滤波器包括高斯滤波器、中值滤波器等。滤波处理有助于提高后续边缘检测的准确性。
3.边缘检测算子
边缘检测算子是边缘检测算法的核心。常见的算子包括Sobel算子、Prewitt 算子、Canny算子等。这些算子通过特定的数学运算来识别和提取图像中的边缘。算子将根据图像局部像素的强度变化来确定边缘。
4.后处理
后处理是对检测到的边缘进行进一步处理和优化。这可能包括去除假阳性边缘(即非实际边缘的误检测)、连接断裂的边缘、平滑边缘等。后处理有助于提高边缘检测结果的准确性和可解释性。
5.阈值处理
阈值处理是用来确定哪些边缘是显著的,哪些不是。通过设置一个阈值,可以将边缘检测结果转化为二值图像,其中显著的边缘被标记为特定值(通常是1),不显著的边缘被标记为0。这有助于简化分析和降低计算复杂性。
6.边缘特征提取
边缘特征提取是提取已检测到的边缘的特征的过程。这可能包括测量边缘的
角度、长度、形状等属性。这些特征可以用于进一步的图像分析和理解,例如对象识别或场景分类。
7.性能评估
性能评估是评估边缘检测算法效果的步骤。评估指标可能包括边缘检测的准确性、计算效率、鲁棒性等。评估也可以采用定量方法,如比较人工标定的真实边缘与检测到的边缘的相似性。此外,还可以通过比较不同算法的检测结果来评估性能。性能评估有助于改进和优化算法,提高其在实际应用中的表现。
matlab 中canny算法
matlab 中canny算法
什么是Canny算法?Canny算法是一种常用于图像边缘检测的计算机视觉算法。它由约翰·Canny在1986年提出,目的是在保持最佳信噪比的同时准确地检测出图像中的边缘。
Canny算法的步骤是什么?Canny算法包括以下几个步骤:
1. 噪声抑制:由于图像中常常存在噪声,因此第一步是对图像进行平滑处理以抑制噪声。常用的方法是应用高斯滤波器。
2. 计算梯度:通过计算图像的梯度来确定边缘的强度和方向。梯度计算通常使用Sobel算子,它可以有效地检测图像中的边缘。
3. 非极大值抑制:在计算梯度之后,需要对梯度幅度图像进行非极大值抑制。这一步的目的是去除那些不是真正边缘的像素。
4. 双阈值检测:在经过非极大值抑制之后,需要对幅度图像进行阈值处理。Canny算法使用双阈值检测来确定强边缘和弱边缘。任何高于高阈值的像素被认为是强边缘,低于低阈值的像素被认为是弱边缘。
5. 边缘跟踪:最后一步是利用边缘跟踪算法来连接强边缘。边缘跟踪算法基于弱边缘像素与强边缘像素的连接关系,通过追踪弱边缘像素与强边缘像素的路径
来确定最终的边缘。
Canny算法的优缺点是什么?Canny算法有以下几个优点:
1. 准确性:Canny算法能够准确地检测图像中的边缘,尤其在边缘区域有噪声的情况下。
2. 低错误率:相比于其他边缘检测算法,Canny算法的错误率较低,能够有效地排除非边缘像素。
3. 单一边缘:Canny算法仅提取单一像素的边缘,不会将边缘模糊化。
虽然Canny算法有许多优点,但也存在一些缺点:
Canny边缘检测算法的一些改进
Canny边缘检测算法的⼀些改进
传统的Canny边缘检测算法是⼀种有效⽽⼜相对简单的算法,可以得到很好的结果(可以参考上⼀篇)。但是Canny算法本⾝也有⼀些缺陷,可以有改进的地⽅。
1. Canny边缘检测第⼀步⽤⾼斯模糊来去掉噪声,但是同时也会平滑边缘,使得边缘信息减弱,有可能使得在后⾯的步骤中漏掉⼀些需要的边缘,特别是弱边缘和孤⽴的边缘,可能在双阀值和联通计算中被剔除。很⾃然地可以预见,如果加⼤⾼斯模糊的半径,对噪声的平滑⼒度加⼤,但也会使得最后得到的边缘图中的边缘明显减少。这⾥依然⽤Lena图为例,保持Canny算法中⾼阀值100,低阀值50不变,⾼斯半径分别为2,3,5的Canny边缘⼆值图像如下。可知⾼斯模糊把很多有⽤的边缘信息也模糊掉了,因此如何精确的选择⾼斯半径就相当重要。
⾼斯半径2 ⾼斯半径3 ⾼斯半径5
2. 在最初的Canny算法中是使⽤的最⼩的2x2领域来计算梯度幅值的。这种⽅法对噪声很敏感,⽐较容易检测到伪边缘或漏掉真是边缘。在上⼀篇算法实现中,实际上使⽤的是3x3的Sobel梯度算⼦,是⼀种⽐较好的选择。
3. 传统Canny算法的双阀值是全局固定的,因此双阀值⼤⼩的选取对最终的结果影响很⼤,也有⼀些经验,⽐如选择低阀值是⾼阀值的0.4或0.5。然⽽这毕竟是⼀种经验选择,阀值的确定仍然很难决定⼀个最优值。⽽且⼀个图像的不同局部区域可能需要各不相同的阀值来精确地找到真实边缘,因此全局阀值就不太合适了。
4. 传统算法仍然可能产⽣⼀条宽度⼤于1的边缘,达不到满意的⾼精度单点响应。也就是需要继续细化边缘。
基于Canny算法的改进型图像边缘检测算法
C n y算 法 中采 用 高斯 滤 波对 图像 进行 预 平 滑处 理 , 斯 滤 an 高 波 系数 8需 要人 为 确 定 , 同 的 高斯 滤 波 系数 对 图像 边 缘 检 测效 不 果 影 响 很 大 , 为确 定 的滤 波 系数 很 难 做 到兼 顾 噪声 平 滑 和 保护 人
潘 琦 黄 英 ( 广东工业大学自动化学院, 广东 广州 50 0 ) 106
摘 要 wenku.baidu.com
Ca n n y算子 是 基 于最 优 化 算 法 的 边 缘检 测 算 子 , 它具 有 很 好 的 信 噪 比 和检 测精 度 , 是 它使 用的 高斯 滤 波 方 法会 造 成 但 图像 的 平 滑和 边 缘 的模 糊 , 且 对脉 冲噪 声很 敏 感 。 讨 对 C n y边 缘 提 取 算 子 的 改进 方 法 , 出了将 改 进 的 开 关 中值 滤 并 探 an 提 波 算 法应 用 于 Ca n n y算 法的 思 想 , 之 提 取 出 的边 缘 更 加 完整 , 使 并且 有 很 好 的 噪 声 抑 制 效 果 。
Ca n n y分 析 了经 典 的边 缘 检 测 算 子 及 边 缘 检 测 的应 用 , 发 现 好 的边 缘 检 测 算 法 应 该 具 有 以 下 三 个 特 性 : 1 好 的 边 缘 检 测 性 能 , 具 有 低 的把 真 实 边 缘 点 误 判 断 为 ) 即 非 边 缘 点 或 把 非 边 缘 点 误 判 断 为 边 缘 点 的概 率 。信 噪 比 的数 学
Canny 边缘检测算法
Canny 边缘检测算法
【OpenCV】Canny 边缘检测
分类:【OpenCV】2012-08-08 10:17 490人阅读评论(10) 收藏举报
Canny 边缘检测算法
1986年,JOHN CANNY 提出一个很好的边缘检测算法,被称为Canny编边缘检测器[1]。
Canny边缘检测根据对信噪比与定位乘积进行测度,得到最优化逼近算子,也就是Canny算子。类似与LoG
边缘检测方法,也属于先平滑后求导数的方法。
使用Canny边缘检测器,图象边缘检测必须满足两个条件:
能有效地抑制噪声;
必须尽量精确确定边缘的位置。
算法大致流程:
1、求图像与高斯平滑滤波器卷积:
2、使用一阶有限差分计算偏导数的两个阵列P与Q:
3、幅值和方位角:
4、非极大值抑制(NMS ):细化幅值图像中的屋脊带,即只保留幅值局部变化最大的点。
将梯度角的变化范围减小到圆周的四个扇区之一,方向角和幅值分别为:
非极大值抑制通过抑制梯度线上所有非屋脊峰值的幅值来细化M[i,j],中的梯度幅值屋脊.这一算法首先将梯度角θ[i,j]的变化范围减小到圆周的四个扇区之一,如下图所示:
5、取阈值
将低于阈值的所有值赋零,得到图像的边缘阵列
阈值τ取得太低->假边缘
阈值τ取得太高->部分轮廊丢失
选用两个阈值: 更有效的阈值方案.
相关代码
Canny算法实现:
用高斯滤波器平滑图像(在调用Canny之前自己用blur平滑)用一阶偏导的有限差分来计算梯度的幅值和方向.
对梯度幅值应用非极大值抑制.
用双阈值算法检测和连接边缘.[cpp] view plaincopyprint?
基于改进Canny算法的边缘检测技术应用及发展趋势
基于改进Canny算法的边缘检测技术应用及
发展趋势
边缘检测是计算机视觉中一项重要的任务,它在图像处理、物体识别和特征提取等领域具有广泛的应用。Canny算法是一种经典的边缘检测算法,但其在保持边缘连续性和准确度方面存在一定的限制。本文将讨论基于改进Canny算法的边缘检测技术的应用及发展趋势。
一、改进Canny算法的原理及优点
改进Canny算法是对传统Canny算法的改进和优化。传统Canny算法主要包括以下几个步骤:高斯滤波、计算梯度强度和方向、非极大值抑制和双阈值处理。改进Canny算法通过对这些步骤的改进,提高了边缘检测的准确性和性能。
改进Canny算法的优点主要包括:
1.减少了边缘的丢失:传统Canny算法在高斯滤波和非极大值抑制过程中可能会造成边缘的模糊或丢失。改进Canny算法通过优化参数和增加边缘细化步骤,减少了这种问题的发生。
2.增强了边缘的连续性:传统Canny算法在边缘连接方面存在一定的局限性。改进Canny算法通过引入更复杂的边缘连接策略,提高了边缘连接的准确性和连续性。
3.降低了计算复杂度:改进Canny算法通过优化计算步骤和算法结构,降低了算法的复杂度。这使得改进Canny算法更适合于实时边缘检测应用。
二、基于改进Canny算法的边缘检测技术应用
基于改进Canny算法的边缘检测技术在各个领域都有广泛的应用。
以下是几个典型的应用案例:
1.医学图像处理:医学图像中的边缘信息对于病理分析和疾病诊断
具有重要意义。基于改进Canny算法的边缘检测技术可以有效地提取
出图像中的器官边缘、病变区域等信息,为医生提供更准确的诊断依据。
算法Canny边缘检测用高斯滤波器平滑图像课件
*幅值:
Ni, j NMS( M[i, j], [i, j])
为了更好的解释这个概念,看下图:
图中的数字代表了像素点的梯度强度,箭头方向代表了梯度 方向。以第二排第三个像素点为例,由于梯度方向向上,则 将这一点的强度(7)与其上下两个像素点的强度(5和4) 比较,由于这一点强度最大,则保留。
6 LoG算法
Marr和Hildreth将高斯滤波和拉普拉斯边缘检测 结合在一起,形成LoG(Laplacian of Gaussian) 算法,也称之为拉普拉斯高斯算法.
基本特征: • 平滑滤波器是高斯滤波器. • 增强步骤采用二阶导数(二维拉普拉斯函数). • 边缘检测判据是二阶导数零交叉点并对应一阶导数的
f [i, j 1] f [i, j]
x
x
( f [i, j 2] 2 f [i, j 1]) f [i, j]
这一近似式是以点 [ i,j+1] 为中心的.用 j-1 替换:
用算子表示:
0 1 0 2 1 4 1
0 1 0
希望邻域中心点具有更大的权值
1 4 1 2 4 20 4
1 4 1
用卷积模板表示:
(2)Sobel算子
梯度幅值: M
s
2 x
s
2 y
其中的偏导数用下式计算:
canny边缘检测公式
Canny边缘检测是一种常用的图像处理算法,用于检测图像中的边缘。以下是Canny边缘检测的基本公式和步骤:
高斯滤波:
首先对输入图像应用高斯滤波器,以减少噪声的影响。高斯滤波器的公式如下:
G(x, y) = (1 / (2 * π* σ^2)) * exp(-(x^2 + y^2) / (2 * σ^2))
计算梯度幅值和方向:
在经过高斯滤波后的图像上,使用Sobel算子计算每个像素的梯度幅值和方向。梯度幅值的计算公式如下:
G = sqrt(Gx^2 + Gy^2)
其中,Gx和Gy分别是在x和y方向上的梯度。
非极大值抑制:
对梯度幅值图像进行非极大值抑制,保留局部梯度幅值的峰值点,抑制非峰值点。这样可以细化边缘。
双阈值处理:
将非极大值抑制后的图像进行阈值处理,将梯度幅值划分为强边缘、弱边缘和非边缘三个阈值区间。根据强边缘和弱边缘之间的连通性关系,确定最终的边缘。
Canny边缘检测算法的具体参数设置和阈值选择可以根据具体应用进行调整。这些公式和步骤提供了Canny边缘检测的基本原理和流程,但实际应用中可能还会有其他优化和改进的技术。
canny算法原理
canny算法原理
Canny算法原理
Canny算法是一种经典的边缘检测算法,被广泛应用于计算机视觉、图像处理、模式识别等领域。该算法的主要思想是通过对图像进行平滑滤波、计算梯度幅值和方向、非极大值抑制、双阈值处理和边缘连接等步骤,最终得到一张二值化的边缘图像。
平滑滤波
平滑滤波是Canny算法的第一步,该步骤主要是为了去除图像中的噪声和细节信息,同时保留图像中的大致特征。常用的平滑滤波方法有高斯滤波和中值滤波。高斯滤波是一种线性平滑滤波方法,能够有效去除高斯噪声;中值滤波是一种非线性平滑滤波方法,能够有效去除椒盐噪声。
计算梯度幅值和方向
计算梯度幅值和方向是Canny算法的第二步,该步骤主要是为了寻找图像中的边缘。常用的梯度算子有Sobel算子、Prewitt算子和Roberts算子。Sobel算子是一种常用的梯度算子,它能够有效检测图像中的水平和垂直边缘。
非极大值抑制
非极大值抑制是Canny算法的第三步,该步骤主要是为了保留图像中的细节信息。在计算完梯度幅值和方向后,我们需要对图像进行非极大值抑制,即对每个像素点的梯度幅值进行比较,只保留梯度幅值最大的像素点,其余像素点置为0。
双阈值处理
双阈值处理是Canny算法的第四步,该步骤主要是为了确定图像中的边缘像素点。在非极大值抑制之后,我们将图像中的像素点分为三类:强边缘像素点、弱边缘像素点和非边缘像素点。强边缘像素点是指梯度幅值大于高阈值的像素点,非边缘像素点是指梯度幅值小于低阈值的像素点,弱边缘像素点是指梯度幅值介于低阈值和高阈值之间的像素点。
MATLABCanny边缘检测
MATLABCanny边缘检测
我可没直接调⽤系统函数,要是那样就太⽔了。其实我的matlab代码很容易就能翻译成c/c++的。
canny边缘检测⼀共四个部分:
1.对原图像⾼斯平滑
2.对⾼斯平滑后的图像进⾏sobel边缘检测。这⾥需要求横的和竖的还有联合的,所以⼀共三个需要sobel边缘检测图像。
3.对联合的sobel检测图像进⾏⾮极⼤抑制
4.连接边缘点并进⾏滞后阈值处理。
下⾯是代码:
main.m
1 clear all;
2 close all;
3 clc;
4
5 img=imread('lena.jpg');
6 imshow(img);
7 [m n]=size(img);
8 img=double(img);
9
10 %%canny边缘检测的前两步相对不复杂,所以我就直接调⽤系统函数了
11 %%⾼斯滤波
12 w=fspecial('gaussian',[55]);
13 img=imfilter(img,w,'replicate');
14 figure;
15 imshow(uint8(img))
16
17 %%sobel边缘检测
18 w=fspecial('sobel');
19 img_w=imfilter(img,w,'replicate'); %求横边缘
20 w=w';
21 img_h=imfilter(img,w,'replicate'); %求竖边缘
22 img=sqrt(img_w.^2+img_h.^2); %注意这⾥不是简单的求平均,⽽是平⽅和在开⽅。我曾经好长⼀段时间都搞错了
基于改进Canny算法的物体边缘检测算法
基于改进Canny算法的物体边缘检测算法
物体边缘检测是计算机视觉中的一项重要任务,它在图像分析、物
体识别和图像处理等领域具有广泛的应用。Canny算法作为一种经典的边缘检测算法,被广泛应用于实际工作中。然而,传统的Canny算法
在处理一些复杂场景的边缘检测时存在一些问题,如边缘连接不准确、噪声敏感性较高等。本文将介绍一种基于改进Canny算法的物体边缘
检测算法,以解决传统Canny算法存在的问题。
1. 算法背景
物体边缘检测是获取图像中物体边缘位置的过程,它对于图像中物
体的形状和轮廓分析起着关键作用。传统的Canny算法主要包括以下
几个步骤:高斯平滑、计算梯度幅值和方向、非极大值抑制、双阈值
处理和边缘连接。然而,传统Canny算法对噪声比较敏感,而且在边
缘连接过程中常常会出现断裂或连接错误的情况。
2. 改进的Canny算法
为了改善传统Canny算法的缺点,我们提出了一种改进的Canny算法,具体步骤如下:
2.1 高斯平滑
首先对输入图像进行高斯平滑操作,以降低图像中的噪声。我们采
用一个合适大小的高斯卷积核对图像进行卷积操作,得到平滑后的图像。
2.2 计算梯度幅值和方向
在平滑后的图像中,我们计算每个像素点的梯度幅值和方向。可以
使用Sobel、Prewitt等算子对图像进行梯度计算,得到梯度幅值和方向
图像。
2.3 非极大值抑制
在梯度幅值和方向图像中,我们进行非极大值抑制操作,以找到边
缘的细化位置。对于每个像素点,我们判断其梯度方向,并与相邻的
两个像素进行比较,如果当前像素的梯度幅值最大,则保留,否则置零。
opencv实现canny边缘检测实验报告
//y向偏导数
int * M=new int[nWidth*nHeight]; double* Theta=new double[nWidth*nHeight];
//梯度幅值 //梯度方向
///////////////////////////////////////////////////////////////////////////
} } //************************************************************************** 生成灰度图片
//************************************************************************* //高斯滤波参数生成
高斯滤波后的图像
//计算图像梯度及其方向
//**************************************************************************
double* P=new double[nWidth*nHeight];
//x向偏导数
double* Q=new double[nWidth*nHeight];
data3 =(256+img->imageData[j*img->widthStep + i*3 + 2])%256; //R分量
Canny边缘检测算法的流程
Canny边缘检测算法的流程
介绍
边缘检测的⼀般标准包括:
1) 以低的错误率检测边缘,也即意味着需要尽可能准确的捕获图像中尽可能多的边缘。
2) 检测到的边缘应精确定位在真实边缘的中⼼。
3) 图像中给定的边缘应只被标记⼀次,并且在可能的情况下,图像的噪声不应产⽣假的边缘。
在⽬前常⽤的边缘检测⽅法中,Canny边缘检测算法是具有严格定义的,可以提供良好可靠检测的⽅法之⼀。由于它具有满⾜边缘检测的三个标准和实现过程简单的优势,成为边缘检测最流⾏的算法之⼀。
Canny边缘检测算法的处理流程
Canny边缘检测算法可以分为以下5个步骤:
1) 使⽤⾼斯滤波器,以平滑图像,滤除噪声。
2) 计算图像中每个像素点的梯度强度和⽅向。
3) 应⽤⾮极⼤值(Non-Maximum Suppression)抑制,以消除边缘检测带来的杂散响应。
4) 应⽤双阈值(Double-Threshold)检测来确定真实的和潜在的边缘。
5) 通过抑制孤⽴的弱边缘最终完成边缘检测。
下⾯详细介绍每⼀步的实现思路。
1 ⾼斯平滑滤波
为了尽可能减少噪声对边缘检测结果的影响,所以必须滤除噪声以防⽌由噪声引起的错误检测。为了平滑图像,使⽤⾼斯滤波器与图像进⾏卷积,该步骤将平滑图像,以减少边缘检测器上明显的噪声影响。⼤⼩为(2k+1)x(2k+1)的⾼斯滤波器核的⽣成⽅程式由下式给出:
下⾯是⼀个sigma = 1.4,尺⼨为3x3的⾼斯卷积核的例⼦(需要注意归⼀化):
若图像中⼀个3x3的窗⼝为A,要滤波的像素点为e,则经过⾼斯滤波之后,像素点e的亮度值为:
最新Canny边缘检测基本原理
C a n n y边缘检测基本
原理
2 Canny边缘检测基本原理
Canny边缘检测器是高斯函数的一阶导数,是对信噪比与定位之乘积的最优化逼近算子[1]。Canny认为好的边缘检测具有3个特点:(1)低概率的错标非边缘点和低概率不标真实边缘点;(2)检测出来的边缘点应该尽可能的靠近真实边缘中心;(3)边缘响应是单值的。
设表示两维高斯函数,表示图像;Canny边缘检测算子为式中:是边缘曲线的法向量,由于事先不知道边缘的方向,所以取。那么边缘点是方程的解,即然后通过双阈值去掉伪边缘,Canny算子检测到的是边缘点是高斯函数平滑后的图像拐点。
Canny算法的实现步骤:
Step1:用高斯滤波器平滑图像,去除图像噪声。一般选择方差为1.4的高斯函数模板和图像进行卷积运算。
Step2:用一阶偏导的有限差分来计算梯度的幅值和方向。使用的梯度算子计算x和y方向的偏导数和,方向角,梯度幅值。
Step3:对梯度幅值应用非极大值抑制。幅值M越大,其对应的图像梯度值也越大,但这还不足以确定边缘,因为这里仅把图像快速变化的问题转化成求幅值局部最大值问题,为确定边缘,必须细化幅值图像中的屋脊带,只保留幅值局部变化最大的点,生成细化的边缘。
Step4:用双阈值算法检测并且连接边缘。双阈值法使Canny算子提取的边缘点更具有鲁棒性,高低阈值分别表示为Hth和Lth,对于高阈值Hth的选折,基于计算出的图像梯度值对应的直方图进行选取。在一幅图像中,非边缘点数目在总图像像素点数目中占的比例表示为Hratio,根据图像梯度值对应的直方图累加,累加数目达到总像素数目的Hratio时,对应的图像梯度值设置为Hth,在文中设定Hratio为0.7。低阈值Lth的选择通过Lth=Lratio*Hth得到,文中Lratio设定为0.4。最后通过对边缘点的标记和领域关系进行连接得到最后的边缘检测图。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
导入数据
M=imread('*.jpg');% M即为读出的数据矩阵,仅限于灰度图像
% 若带路径,则为('/.../*.jpg')
边缘比对
I=imread('lena.bmp');% 提取图像
BW1=edge(I,'sobel'); %用SOBEL算子进行边缘检测
BW2=edge(I,'roberts');%用Roberts算子进行边缘检测
BW3=edge(I,'prewitt'); %用prewitt算子进行边缘检测
BW4=edge(I,'log'); %用log算子进行边缘检测
BW5=edge(I,'canny'); %用canny算子进行边缘检测
h=fspecial('gaussian’,5);
BW6=edge(I,’canny’);
subplot(2,3,1), imshow(BW1);
title(‘sobel edge check’);
subplot(2,3,2), imshow(BW2);
title(‘sobel edge check’);
subplot(2,3,3), imshow(BW3);
title(‘prewitt edge check’);
subplot(2,3,4), imshow(BW4);
title(‘log edge check’);
subplot(2,3,5), imshow(BW5);
title(‘canny edge check’);
subplot(2,3,6), imshow(BW6);
title(‘gasussian&canny edge check’);%此为用高斯滤波后Canny算子边缘检测结果