https://blog.csdn.net/hjwang1/article/details/79943815
https://zhuanlan.zhihu.com/p/59640437

Canny算子

图像的边缘是指图像局部区域亮度变化显著的部分,该区域的灰度剖面一般可以看作是一个阶跃,即从一个灰度值在很小的缓冲区域内急剧变化到另一个灰度相差较大的灰度值。
Canny是目前最优秀的边缘检测算法,其目标为找到一个最优的边缘,其最优边缘的定义为:
1、好的检测:算法能够尽可能的标出图像中的实际边缘
2、好的定位:标识出的边缘要与实际图像中的边缘尽可能接近
3、最小响应:图像中的边缘只能标记一次

具体步骤

一、高斯滤波
二、计算梯度图像与角度图像
Canny中的梯度检测算子是使用高斯滤波器计算得到的滤波器,距离中心点越近的像素点权重越大。
三、对梯度图像进行非极大值抑制
从上一步得到的梯度图像存在边缘粗宽、弱边缘干扰等众多问题,现在我们可以使用非极大值抑制来寻找像素点局部最大值,将非极大值所对应的灰度值置0,这样可以剔除一大部分非边缘的像素点。
四、双阈值处理和连接分析来检测并连接边缘

Matlab代码

function [ m, theta, sector, canny1,  canny2, bin] = canny1step( src,  lowTh)
%canny函数第一步,求出x,y方向的偏导,模板如下:
% Gx
% 1  -1
% 1  -1
% Gy
% -1  -1
%  1    1
%------------------------------------
% 输入:
% src:图像,如果不是灰度图转成灰度图
% lowTh:低阈值
% 输出:
% m: 两个偏导的平方差,反映了边缘的强度
% theta:反映了边缘的方向
% sector:将方向分为3个区域,具体如下
% 2 1 0
% 3 X 3
% 0 1 2
% canny1:非极大值抑制
% canny2:双阈值
% bin : 二值化
%--------------------------------------- [Ay, Ax, dim ] = size(src);
%转换为灰度图
if dim>1src = rgb2gray(src);
endsrc = double(src);
m = zeros(Ay, Ax);
theta = zeros(Ay, Ax);
sector = zeros(Ay, Ax);
canny1 = zeros(Ay, Ax);%非极大值抑制
canny2 = zeros(Ay, Ax);%双阈值检测和连接
bin = zeros(Ay, Ax);
for y = 1:(Ay-1)for x = 1:(Ax-1)gx =  src(y, x) + src(y+1, x) - src(y, x+1)  - src(y+1, x+1);gy = -src(y, x) + src(y+1, x) - src(y, x+1) + src(y+1, x+1);m(y,x) = sqrt(gx^2+gy^2) ;%--------------------------------theta(y,x) = atand(gy/gx)  ;tem = theta(y,x);%--------------------------------if ((tem<67.5)&&(tem>22.5)) || ((tem>-157.5)&&(tem<-112.5))sector(y,x) =  0;    elseif ((tem<22.5)&&(tem>-22.5)) || (tem<-157.5) || (tem>157.5)sector(y,x) =  3;    elseif ((tem<-22.5)&&(tem>-67.5)) || ((tem>112.5)&&(tem<157.5))sector(y,x) =  2;    elsesector(y,x) =  1;    end%--------------------------------        end
end
%-------------------------
%非极大值抑制
%------> x
%   2 1 0
%   3 X 3
%y  0 1 2
for y = 2:(Ay-1)for x = 2:(Ax-1)        if 0 == sector(y,x) %右上 - 左下if ( m(y,x)>=m(y-1,x+1) )&&( m(y,x)>=m(y+1,x-1)  )canny1(y,x) = m(y,x);elsecanny1(y,x) = 0;endelseif 1 == sector(y,x) %竖直方向if ( m(y,x)>=m(y-1,x) )&&( m(y,x)>=m(y+1,x)  )canny1(y,x) = m(y,x);elsecanny1(y,x) = 0;endelseif 2 == sector(y,x) %左上 - 右下if ( m(y,x)>=m(y-1,x-1) )&&( m(y,x)>=m(y+1,x+1)  )canny1(y,x) = m(y,x);elsecanny1(y,x) = 0;endelseif 3 == sector(y,x) %横方向if ( m(y,x)>=m(y,x+1) )&&( m(y,x)>=m(y,x-1)  )canny1(y,x) = m(y,x);elsecanny1(y,x) = 0;endend        end%end for x
end%end for y%---------------------------------
%双阈值检测
ratio = 2;
for y = 2:(Ay-1)for x = 2:(Ax-1)        if canny1(y,x)<lowTh %低阈值处理canny2(y,x) = 0;bin(y,x) = 0;continue;elseif canny1(y,x)>ratio*lowTh %高阈值处理canny2(y,x) = canny1(y,x);bin(y,x) = 1;continue;else %介于之间的看其8领域有没有高于高阈值的,有则可以为边缘tem =[canny1(y-1,x-1), canny1(y-1,x), canny1(y-1,x+1);canny1(y,x-1),    canny1(y,x),   canny1(y,x+1);canny1(y+1,x-1), canny1(y+1,x), canny1(y+1,x+1)];temMax = max(tem);if temMax(1) > ratio*lowThcanny2(y,x) = temMax(1);bin(y,x) = 1;continue;elsecanny2(y,x) = 0;bin(y,x) = 0;continue;endendend%end for x
end%end for yend%end of function

