边缘检测matlab算法汇总

1.      基于一阶微分算子检测边缘图像

一阶微分边缘算子又称梯度边缘算子,它是利用图像在边缘处的阶跃性,及图像梯度在边缘去得极大值得特征性进行边缘检测。

Sobel算子:image =edge(in_image,’sobel’,threshold,direction);

Prewitt算子: image = edge(in_image,’prewitt’,threshold,direction);

Roberts算子: image = edge(in_image,’sobel’,threshold);

其中,in_image 是灰度图像,threshold是阈值,direction是方向。

优点:实现简单、运算速度快

缺点:易受噪音影响,主要原因其一是实际边缘灰度与理想边缘灰度存在差异,有可能检测出多个边缘;其二是算子尺度固定不利于检测出不同尺度的边缘。

Canny算子:image = edge(in_image,’canny’,threshold);

其中,in_image 是灰度图像,threshold是阈值。

canny算子主要在原一阶微分算子基础上进行了扩展,增加了非最大值抑制和双阈值两项改进。利用非最大值抑制不仅可以有效地抑制多响应边缘,而且还可以提高边缘的定位精度。利用双阈值可以有效减少边缘的漏检率。主要分为4步进行:高斯平滑去噪、计算梯度与方向角、非最大值抑制、滞后阈值化。

2.      基于二阶微分算子检测边缘图像

二阶微分边缘检测算子是利用图像在边缘处的阶跃性导致图像二阶微分在边缘处出现零值这一特性进行边缘检测的,因此该算法又称零点算子和拉普拉斯算子。

高斯拉普拉斯方法(laplacian of Gaussian, LoG):image = edge(in_image,’log’,threshold);

其中,in_image 是灰度图像,threshold是阈值。

Log算子检测边缘的结果要由于roberts和sobel算子,检测出来的边缘比较完整,且抗噪能力较好。

3.      基于SUSAN特征检测算子的边缘提取

SUSAN(Smallest Univalue Segment AssimilatingNucleus),又称最小核值相似区。它使用一个原型模板和一个圆的中心点,通过圆心点像元值与模板圆内其他像元值的比较,统计出圆中心点像元值近似的像元数量,并与所设定的阈值进行比较,以确定是否是边缘。

[plain] view plain copy
  1. function image_out = susan(im,threshold)
  2. % 功能:实现运用SUNSAN算子进行边缘检测
  3. % 输入:image_in-输入的待检测的图像
  4. %       threshold-阈值
  5. % 输出:image_out-检测边缘出的二值图像
  6. % 将输入的图像矩阵转换成double型
  7. d = length(size(im));
  8. if d==3
  9. image=double(rgb2gray(im));
  10. elseif d==2
  11. image=double(im);
  12. end
  13. % 建立SUSAN模板
  14. mask = ([ 0 0 1 1 1 0 0 ;0 1 1 1 1 1 0;1 1 1 1 1 1 1;1 1 1 1 1 1 1;1 1 1 1 1 1 1;0 1 1 1 1 1 0;0 0 1 1 1 0 0]);
  15. R=zeros(size(image));
  16. % 定义USAN 区域
  17. nmax = 3*37/4;
  18. [a b]=size(image);
  19. new=zeros(a+7,b+7);
  20. [c d]=size(new);
  21. new(4:c-4,4:d-4)=image;
  22. for i=4:c-4
  23. for j=4:d-4
  24. current_image = new(i-3:i+3,j-3:j+3);
  25. current_masked_image = mask.*current_image;
  26. %   调用susan_threshold函数进行阈值比较处理
  27. current_thresholded = susan_threshold(current_masked_image,threshold);
  28. g=sum(current_thresholded(:));
  29. if nmax<g
  30. R(i,j) = g-nmax;
  31. else
  32. R(i,j) = 0;
  33. end
  34. end
  35. end
  36. image_out=R(4:c-4,4:d-4);
[plain] view plain copy
[plain] view plain copy
  1. susan_threshold函数
[html] view plain copy
  1. function thresholded = susan_threshold(image,threshold)
  2. % 功能:设定SUSAN算法的阈值
  3. [a b]=size(image);
  4. intensity_center = image((a+1)/2,(b+1)/2);
  5. temp1 = (image-intensity_center)/threshold;
  6. temp2 = temp1.^6;
  7. thresholded = exp(-1*temp2);

优点:抗噪能力好、计算量小速度快、可以检测边缘的方向信息。

