图像处理常用边缘检测算子总结
在实际的图像分割中,往往只用到一阶和二阶导数,虽然,原理上,可以用更高阶的导数,但是,因为噪声的影响,在纯粹二阶的导数操作中就会出现对噪声的敏感现象,三阶以上的导数信息往往失去了应用价值。二阶导数还可以说明灰度突变的类型。在有些情况下,如灰度变化均匀的图像,只利用一阶导数可能找不到边界,此时二阶导数就能提供很有用的信息。二阶导数对噪声也比较敏感,解决的方法是先对图像进行平滑滤波,消除部分噪声,再进行边缘检测。不过,利用二阶导数信息的算法是基于过零检测的,因此得到的边缘点数比较少,有利于后继的处理和识别工作。
各种算子的存在就是对这种导数分割原理进行的实例化计算,是为了在计算过程中直接使用的一种计算单位。
1.Sobel算子
其主要用于边缘检测,在技术上它是以离散型的差分算子,用来运算图像亮度函数的梯度的近似值, Sobel算子是典型的基于一阶导数的边缘检测算子,由于该算子中引入了类似局部平均的运算,因此对噪声具有平滑作用,能很好的消除噪声的影响。Sobel算子对于象素的位置的影响做了加权,与Prewitt算子、Roberts算子相比因此效果更好。
Sobel算子包含两组3x3的矩阵,分别为横向及纵向模板,将之与图像作平面卷积,即可分别得出横向及纵向的亮度差分近似值。实际使用中,常用如下两个模板来检测图像边缘。
检测水平边沿 横向模板 : 检测垂直平边沿 纵向模板:
图像的每一个像素的横向及纵向梯度近似值可用以下的公式结合,来计算梯度的大小。
然后可用以下公式计算梯度方向。
在以上例子中,如果以上的角度Θ等于零,即代表图像该处拥有纵向边缘,左方较右方暗。
缺点是Sobel算子并没有将图像的主题与背景严格地区分开来,换言之就是Sobel算子并没有基于图像灰度进行处理,由于Sobel算子并没有严格地模拟人的视觉生理特征,所以提取的图像轮廓有时并不能令人满意。
2. Isotropic Sobel算子
Sobel算子另一种形式是(Isotropic Sobel)算子,加权平均算子,权值反比于邻点与中心点的距离,当沿不同方向检测边缘时梯度幅度一致,就是通常所说的各向同性Sobel(Isotropic Sobel)算子。模板也有两个,一个是检测水平边沿的 ,另一个是检测垂直平边沿的 。各向同性Sobel算子和普通Sobel算子相比,它的位置加权系数更为准确,在检测不同方向的边沿时梯度的幅度一致。
3. Roberts算子
4. Prewitt算子
Prewitt算子是一种一阶微分算子的边缘检测,利用像素点上下、左右邻点的灰度差,在边缘处达到极值检测边缘,去掉部分伪边缘,对噪声具有平滑作用 。其原理是在图像空间利用两个方向模板与图像进行邻域卷积来完成的,这两个方向模板一个检测水平边缘,一个检测垂直边缘。
对数字图像f(x,y),Prewitt算子的定义如下:
Prewitt算子对噪声有抑制作用,抑制噪声的原理是通过像素平均,但是像素平均相当于对图像的低通滤波,所以Prewitt算子对边缘的定位不如Roberts算子。
因为平均能减少或消除噪声,Prewitt梯度算子法就是先求平均,再求差分来求梯度。水平和垂直梯度模板分别为:
检测水平边沿 横向模板 检测垂直平边沿 纵向模板:
该算子与Sobel算子类似,只是权值有所变化,但两者实现起来功能还是有差距的,据经验得知Sobel要比Prewitt更能准确检测图像边缘。
5.Laplacian算子
Laplace算子是一种各向同性算子,二阶微分算子,在只关心边缘的位置而不考虑其周围的象素灰度差值时比较合适。Laplace算子对孤立象素的响应要比对边缘或线的响应要更强烈,因此只适用于无噪声图象。存在噪声情况下,使用Laplacian算子检测边缘之前需要先进行低通滤波。所以,通常的分割算法都是把Laplacian算子和平滑算子结合起来生成一个新的模板。
拉普拉斯算子也是最简单的各向同性微分算子,具有旋转不变性。一个二维图像函数的拉普拉斯变换是各向同性的二阶导数,定义
了更适合于数字图像处理,将拉式算子表示为离散形式:
另外,拉普拉斯算子还可以表示成模板的形式,如下图所示,
离散拉普拉斯算子的模板:, 其扩展模板: 。
拉式算子用来改善因扩散效应的模糊特别有效,因为它符合降制模型。扩散效应是成像过程中经常发生的现象。
Laplacian算子一般不以其原始形式用于边缘检测,因为其作为一个二阶导数,Laplacian算子对噪声具有无法接受的敏感性;同时其幅值产生算边缘,这是复杂的分割不希望有的结果;最后Laplacian算子不能检测边缘的方向;所以Laplacian在分割中所起的作用包括:(1)利用它的零交叉性质进行边缘定位;(2)确定一个像素是在一条边缘暗的一面还是亮的一面;一般使用的是高斯型拉普拉斯算子(Laplacian of a Gaussian,LoG),由于二阶导数是线性运算,利用LoG卷积一幅图像与首先使用高斯型平滑函数卷积改图像,然后计算所得结果的拉普拉斯是一样的。所以在LoG公式中使用高斯函数的目的就是对图像进行平滑处理,使用Laplacian算子的目的是提供一幅用零交叉确定边缘位置的图像;图像的平滑处理减少了噪声的影响并且它的主要作用还是抵消由Laplacian算子的二阶导数引起的逐渐增加的噪声影响。
6.Canny算子
该算子功能比前面几种都要好,但是它实现起来较为麻烦,Canny算子是一个具有滤波,增强,检测的多阶段的优化算子,在进行处理前,Canny算子先利用高斯平滑滤波器来平滑图像以除去噪声,Canny分割算法采用一阶偏导的有限差分来计算梯度幅值和方向,在处理过程中,Canny算子还将经过一个非极大值抑制的过程,最后Canny算子还采用两个阈值来连接边缘。
Canny边缘检测算法
step1: 用高斯滤波器平滑图象;
step2: 用一阶偏导的有限差分来计算梯度的幅值和方向;
step3: 对梯度幅值进行非极大值抑制
step4: 用双阈值算法检测和连接边缘
详解:http://www.cnblogs.com/cfantaisie/archive/2011/06/05/2073168.html
(1)图象边缘检测必须满足两个条件:一能有效地抑制噪声;二必须尽量精确确定边缘的位置。
(2)根据对信噪比与定位乘积进行测度,得到最优化逼近算子。这就是Canny边缘检测算子。
(3)类似与Marr(LoG)边缘检测方法,也属于先平滑后求导数的方法。
图像处理常用边缘检测算子总结相关推荐
- 图像处理常用边缘检测算子
图像处理常用边缘检测算子 不同图像灰度不同,边界处一般会有明显的边缘,利用此特征可以分割图像.需要说明的是:边缘和物体间的边界并不等同,边缘指的是图像中像素的值有突变的地方,而物体间的边界指的是现实场 ...
- 2020-10-22图像处理常用边缘检测算子总结
不同图像灰度不同,边界处一般会有明显的边缘,利用此特征可以分割图像.需要说明的是:边缘和物体间的边界并不等同,边缘指的是图像中像素的值有突变的地方,而物体间的边界指的是现实场景中的存在于物体之间的边界 ...
- c#用canny算子做边缘提取_【图像处理】边缘检测
边缘检测 sobel sobel是最常见也是最常用的边缘检测算子.一般来说,当我们想要获取图像的边缘时,首先想到的就是像素值发生突变的位置,而如何用数学表达来刻画"突变",一个很好 ...
- 【图像处理】 常用边缘检测算法对比分析
文章目录一瞥 边缘的定义 边缘检测的基本方法 图像滤波 图像增强 图像检测 图像定位 常见边缘检测算子分析 1) 差分边缘检测 2)Reborts算子 3)Sobel算子 4)Prewitt 算子 非 ...
- python 视觉技术_python+opencv实现机器视觉基础技术(边缘提取,图像滤波,边缘检测算子,投影,车牌字符分割)...
机器视觉是人工智能正在快速发展的一个分支.简单说来,机器视觉就是用机器代替人眼来做测量和判断.它是一项综合技术,包括图像处理.机械工程技术.控制.电光源照明.光学成像.传感器.模拟与数字视频技术.计算 ...
- opencv 不同边缘检测算子效果比较
# -*- coding: utf-8 -*- import cv2 as cv import numpy as np import matplotlib.pyplot as plt#读取图像 img ...
- 几种边缘检测算子的比较Roberts,Sobel,Prewitt,LOG,Canny
from:https://blog.csdn.net/gdut2015go/article/details/46779251 边缘检测是图像处理和计算机视觉中的基本问题,边缘检测的目的是标识数字图像中 ...
- 图像处理(7) : 边缘检测
边缘检测是图形图像处理.计算机视觉和机器视觉中的一个基本工具,通常用于特征提取和特征检测,旨在检测一张数字图像中有明显变化的边缘或者不连续的区域,在一维空间中,类似的操作被称作步长检测(step de ...
- 边缘检测算子之间的优劣
图像边缘 图像边缘是图像最基本的特征,边缘即图像局部不连续性(突变处),例如灰度级的突变.颜色的突变.纹理结构的突变等.边缘检测的方法绝大部分可以分为两类: 基于查找一类:通过寻找图像一阶导数中的最大 ...
最新文章
- 源码安装tensorflow
- ystep jQuery流程、步骤插件
- kafka安装、配置、启动、常用命令及shell启动脚本编写
- C#中一些日期的相关操作
- SpringBoot 2.0 Actuator监控系统
- neatdm路径_扫地机还能这么玩 延时摄影看路径规划
- another app is currently holding the yum lock;waiting for it to exit...
- 计算机网络学习笔记(2. 什么是网络协议)
- 删除百度贴吧上的内容
- 普通话测试-短文60篇文章,附带拼音(11-20篇)
- Go语言之父谈Go:大道至简
- 用dango框架搭建博客网站
- 树莓派学习记录1-树莓派系统烧录与无屏幕网线连接开机
- cad2016中选择全图字体怎么操作_cad教程分享CAD中如何删除顽固图层?
- Oracle Database 11G 完全备份[Whole Database Backups]概述
- [MEM]综合能力考试-数学知识点
- checkpatch海思SDK代码遇见的常见错误《二》
- python和C++
- c语言u8代表,请问头文件里的 u8,u16 vu 等符号是什么意思?
- 为什么当初很多人不看好的阿里云做起来了?
热门文章
- boost::mp11::mp_map_keys相关用法的测试程序
- boost::math模块使用二项分布复制 NAG 库调用的测试程序
- boost::lambda::is_instance_of_1用法的测试程序
- boost::geometry::concatenate_iterator用法的测试程序
- GDCM:gdcm::EncapsulatedDocument的测试程序
- Boost:求容器的最小元素和最大元素
- ITK:创建Image
- VTK:Utilities之DetermineActorType
- QT绘制饼状图,自定义切片。
- QT的QGroupBox类的使用