边缘检测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),又称最小核值相似区。它使用一个原型模板和一个圆的中心点,通过圆心点像元值与模板圆内其他像元值的比较,统计出圆中心点像元值近似的像元数量,并与所设定的阈值进行比较,以确定是否是边缘。
- function image_out = susan(im,threshold)
- % 功能:实现运用SUNSAN算子进行边缘检测
- % 输入:image_in-输入的待检测的图像
- % threshold-阈值
- % 输出:image_out-检测边缘出的二值图像
- % 将输入的图像矩阵转换成double型
- d = length(size(im));
- if d==3
- image=double(rgb2gray(im));
- elseif d==2
- image=double(im);
- end
- % 建立SUSAN模板
- 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]);
- R=zeros(size(image));
- % 定义USAN 区域
- nmax = 3*37/4;
- [a b]=size(image);
- new=zeros(a+7,b+7);
- [c d]=size(new);
- new(4:c-4,4:d-4)=image;
- for i=4:c-4
- for j=4:d-4
- current_image = new(i-3:i+3,j-3:j+3);
- current_masked_image = mask.*current_image;
- % 调用susan_threshold函数进行阈值比较处理
- current_thresholded = susan_threshold(current_masked_image,threshold);
- g=sum(current_thresholded(:));
- if nmax<g
- R(i,j) = g-nmax;
- else
- R(i,j) = 0;
- end
- end
- end
- image_out=R(4:c-4,4:d-4);
- susan_threshold函数
- function thresholded = susan_threshold(image,threshold)
- % 功能:设定SUSAN算法的阈值
- [a b]=size(image);
- intensity_center = image((a+1)/2,(b+1)/2);
- temp1 = (image-intensity_center)/threshold;
- temp2 = temp1.^6;
- thresholded = exp(-1*temp2);
优点:抗噪能力好、计算量小速度快、可以检测边缘的方向信息。
边缘检测matlab算法汇总的更多相关文章
- 排序算法汇总(C/C++实现)
前言: 本人自接触算法近2年以来,在不断学习中越多地发觉各种算法中的美妙.之所以在这方面过多的投入,主要还是基于自身对高级程序设计的热爱,对数学的沉迷.回想一下,先后也曾参加过ACM大大小小的 ...
- 遗传学详解及Matlab算法实现
遗传学算法概述 从之前转载的博客<非常好的理解遗传算法的例子>中可以知道,遗传学算法主要有6个步骤: 1. 个体编码 2. 初始群体 3. 适应度计算 4. 选择运算 5. 交叉运算 6. ...
- matlab算法转为c语言注意事项
matlab算法转为c语言后,影响c语言效率的关键在于multiword的产生,基于此会有multiword加减法和乘除法,极大消耗资源,减少甚至消除multiword很重要,需注意的是:算法中尽量减 ...
- JavaScript 数据结构与算法之美 - 十大经典排序算法汇总(图文并茂)
1. 前言 算法为王. 想学好前端,先练好内功,内功不行,就算招式练的再花哨,终究成不了高手:只有内功深厚者,前端之路才会走得更远. 笔者写的 JavaScript 数据结构与算法之美 系列用的语言是 ...
- 【机器学习】 Matlab 2015a 自带机器学习算法汇总
MATLAB机器学习没看到啥教程,只有一系列函数,只好记录下: MATLAB每个机器学习方法都有很多种方式实现,并可进行高级配置(比如训练决策树时设置的各种参数) ,这里由于篇幅的限制,不再详细描述. ...
- 数字图像处理:基于MATLAB的车牌识别项目 标签: 图像处理matlab算法 2017-06-24 09:17 98人阅读 评论(0)
学过了数字图像处理,就进行一个综合性强的小项目来巩固一下知识吧.前阵子编写调试了一套基于MATLAB的车牌识别的项目的代码.今天又重新改进了一下代码,识别的效果好一点了,也精简了一些代码.这里没有使用 ...
- matlab算法
流水线型车间作业调度问题遗传算法Matlab源码流水线型车间作业调度问题可以描述如下:n个任务在流水线上进行m个阶段的加工,每一阶段至少有一台机器且至少有一个阶段存在多台机器,并且同一阶段上各机器的处 ...
- Python: PS 图层混合算法汇总
本文用 Python 实现了PS 中的图层混合算法,把很多常见的图层混合算法都汇总到了一起,比起以前写的算法,就是用矩阵运算代替了很耗时的for 循环,运行效率有所提升.具体的代码如下: import ...
- 【matlab系列汇总】小白博主的matlab学习实战快速进阶之路(持续更新)
我把之前在学习和工作中使用matlab的技巧和使用教程等相关整理到这里,方便查阅学习,如果能帮助到您,请帮忙点个赞: MATLAB可以进行矩阵运算.绘制函数和数据.实现算法.创建用户界面.连接其他编程 ...
随机推荐
- LOJ565. 「LibreOJ Round #10」mathematican 的二进制(NTT)
题目链接 https://loj.ac/problem/565 题解 首先,若进行所有操作之后成功执行的操作数为 \(m\),最终得到的数为 \(w\),那么发生改变的二进制位的数量之和(即代价之和) ...
- 编译安装php-5.3.27报错:make: *** [sapi/fpm/php-fpm] 错误 1
安装PHP的时候make报错:make: *** [sapi/fpm/php-fpm] Error 1 原因:Centos6.8之后已经将iconv库加进来了,如果再安装libiconv库相当于重复一 ...
- android 捕获未try的异常
1.Thread.UncaughtExceptionHandler java里有很多异常如:空指针异常,越界异常,数值转换异常,除0异常,数据库异常等等.如果自己没有try / catch 那么线程就 ...
- git遇到的常见错误整理
远程仓库与本地代码不一致 解决: git pull --rebase git@gitee.com:l544402029/MUTAO.git 将仓库里的代码pull下来 ,然后重新进行git add ...
- oracle client 低于 oracle server 端,导致报错ORA-01882
https://forums.toadworld.com/t/ora-01882-when-i-want-to-view-records-con-dba-scheduler-jobs-toad-10- ...
- 记.net 遇到的几个bug
这两个bug都是查了挺久才查到的,随手记是个好习惯. 1.public static CultureInfo GetCultureInfo(string name); 方法,传参错误时,某些操作系统环 ...
- Java 抽象类的简单使用
自己做的一点笔记... 抽象类:使用关键词 abstract 进行修饰,抽象类不能生成对象(实例化),且含有抽象方法(使用 abstract 进行声明,并且没有方法体). 特点: 1️⃣ 抽象类不一 ...
- SpringBoot项目中获取applicationContext对象
ApplicationContext 对象是Spring开源框架的上下文对象实例,也就是我们常说的Spring容器,一般情况下我们是不用手动来管理它,而是由Spring框架自己来维护bean之间的关系 ...
- Oracle 数据库、表、方案的逻辑备份与恢复
数据库(表)的逻辑备份与恢复 逻辑备份是指使用工具export将数据对象的结构和数据导出到文件的过程,逻辑恢复是指当数据库对象被破坏而使用工具import利用备份的文件把数据对象导入到数据库的过程,逻 ...
- 003-BootStrap完整模板
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8& ...