边缘分割技术

常见检测模板

检测间断点

\[检测间断点=
\left[
\begin{matrix}
-1 & -1 & -1 \ -1 & 8 & -1 \ -1 & -1 & -1 \ \end{matrix}
\right]
\]

检测线段

\[水平检测=
\left[
\begin{matrix}
-1 & -1 & -1 \ 2 & 2 & 2 \ -1 & -1 & -1 \ \end{matrix}
\right]
\]

\[垂直检测=
\left[
\begin{matrix}
-1 & 2 & -1 \ -1 & 2 & -1 \ -1 & 2 & -1 \ \end{matrix}
\right]
\]

\[+45°检测=
\left[
\begin{matrix}
-1 & -1 & 2 \ -1 & 2 & -1 \ 2 & -1 & -1 \ \end{matrix}
\right]
\]

\[-45°检测=
\left[
\begin{matrix}
2 & -1 & -1 \ -1 & 2 & -1 \ -1 & -1 & 2 \ \end{matrix}
\right]
\]

如何使用这些检测模板?

h1=模板;
h2=模板;
h3=模板;
h4=模板;
imgOut1=imfilter(imgIn,h1);
imgOut2=imfilter(imgIn,h2);
imgOut3=imfilter(imgIn,h3);
imgOut4=imfilter(imgIn,h4);

J=imgOut1+imgOut2+imgOut3+imgOut4;
imshow(J);

微分算子

roberts算子

  • roberts算子由下面两个组成
    \[
    \left[
    \begin{matrix}
    1 & 0 \ 0 & -1 \\end{matrix}
    \right]
    \]
    \[
    \left[
    \begin{matrix}
    0 & 1 \ -1 & 0 \\end{matrix}
    \right]
    \]
  • 使用edge()进行图像边缘检测,该函数返回二值图像,大小与输入相同,数据类型为逻辑型
    BW=edge(I,‘roberts‘); %采用系统自动计算的阈值分割图像,返回BW二值图像
    BW=edge(I,‘roberts‘,thresh); %自己设定分割阈值,忽略小于阈值的像素
    [BW,thresh]=edge(I,‘roberts‘...) %返回采用的分割阈值

prewitt算子

  • 可定义方向
  • prewitt算子由下面两个组成
    \[水平梯度=
    \left[
    \begin{matrix}
    -1 & -1 & -1 \ 0 & 0 & 0 \ 1 & 1 & 1 \\end{matrix}
    \right]
    \]
    \[垂直梯度=
    \left[
    \begin{matrix}
    -1 & 0 & -1 \ -1 & 0 & -1 \ -1 & 0 & -1 \\end{matrix}
    \right]
    \]
  • 使用edge()进行图像边缘检测,该函数返回二值图像,大小与输入相同,数据类型为逻辑型
    BW=edge(I,‘prewitt‘); %采用系统自动计算的阈值分割图像,返回BW二值图像
    BW=edge(I,‘prewitt‘,thresh); %thresh不设或为[],则系统自己计算
    BW=edge(I,‘prewitt‘,thresh,direction); %direction方向,可取horizontal、vertical和both(默认)
    [BW,thresh]=edge(I,‘prewitt‘...) %返回采用的分割阈值

sobel算子

  • 可定义方向
  • sobel算子由下面两个组成
    \[水平梯度=
    \left[
    \begin{matrix}
    -1 & 0 & 1 \ -2 & 0 & 2 \ -1 & 0 & 1 \\end{matrix}
    \right]
    \]
    \[垂直梯度=
    \left[
    \begin{matrix}
    -1 & -2 & -1 \ 0 & 0 & 0 \ 1 & 2 & 1 \\end{matrix}
    \right]
    \]
  • 使用edge()进行图像边缘检测,该函数返回二值图像,大小与输入相同,数据类型为逻辑型
    BW=edge(I,‘sobel‘); %采用系统自动计算的阈值分割图像,返回BW二值图像
    BW=edge(I,‘sobel‘,thresh); %归一化阈值
    BW=edge(I,‘sobel‘,thresh,direction); %direction方向,可取horizontal、vertical和both(默认)
    [BW,thresh]=edge(I,‘sobel‘...) %返回采用的分割阈值