边缘检测matlab算法汇总的更多相关文章

  1. 排序算法汇总(C/C++实现)

    前言:     本人自接触算法近2年以来,在不断学习中越多地发觉各种算法中的美妙.之所以在这方面过多的投入,主要还是基于自身对高级程序设计的热爱,对数学的沉迷.回想一下,先后也曾参加过ACM大大小小的 ...

  2. 遗传学详解及Matlab算法实现

    遗传学算法概述 从之前转载的博客<非常好的理解遗传算法的例子>中可以知道,遗传学算法主要有6个步骤: 1. 个体编码 2. 初始群体 3. 适应度计算 4. 选择运算 5. 交叉运算 6. ...

  3. matlab算法转为c语言注意事项

    matlab算法转为c语言后,影响c语言效率的关键在于multiword的产生,基于此会有multiword加减法和乘除法,极大消耗资源,减少甚至消除multiword很重要,需注意的是:算法中尽量减 ...

  4. JavaScript 数据结构与算法之美 - 十大经典排序算法汇总(图文并茂)

    1. 前言 算法为王. 想学好前端,先练好内功,内功不行,就算招式练的再花哨,终究成不了高手:只有内功深厚者,前端之路才会走得更远. 笔者写的 JavaScript 数据结构与算法之美 系列用的语言是 ...

  5. 【机器学习】 Matlab 2015a 自带机器学习算法汇总

    MATLAB机器学习没看到啥教程,只有一系列函数,只好记录下: MATLAB每个机器学习方法都有很多种方式实现,并可进行高级配置(比如训练决策树时设置的各种参数) ,这里由于篇幅的限制,不再详细描述. ...

  6. 数字图像处理:基于MATLAB的车牌识别项目 标签: 图像处理matlab算法 2017-06-24 09:17 98人阅读 评论(0)

    学过了数字图像处理,就进行一个综合性强的小项目来巩固一下知识吧.前阵子编写调试了一套基于MATLAB的车牌识别的项目的代码.今天又重新改进了一下代码,识别的效果好一点了,也精简了一些代码.这里没有使用 ...

  7. matlab算法

    流水线型车间作业调度问题遗传算法Matlab源码流水线型车间作业调度问题可以描述如下:n个任务在流水线上进行m个阶段的加工,每一阶段至少有一台机器且至少有一个阶段存在多台机器,并且同一阶段上各机器的处 ...

  8. Python: PS 图层混合算法汇总

    本文用 Python 实现了PS 中的图层混合算法,把很多常见的图层混合算法都汇总到了一起,比起以前写的算法,就是用矩阵运算代替了很耗时的for 循环,运行效率有所提升.具体的代码如下: import ...

  9. 【matlab系列汇总】小白博主的matlab学习实战快速进阶之路(持续更新)

    我把之前在学习和工作中使用matlab的技巧和使用教程等相关整理到这里,方便查阅学习,如果能帮助到您,请帮忙点个赞: MATLAB可以进行矩阵运算.绘制函数和数据.实现算法.创建用户界面.连接其他编程 ...

随机推荐

  1. c++重载operator的示例 非原创

    #include<iostream> #include<vector> using namespace std; class test{ public: int v; /*构造 ...

  2. 2018牛客多校6 - I Team Rocket KD树维护空间

    题意:给出n条铁路区间\([L,R]\),共有m个boom依时间顺序放置在\(k_i\)中,区间与\(k_i\)有交集的都被炸掉 求每次炸掉的铁路个数和最后输出所有id被炸的时间点 炸弹能炸到的区间满 ...

  3. 移动端滑动时页面惯性滑动overflow-scrolling: touch

    -webkit-overflow-scrolling:auto | touch; auto: 普通滚动,当手指从触摸屏上移开,滚动立即停止 touch:滚动回弹效果,当手指从触摸屏上移开,内容会保持一 ...

  4. 学习总结 —— python

    1.了解python 学习python 3 入门知识 python  库 .包  .模块 2.了解pycharm Pycharm 导入 Python 包.模块 pycharm 快捷键 3.了解djan ...

  5. http-https php文件下载

    http: function httpDownload($url, $path = '', $filename = '', $timeout = 60,$type = 0) { if ($url == ...

  6. MySQL数据库 InnoDB引擎 事务及行锁总结

    一.事务 1.事务的四大特性 (1)原子性:事务开始后所有的操作要么一起成功,要么一起失败,整个事务是一个不可分割的整体. (2)一致性:是物开始前到结束后,数据库的完整性约束没有被破坏. (3)隔离 ...

  7. Redis+Lua实现限流

    相比Redis事务来说,Lua脚本有以下优点减少网络开销: 不使用 Lua 的代码需要向 Redis 发送多次请求, 而脚本只需一次即可, 减少网络传输;原子操作: Redis 将整个脚本作为一个原子 ...

  8. 加载 Firefox 配置

    有小伙伴在用脚本启动浏览器时候发现原来下载的插件不见了,无法用 firebug在打开的页面上继续定位页面元素,调试起来不方便 .加载浏览器配置,需要用 FirefoxProfile(profile_d ...

  9. unittest 几个重要概念

    unittest是一个python版本的junit,junit是java中的单元测试框架,unittest实现了很多junit中的概念,比如我们非常熟悉的test case, test suite等, ...

  10. OSI与TCP/IP协议区别

    1 OSI参考模型 谈到网络不能不谈OSI参考模型,虽然OSI参考模型的实际应用意义不是很大,但其的确对于理解网络协议内部的运作很有帮助,也为我们学习网络协议提供了一个很好的参考.在现实网络世界里,T ...