实验结果

数字图像处理(Canny检测算子)相关推荐

  1. 数字图像处理之拉普拉斯算子

    OpenCV-跟我一起学数字图像处理之拉普拉斯算子 Laplace算子和Sobel算子一样,属于空间锐化滤波操作.起本质与前面的Spatial Filter操作大同小异,下面就通过Laplace算子来 ...

  2. 数字图像处理--图像梯度算子的本质

    前面我们介绍过图像的梯度,其定义是根据微积分的定义在二维离散函数中推导出来的.但是,我们需要理解,梯度只是一个工具,方法,核心目的是得到像素点与其相邻像素的灰度值变化情况,并通过这种变化来增强图像.这 ...

  3. 数字图像处理5--边缘检测探究(内容较多,持续更新)

    有些论文和著作中将边缘检测分类为低层次特征提取,也就不需要任何形状信息(空间关系的信息)就可以从图像中自动提取的过程.阈值处理就是作为点运算的一种低层次特征提取方式. 关于边缘检测的一些理解及扩展: ...

  4. 数字图像处理第十章——图像分割

    数字图像处理第十章 数字图像处理---图像分割 (一)点.线和边缘检测 1.1 点检测 1.2 线检测 1.3 使用函数edge的边缘检测 (二)使用霍夫变换的线检测 2.1 函数hough 2.2 ...

  5. 数字图像处理专栏目录

    注:转载请标明原文出处链接:https://xiongyiming.blog.csdn.net/article/details/103137690 为了方便查阅复习,将自己原来撰写的博文进行整理,数字 ...

  6. 十六、数字图像处理之图像分割

    图像分割 (一)点.线和边缘检测 (1)点检测 (2)线检测 (3)使用函数edge的边缘检测 (二)使用霍夫变换的线检测 (三)阈值处理 (1)基础知识 (2)基本全局阈值处理 (3)使用Otsu' ...

  7. 数字图像处理---LOG算子和CANNY算子边缘提取(matlab)

    LOG算子和CANNY算子边缘提取 边缘的含义: 在数字图像中,边缘是指图像局部变化最显著的部分,边缘主要存在于目标与目标,目标与背景之间,是图像局部特性的不连续性,如灰度的突变.纹理结构的突变.颜色 ...

  8. 数字图像处理第三章边缘检测(Sobel算子、Laplace算子)

    边缘 边缘(edge)是指图像局部强度变化最显著的部分.主要存在于目标与目标.目标与背景.区域与区域(包括不同色彩)之间,是图像分割.纹理特征和形状特征等图像分析的重要基础. 边缘检测概念 1.边缘检 ...

  9. 基于MATLAB的三种边缘检测数字图像处理(sobel、Marr-Hildreth、Canny)

    资源下载地址:https://download.csdn.net/download/sheziqiong/85683013 资源下载地址:https://download.csdn.net/downl ...

最新文章

  1. cas server 配置
  2. 对ajax回调函数的研究
  3. AES加密_ js与C#互通
  4. 8s 接口压力测试_Python Locust 基于Robot Framework实现关键字驱动接口性能测试
  5. 判断无线网卡是否支持5GHz频段
  6. domino升级-602-651-851
  7. 如何将SAP UI5应用配置到SAP云平台Fiori Launchpad里
  8. TDMA 时分多路复用
  9. 笨办法学 Python · 续 第一部分:预备知识
  10. JQuery的ajaxFileUpload的使用
  11. Color the ball(树状数组区间更新+单点求值)
  12. sql azure 语法_Azure Kubernetes服务(AKS)中SQL Server
  13. 标准nvmexpress控制器驱动下载_NVM Express控制器驱动程序
  14. VIN码识别技术,扫一扫自动获取车架号
  15. Fintech将重构信贷行业的信用管理现状!
  16. 【眼镜片】绿膜和蓝膜有什么区别?
  17. 中国的chatGpt-中国chatGPT软件
  18. 【趣题分享】关于蒋干盗书你所需要知道的
  19. Python为我定时发短信
  20. 米Pad2Gpu降频修改

热门文章

  1. java keytool生成证书_用keytool生成证书
  2. 阿里云acp考试多少分考过?阿里云acp考试怎么查询?
  3. 解惑!PMI-ACP考试难度大吗?
  4. matlab 定义string_[整理]Matlab中函数定义方法
  5. kbengine配置mysql_KBEngine如何配置
  6. idea 创建java web项目_使用IDEA创建javaweb项目
  7. 怎样培养独挡一面的能力 .
  8. 新计算机设置,新电脑优化设置指南 小白必看的Win10优化设置教程
  9. 在NUC972上利用pjsip实现VOIP网关
  10. 买卖股票的最大利润II——动态规划、贪心