canny算子

  • canny算子具有低误码率、高定位精度和抑制虚假边缘等优点
  • 使用edge()进行图像边缘检测,该函数返回二值图像,大小与输入相同,数据类型为逻辑型
    BW=edge(I,‘canny‘); %采用系统自动计算的阈值分割图像,返回BW二值图像
    BW=edge(I,‘canny‘,thresh); %阈值是一个含2个元素的向量(最低和最高阈值),当单指定时默认是最高阈值,最低阈值为0.4*thresh
    BW=edge(I,‘canny‘,thresh,direction); %direction方向,可取horizontal、vertical和both(默认)
    [BW,thresh]=edge(I,‘canny‘...) %返回采用的分割阈值

LOG算子

  • 二阶微分的拉普拉斯算子对噪声非常敏感,LOG算子是在经典算子基础发展起来的边缘检测算子,根据信噪比求得检测边缘的最有滤波器。先采用Gaussian对图像进行平滑,在采用拉普拉斯算子检测图像边缘。
  • 边界定位精度高,抗干扰能力强,连续性好
  • 使用edge()进行图像边缘检测,该函数返回二值图像,大小与输入相同,数据类型为逻辑型
    BW=edge(I,‘log‘); %采用系统自动计算的阈值分割图像,返回BW二值图像
    BW=edge(I,‘log‘,thresh); %阈值是一个含2个元素的向量(最低和最高阈值),当单指定时默认是最高阈值,最低阈值为0.4*thresh
    BW=edge(I,‘log‘,thresh,sigma); %高斯平滑的sigma参数
    [BW,thresh]=edge(I,‘log‘...) %返回采用的分割阈值

利用fspecial()产生域定义模板

h=fspecial(method,patter)
-method:算子
    -'sobel'
    -'prewitt'
    -'laplacian'
    -'log',带参数:高斯sigma
-patter:参数,根据算子方法不同拥有不同参数
imgOut=imfilter(I,h...)

原文地址:https://www.cnblogs.com/thgpddl/p/12520464.html

时间: 2024-10-28 11:51:59

边缘分割技术的相关文章

图像语义分割技术

引用自:https://www.leiphone.com/news/201705/YbRHBVIjhqVBP0X5.html 大多数人接触 "语义" 都是在和文字相关的领域,或语音识别,期望机器能够识别你发出去的消息或简短的语音,然后给予你适当的反馈和回复.嗯,看到这里你应该已经猜到了,图像领域也是存在 "语义" 的. 今天是 AI 大热年,很多人都关注与机器人的语音交互,可是有没有想过,将来的机器人如果不能通过图像来识别主人,家里的物品.宠物,那该多没意思.说近一

静态网页开发技术-HTML

今天我重新复习了一下静态网页开发技术,概括如下. 一 .HTML文档结构与基本语法 :放置了标签的文本文档,可供浏览器解释执行的网页文件 1.注释标记 2.标记 3.属性 二.基本标记与使用 1.网页基本结构与标记 2.文本与段落标记 3.列表标签 4.超链接标签 5.图片标记 6.定时刷新或跳转 7.表格 三 HTML表单标签与表单设计 1.<FORM>标记及其属性 2  <INPUT>标记及其属性 3 <下拉列表框<SELECT>,<OPTION>

C#网络编程技术FastSocket实战项目演练

一.FastSocket课程介绍 .NET框架虽然微软提供了socket通信的类库,但是还有很多事情要自己处理,比如TCP协议需要处理分包.组包.粘包.维护连接列表等,UDP协议需要处理丢包.乱序,而且对于多连接并发,还要自己处理多线程等等.本期分享课程阿笨给大家带来的是来源于github开源Socket通信中间件:FastSocket,目的就是把大家从繁琐的网络编程技术中彻底地解放和释放出来. 阿笨只想安安静静的学习下网络编程技术Socket后,将学习的成果直接灵活的运用到自己的实际项目中去.

