一:梯度,边缘和角点

物体的边缘以局部特征不连续性出现,也就是图像局部亮度变化最显著的部分,如,灰度,颜色,纹理结构的突变。物体边缘是区分不同区域的分界处。图像边缘特性:方向和幅度。沿边缘走向的像素灰度变化平缓,垂直边缘走向的像素灰度变换剧烈。根据灰度变化特点可以将边缘分为:阶跃型,房顶型,凸缘型,这些变化对应图像中的不同景物。传统的边缘检测利用了边缘是图像灰度变化最剧烈的特点,对图像各个像素点求微分或者二阶微分来确定边缘点。一阶微分图像的峰值处对应着图像的边缘点,二阶微分图像的过零点对应着图像的边缘点。为了克服一阶导数的确定,可以计算 图像的梯度。图像梯度的重要性质是:梯度的方向在图像灰度最大变化率的上,它恰好反映出图像边缘上的灰度变化。

一阶导数可以用于检测图像中的一个点是不是边缘点,同样二阶导数的符号可以用来判断一个边缘像素是在边缘亮的一边还是边缘暗的一边(二阶导数为止,在暗的一边,二阶导数为负,在亮的一边)。

常用的边缘提取梯度算子有;:Robert算子 ,Sobel算子 ,Prewitt算子,Krisch算子,

z1

z2

z3

z4

z5

z6

z7

z8

z9

使用3*3模版方法得到Z5点处的一阶偏导数的简单方法是:

Gx=( z7+z8+z9)-(z1+z2+z3),        Gy=( z3+z6+z9)-(z1+z4+z7), 3*3大小的图像区域的第一行和第三行的差近似于X方向

的倒数,第一列和第三列的差近似于Y方向上的倒数。不同模版算子,只是加入的系数不同。

Sobel算子:模版

-1

0

1

-2

0

2

-1

0

1

-1

-2

-1

0

0

0

1

2

1

模版的系数总和为零,这正如倒数算子所预示的:此时在灰度级不变的区域,模板响应为零。

Gx=(-1Z1+ Z3-2Z4+2Z6-Z7+Z8),       Gy=(-1Z1-2 Z2-Z3+Z7+2Z8+Z9),

梯度的分量?f=|Gx|+|Gy|,保持着与灰度同级的变换,Z5=?f,最后循环判断if(?f>nthrethold)设置0,else设置255

即完成图像边缘检测。

3*3Scharr滤波器系数模版为:可以给出比Sobel滤波器更精确的结果,

-3

0

3

-10

0

10

-3

0

3

该系数对应X方向,其装置对应Y方向。

opencv库函数 : void cvSobel(const Cvarr * src,Cvarr* dst,int xorder,int yorder,int aperture_size=3);

二.拉普拉斯算子(二阶导数)

opencv库函数: void cvLaplace(const Cvarr* src,Cvarr* dst,int aperture_size=3)

三:Canny算子:采用Canny算子寻找输入图像的边缘并在输出图像中标志这些边缘

opencv库函数: void cvCanny(const Cvarr* image, Cvarr* deges,double threshold1,double threshold2,int aperture_size=3)

image输入图像,edges输出图像边缘,threshold1第一个阈值,threshold2,第二个阈值。两个阈值用来控制边缘连接,大阈值用来控制强边缘的初始分割。Canny算法的核心包括以下步骤:1用高斯滤波平滑,2用一价偏导数的有限差分计算梯度的幅值方向,3对梯度值进行非极大抑制,4,用双阈值检测和连接边缘,5采用高斯平滑函数。

-

