边缘检测matlab算法汇总

边缘检测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);

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

来源: http://blog.csdn.net/sunyun04826937/article/details/48932493

来自为知笔记(Wiz)

原文地址:https://www.cnblogs.com/jins-note/p/9520199.html

时间: 2024-11-05 16:42:06

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

在.NET中应用MATLAB算法

在科学研究和工程应用中,往往要进行大量的数学计算,其中包括矩阵运算.这些运算一般来说难以用手工精确和快捷地进行,而要借助计算机编制相应的程序做近似计算.目前流行用Basic.Fortran和c语言编制计算程序, 既需要对有关算法有深刻的了解,还需要熟练地掌握所用语言的语法及编程技巧.对多数科学工作者而言,同时具备这两方面技能有一定困难.通常,编制程序也是繁杂的,不仅消耗人力与物力,而且影响工作进程和效率.为克服上述困难,美国Mathwork公司于1967年推出了"Matrix Laborator

最短路算法汇总

校赛完了,这次校赛,做的很差,一个算法题没有,2个水题,1个贪心,概率DP,DP,数论题.DP还没开始研究,数论根本不会,数学太差了,省赛时卡数论,校赛依然卡数论,我擦,还是得继续学习啊! 一把锈迹斑斑的剑,只有不断的磨砺,才能展露锋芒! 以下为最短路总结: 最短路问题可分为: 一.单源最短路径算法,解决方案:Bellman-Ford算法,Dijkstra算法,SPFA 二.每对顶点间的最短路径算法:Floyd: (1).Dijkstra算法: (经典的算法,可以说是最短路问题的首选事例算法,但

排序算法汇总总结_Java实现

一.插入排序 直接插入排序(Insertion Sort)的算法描述是一种简单直观的排序算法.它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入.插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间. 代码实现: public class Inseretion_Sort {     public static void main(Stri

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

前言:     本人自接触算法近2年以来,在不断学习中越多地发觉各种算法中的美妙.之所以在这方面过多的投入,主要还是基于自身对高级程序设计的热爱,对数学的沉迷.回想一下,先后也曾参加过ACM大大小小的校级赛.区域赛.没什么惊天动地的奖项,最好的名次也就省三等奖.现在作为第一篇算法总结就拿常见的排序算法以我个人的理解,以及代码实现跟大家简单分享一下(排序算法如果一一罗列的话,不下十种.曾在图书馆的旧书架上看过一本近900页的书,内容就是专门介绍排序算法). 选择排序(select) 选择排序比较容

最小生成树算法汇总 (普里姆 &amp;&amp; 克鲁斯卡尔与并查集结合)

最小生成树: 今天研究了一下最小生成树,感觉最小生成树算法与最短路算法 相差不大,从Prim 与 Dijskrs算法可以看出 最小生成树即最小权重生成树,主要适用于 N个点之间 构造N-1线路,使N个点之间任意两点之间都可到达, 但是N个点之间 不构成回路,并且这N-1条线路的权重之和最小即 消耗最小. 注意:在构造最小生成树,加入新的节点时,不仅要保证权重最小,首要条件是 不能构成回路. 以图示为例,构造最小生成树 (一)普里姆   以下步骤 (二) 克鲁斯卡尔 最终的最小生成树 和 普里姆一

转载:各种排序算法汇总

转载地址:http://www.cnblogs.com/wolf-sun/p/4312475.html 各种排序算法汇总 目录 简介 交换排序 冒泡排序 快速排序 插入排序 直接插入排序 希尔排序 选择排序 简单选择排序 堆排序 归并排序 基数排序 总结 简介 排序是计算机内经常进行的一种操作,其目的是将一组“无序”的记录序列调整为“有序”的记 录序列.分内部排序和外部排序.若整个排序过程不需要访问外存便能完成,则称此类排序问题为内部排序.反之,若参加排序的记录数量很大,整个序列的排序过 程不可

排序算法汇总总结

一.插入排序 直接插入排序(Insertion Sort)的算法描述是一种简单直观的排序算法.它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入.插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间. 代码实现: #include <stdio.h> #include <stdlib.h> void swap(int *p1

机器学习算法汇总

机器学习算法汇总 1. 前言 通过将工作中用到的机器学习算法归纳汇总,方便以后查找,快速应用. 2. 推荐算法 交叉最小方差 算法名字 交叉最小方差, Alternating Least Squares, ALS 算法描述 Spark上的交替性最小二乘ALS本质是一种协同过滤的算法 算法原理 1. 首先将用户推荐对象交互历史转换为矩阵,行表示用户,列表示推荐对象,矩阵对应 i,j 表示用户 i 在对象 j 上有没有行为  2. 协同过滤就是要像填数独一样,填满1得到的矩阵,采用的方法是矩阵分解

笔画宽度变化(C++和matlab算法)

最近一直在看工作方面的书籍,把论文的事情搁置了,之前承诺的贴代码的事一直拖.现在把代码整理发上来,只有核心部分的,都不是我写的,我是网上整理下载的,matlab代码的效果比较差. 全部文件网盘下载地址:http://pan.baidu.com/s/1qWwNMfM; 1.C++代码 下载地址: 需要先安装opencv和boost库. boost库下载地址:http://www.boost.org/users/download/: boost的安装:http://www.cnblogs.com/p