Java技术的特点

Java技术是一套完整的IT行业解决方案,其中包含了很多技术.最初是从解决家电设备联网通讯的方案发展起来的,其特点适用于Internet,于是在Internet广泛应用的环境下,迅速发展成为一种计算机语言.一个平台.一个网络计算的架构. 从整体上划分,Java技术可分成Java编程语言和Java平台.Java编程语言是一种高级编程语言,Java平台是指程序运行的硬件或软件环境. Java编程语言的特征: 1.简单易用 2.面向对象 3.跨平台,可移植 4.多线程 5.健壮性 6.安全性 7.动态

谈谈-Android中的接口回调技术

Android中的接口回调技术有很多应用的场景,最常见的:Activity(人机交互的端口)的UI界面中定义了Button,点击该Button时,执行某个逻辑. 下面参见上述执行的模型,讲述James对Android接口回调技术的理解(结合前人的知识和自己的实践). 使用一个比喻很形象地说明:客户端有个疑问打电话请教服务端,但服务端无法现场给出解答,相互之间约定:服务端一旦有答案,使用电话的方式反馈给客户端. 以上有三个主体:客户端.服务端和接口(方式). 接口回调的原理框图说明: Demo界面

一张图掌握移动Web前端所有技术(大前端、工程化、预编译、自动化)

你要的移动web前端都在这里! 大前端方向:移动Web前端.Native客户端.Node.js. 大前端框架:React.Vue.js.Koa 跨终端技术:HTML 5.CSS 3.JavaScript 跨平台框架:React Native.Cordova 前端工程化:Grunt.Gulp.Webpack 前端预编译:Babel.Sass.Less 自动化测试:Jasmine.Mocha.Karma 一图在手,应有尽有! 更多信息参考:https://item.jd.com/12170351.h

微软要做用云量挖掘机,以技术驱动数字化转型快公司

今年7月,首次更名为"Inspire"的微软WPC全球合作伙伴大会上,微软宣布将所有与合作伙伴相关的角色都重新整合为一个新的部门:统一商业合作伙伴部门(One Commercial Partner),并进行了一整套的组织和流程改组,以适应云计算时代的用户需求与"用云量"规律. 2017年9月12日,微软大中华区副总裁.全球渠道事业部总经理.商业客户事业部总经理包嘉峰与媒体分享了这两个月微软商业合作伙伴部转型以来,微软自身所发生的变化以及为客户所带来的价值.根据包嘉峰

游戏服务器开发需要学习的技术

一,游戏服务器编程语言的选择 所谓的游戏服务器编程语言其实有很多,基本上任何一种语言都可以作为游戏服务器的编程语言.这需要根据自己游戏的类型和要求加以选择.比如C++,Java ,Erlang,go等等.目前我用过的只有C++和Java.但是以Java为主.所以接下来就以自己的经验,谈谈以Java为核心的游戏服务器开发技术体系. Java目前作为游戏服务器开发语言已经很是普遍.但是大多数是作为页游或手游的服务器,而端游戏一般选择C++,因为端游对服务器的性能要求相对比较高一些.两种语言各有利弊.

技术与技术人员的价值

在我工作到第四年出头时,总是感觉自己的价值被低估了,换个说法就是感觉工资低了. 当时,总觉得技术不如管理,但又听闻有人一直做技术也有到年薪百万的,虽不在身边,但江湖总有这样的传说.再环顾周身环境,似乎除了去伊拉克做技术能让收入立刻飙升(补贴超过工资),让我不禁怀疑江湖的百万传说是不是被高估了.再加上工作几年后,技术提升感觉明显变慢,第一个天花板已近在眼前. 分类 又过了七.八年后,再回顾走过的技术道路.感觉技术的价值有时被高估,有时又被低估,但长期看,很少有人能一直享受到高估的溢价,同样也很少有