b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

canny边缘检测详解及编程实现_opencv canny边缘检测_canny算子边缘检测

电脑杂谈  发布时间:2017-02-23 00:22:12  来源:网络整理

Canny边缘检测详解及编程实现

Canny边缘检测算法一直是边缘检测的经典算法。下面详细介绍Canny边缘检测算法的原理以及编程实现。

Canny边缘检测基本原理:

(1)图象边缘检测必须满足两个条件:一能有效地抑制噪声;二必须尽量精确确定边缘的位置。

(2)根据对信噪比与定位乘积进行测度,得到最优化近算子。这就是Canny边缘检测算子。

(3)类与Marr(LoG)边缘检测方法,也属于先平滑后求导数的方法。

Canny 的目标是找到一个最优的边缘检测算法,最优边缘检测的含义是:

(1)好的检测 - 算法能够尽可能多地标识出图像中的实际边缘。

(2)好的定位 - 标识出的边缘要尽可能与实际图像中的实际边缘尽可能接近。

(3)最小响应 - 图像中的边缘只能标识一次,并且可能存在的图像雜訊不应标识为边缘。

Canny边缘检测算法的步骤:

(1)去噪

任何边缘检测算法都不可能在未经处理的原始数据上很好地處理,所以第一步是对原始数据与高斯 mask 作卷积,得到的图像与原始图像相比有些轻微的模糊(blurred)。canny边缘检测详解及编程实现这样,单独的一个像素雜訊在经过高斯平滑的图像上变得几乎没有影响。

(2)用一阶偏导的有限差分来计算梯度的幅和方向。

(3)对梯度幅进行非极大抑制。

仅仅得到全局的梯度并不足以确定边缘,因此为确定边缘,必须保留局部梯度最大的点,而抑制非极大。(non-maxima suppression,NMS)

解决方法:利用梯度的方向。

Canny边缘检测详解及编程实现

四个扇区的标号为0到3,对应3*3邻域的四种可能组合。在每一点上,邻域的中心象素M与沿着梯度线的两个象素相比。如果M的梯度不比沿梯度线的两个相邻象素梯度大,则令M=0。

(4)用双阈算法检测和连接边缘。

减少假边缘段数量的典型方法是对N[i,j]使用一个阈。将低于阈的所有赋零。但问题是如何选取阈?

解决方法:双阈算法。canny边缘检测详解及编程实现双阈算法对非极大抑制图象作用两个阈τ1和τ2,且2τ1≈τ2,从而可以得到两个阈边缘图象N1[i,j]和N2[i,j]。由于N2[i,j]使用高阈得到,因而含有很少的假边缘,但有间断(不闭合)。双阈法要在N2[i,j]中把边缘连接成轮廓,当到达轮廓的端点时,该算法就在N1[i,j]的8邻点位置寻找可以连接到轮廓上的边缘,这样,算法不断地在N1[i,j]中收集边缘,直到将N2[i,j]连接起来为止。

在连接边缘的时候,用数组模拟队列的实现。以进行8-连通域搜索。

更详细的资料请参考维基百科:%E7%AE%97%E5%AD%90

下面是我编程实现的Canny边缘检测代码,如有错误,请大家包涵、指正:

I = imread('rice.png');

I = double(I);

[height,width] = size(I);

J = I;

conv = zeros(5,5);%高斯卷积核

sigma = 1;%方差

sigma_2 = sigma * sigma;%临时变量

sum = 0;

for i = 1:5

for j = 1:5

conv(i,j) = exp((-(i - 3) * (i - 3) - (j - 3) * (j - 3)) / (2 * sigma_2)) / (2 * 3.14 * sigma_2);%高斯公式


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-33947-1.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...