php 图像边缘检测,科学网—图像处理边缘检测 - 李敏的博文相关推荐

  1. matlab使用load指令,科学网—matlab常用方法 - 陈超的博文

    之前将数组或者矩阵保存为一个mat格式的文件,在进行load命令读取时: s1=load('qiyipuzong.mat'): 得到的s1是struct类型的数据,而我想要的是一个矩阵或者数组. 经过 ...

  2. IOS OpenGL ES GPUImage 图像普瑞维特(Prewitt)边缘检测 GPUImagePrewittEdgeDetectionFilter

    目录 一.简介 二.效果演示 三.源码下载 四.猜你喜欢 零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目录 >> OpenGL ES 基础 零基础 Ope ...

  3. matlab批量生成灰度图像_科学网—matlab彩色图像的批处理转换为灰度、二值和主成分图图像 - 金秀良的博文...

    这段代码主要用来进行图像的批处理转换为灰度.二值和主成分图图像,希望给大家借鉴.其中 RGB to bw可以直接实现,但是效果不好,所以先用RGB to gray,之后再gray to bw.RGB ...

  4. matlab全景图素材,科学网—meshlab查看360度全景图像 - 王琳的博文

    一. 常见的360o全景照片,图像长宽比例通常为2:1. 二 . 用matlab的sphere()函数计算球面mesh的Vertex坐标[x,y,z]以及纹理坐标[xt,yt] N = 100; [x ...

  5. opencv for python的图像梯度算子以及canny边缘检测

    opencv for python的图像梯度算子以及canny边缘检测 一.图像梯度算子: 二.Canny边缘检测(一个多级边缘检测算法): 一.图像梯度算子: 1.概念简介(部分引自百度百科): 图 ...

  6. 图像处理+边缘检测算法

    一.边缘检测算子类别 常见边缘检测算子:Roberts .Sobel .Prewitt.Laplacian.Log/Marr.Canny.Kirsch.Nevitia 二.一阶微分算子:Roberts ...

  7. Matlab学习5-图像处理之图像乘法、除法、边缘检测

    Matlab学习5-图像处理之逻辑运算 图像乘法.除法.边缘检测 1.图像乘法 效果 代码 %图像相乘img1=imread("img\rice.png"); img2=imrea ...

  8. python dataset[trans_科学网—Python GDAL 图像坐标,投影坐标,经纬度坐标 三者映射及运行错误解决 - 吴妍潼的博文...

    题记: 写该博客是因为自己经常遇到这个问题,而我发现网络上关于这方面浏览量高的一些代码竟然都有误,每次照搬都被虐得很惨.有一些同志在某些博客下方留言说代码有问题,而博主没有回应,也没有更改错误.为了自 ...

  9. matlab中如何随机排列,科学网—对图片进行拆分并随机排列的快速算法(MATLAB) - 徐磊的博文...

    我手头快完成的一个改进荧光显微镜图像处理的研究项目需要用到拆分一个图片,并对其进行随机排列的功能.之前我写的程序虽然能够得到想要的结果,但是运行太慢,非常耗时.原方法是计算图片被拆分成的各个方格的位置 ...

最新文章

  1. java 文件拷贝文件怎么打开_java如何拷贝文件
  2. 数论 - SGU 105 DIV3
  3. pgsql 两个时间字段相减_如何在Excel做专业的时间序列分析
  4. fir滤波器c++程序_电气信息类专业课程之matlab系统仿真 第三章 滤波器的种类(1)...
  5. 域名恶意指向的问题解决
  6. 比物理线程都好用的C++20的协程,你会用吗?
  7. 【Elasticsearch】改进布尔查询的搜索相关性
  8. arch linux 时间,System time (简体中文)
  9. Struts1.x系列教程(17):使用IncludeAction和ForwardAction类包含和转入Web资源
  10. 记录:Linux 设置文件夹 0777 权限失效问题
  11. Unity3D 发布APK安卓环境配置步骤、安装、教程(含Java/Android)(超全流程)
  12. Linux中句柄是什么?
  13. 教你,用java生成验证码(这这太简单了了吧!!!!!!!)
  14. web 打开pdf文件
  15. 不会吧不会吧!不会还有人用破解版origin吧——免费使用OriginPro学习版方法
  16. Captcha Cracker (java)附带replace用法
  17. 2018-2-13-win10-uwp-smms图床
  18. Vue3 怎么使用icon阿里字体图标
  19. mysql聚簇索引和非聚簇索引
  20. 力扣765----情侣牵手(C++异或解法)

热门文章

  1. 简单静态web页面+动画(小案例)
  2. 产品30讲之产品周期
  3. 天源财富:型催化体系可实现高效电催化析氢
  4. struct 结构体中字符串数组赋值的问题
  5. 学习大数据前应该了解什么?
  6. 简要分析“区块链+物联网”有哪些坎?
  7. 趣谈implicit instantiation of undefined template
  8. Docker学习(二):安装软件
  9. apollo github的说明介绍
  10. Android之vold进程启动源码分析