LOG边缘检测--Marr-Hildreth边缘检测算法
边缘检测的改进:
一、边缘检测方法是以使用较小的算则为基础的,
Marr和Hildreth证明了:(1)灰度变化与图像尺寸无关,因此他们的检测要求使用不同尺寸的算子;
(2)灰度的突然变化会在一阶导数中引起波峰或波谷,或在二阶导数中等效地引起零交叉。
根据这些建议,边缘检测算子应有两个显著特点:
(1)能计算图像中每一点处的一阶导数或二阶导数的数字近似的微分算子;
(2)能被“调整”以便在任何期望的尺寸上起作用。
因此,大的算子可用与检测模糊边缘,小的算子可用于检测锐度集中得到精细细节。
二、Marr和Hildreth论证过,满足这些条件最令人满意得到算子是滤波器。,是拉普拉斯算子,
而G是标准差为(有时也称为空间常数)的二维高斯函数:
.
经过计算
,
称为高斯拉普拉斯(LoG).
LoG的零交叉出现在处,它定义了一个中心位于原点,
半径为的圆。
LoG函数有时也称为墨西哥草帽算子。一个正的中心项由紧邻的负区域包围着,中心项的值以距原点的距离为函数而增大,
而外层区域的值零。系数之和必须为零,从而模板的响应在恒定灰度区域为零。
三、形状为5*5模板的近似,实际中将使用该模板的负值:
任意尺寸的模板可以通过式子取样,并标定系数以使系数之和为零来生成。
生成LoG滤波器的一种更有效的方法是以希望的n*n尺寸对式取样,然后将结果阵列与一个拉普拉斯模板进行卷积。
因为用一个系数之和为零的模板对图像阵列卷积产生一个元素之和也为零的结果,故这种方法自动满足LoG滤波器系数之和为零的要求。
四、选择算子的基础:
(1)算子的高斯部分会模糊图像,从而在尺寸上将结构的灰度(包括噪声)降低到远小于的程度。
和均值滤波器平滑相比,高斯函数在空间和频率两个域平滑图像,因而在原图像中引入不存在的人为干扰(如振铃)的可能性小。
(2)滤波器的二阶部分。
尽管一阶导数用于检测灰度突变,但它们是有方向的算子。另一方面,拉普拉斯有各项同性(旋转不变性)。
对任何模板方向的灰度变化有相等的响应,从而避免了使用多 个模板去计算图像中任何点处的最强响应。
五、Marr-Hildreth算法由LOG滤波器与一幅输入图像f(x,y)卷积组成,即:
然后寻找g(x,y)的零交叉来确定f(x,y)中边缘的位置。
因为这些都是线性操作,故上市也可改下为:
它指出,我们可以先使用一个高斯滤波器平滑图像,然后计算该结果的拉普拉斯。这两个公式给出了相同的结果。
六、总结
Marr-Hildreth边缘检测算法如下:
1.用一个对 取样的n*n的高斯低通滤波器对输入图像滤波。
2.计算由第一步得到的图像的拉普拉斯,如模板
3.找到步骤2所得图像的零交叉。
为确定高斯滤波器的大小,仍采用位于二维高斯表面下其均值在3之间的99.7%。
这样,一个大小为n*n的LoG离散滤波器,其n值应是大于等于6的最小奇整数。
n小于该值的滤波器模板会“截断”LoG函数,截断的程度与模板的大小成反比;
而使用较大的模板对结果的影响不大。
零交叉点的确定:
以P为中心的一个3*3领域,p点处的零交叉意味着至少有两个相对的领域像素的符号不同。
有四种要测试的情况:左/右、上/下,和两个对角。如果g(x,y)的值与一个阈值比较(一种通用的方法),
那么不仅相对领域的符号不同,数值差的绝对值不能超过这个阈值,这时p称为一个零交叉像素。
零交叉是Marr-Hiltreth边缘检测方法的关键特征。
此外,Huertas and Medioni提出采用亚像素精度来寻找零交叉的方法。
设置阈值,可检测出大多数的主要边缘,并且滤掉一些“无关”特征,使用零交叉检测边缘可得到一个像素宽的边缘。
这一特性简化了诸如边缘连接的后续阶段的处理。
考虑到灰度变化取决于数值范围的试试,有时使用各种值来对一幅图像进行滤波。然后,所得零交叉边缘图与仅为全部图形保留的公共边缘相结合。
这种方法可得到很有用的信息,但由于其复杂性,实践中多被用于使用单一滤波器选择合适的值的设计工具。
使用高斯差分(DoG)来近似LoG是可能的:
视觉系统中,某些“通道”就方向和频率而论,是有选择性的。且可以使用:
以1.75:1的标准差比率来建模。
使用1.6:1的比率不仅可以保持这些观察的基本特性,且可以对LoG提供一个更接近的“工程”近似。
为在LoG和DoG之间进行有意义的比较,对于LOG,值必须按照如下公式选择,以便LoG和DoG具有相同的零交叉;
当使用这个值时,尽管LoG和DoG的零交叉相同,但它们的幅度大小会不同。可通过标定使得他们兼容,以便他们在原点处有相同的值。
LoG和DoG滤波操作均可直接使用一维卷积代替二维卷积来实现,对于一幅大学为M*N的图像和一个大小为n*n的滤波器,这样做可将每次卷积所需的乘法和加法次数,
从二维卷积的n*nMN成正比,减少到一维卷积的n*MN成正比。
#include <iostream>
#include "cv.h"
#include "highgui.h"
#include "opencv2/imgproc/imgproc.hpp"using namespace std;
using namespace cv;#ifdef _DEBUG
#pragma comment(lib,"opencv_core2413d.lib")
#pragma comment(lib,"opencv_imgproc2413d.lib")
#pragma comment(lib,"opencv_highgui2413d.lib")#else
#pragma comment(lib,"opencv_core2413.lib")
#pragma comment(lib,"opencv_imgproc2413.lib")
#pragma comment(lib,"opencv_highgui2413.lib")#endifint main(int argc, char *argv[])
{// Read imageMat src = imread("Fig0222(a)(face).tif", CV_LOAD_IMAGE_COLOR);if (!src.data) {cout << "Error: read image" << endl;return -1;}cvtColor(src, src, CV_RGB2GRAY);namedWindow("Origin", CV_WINDOW_AUTOSIZE);imshow("Origin", src);Mat dst,dst1,dst2;// CV_EXPORTS_W void Laplacian( InputArray src, OutputArray dst, int ddepth,// int ksize=1, double scale=1, double delta=0,// int borderType=BORDER_DEFAULT );Laplacian(src, dst1, src.depth(), 3, 1, 0, BORDER_DEFAULT);GaussianBlur(src, src, Size(3, 3), 1.5, 1.5);Laplacian(src, dst, src.depth(), 3, 1, 0, BORDER_DEFAULT);GaussianBlur(dst, dst2, Size(3, 3), 1.5, 1.5);namedWindow("Laplacian", CV_WINDOW_AUTOSIZE);imshow("GaussianLalacian", dst);imshow("Laplacian", dst1);imshow("LaplacianGaussian", dst2);waitKey();return 0;
}
效果图
参考文献:《数字图像处理》(第三版)冈萨雷斯
LOG边缘检测--Marr-Hildreth边缘检测算法相关推荐
- 【OpenCV图像处理入门学习教程四】基于LoG算子的图像边缘检测
OpenCV图像处理入门学习教程系列,上一篇第三篇:基于SIFT特征和SURF特征的微旋转图像拼接与融合生成全景图像的比较 LoG边缘检测算子 LoG边缘检测算子是David Courtnay Mar ...
- 【OpenCv】Marr算子边缘检测
Marr算子: Laplacian of a Gaussian(LOG) Marr算子是在Laplacian算子的基础上实现的,它得益于对人的视觉机理的研究,有一定的生物学和生理学意义. 由于Lapl ...
- NNDL 实验六 卷积神经网络(1)卷积 边缘检测之传统边缘检测算子和基于pytorch的Canny边缘检测
文章目录 卷积神经网络(Convolutional Neural Network,CNN) 5.1 卷积 5.1.1 二维卷积运算 5.1.2 二维卷积算子 5.1.3 二维卷积的参数量和计算量 5. ...
- caany边缘检测matlab,自适应canny算法研究及其在图像边缘检测中的应用.pdf
自适应canny算法研究及其在图像边缘检测中的应用.pdf 还剩 51页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环保! 内容 ...
- 算法应用三:【图像分割】+【边缘检测】canny边缘检测--冈萨雷斯--《数字图像处理》
canny主要工作:推导了最优边缘检测算子. 图像的边缘检测是:图像最基本特征,边缘点指的是图像中周围像素灰度有阶跃变化或屋顶变化的那些像素点,即:灰度值导数极大的地方. 边缘检测的目的是 ...
- C语言数字图像处理----3.2 图像边缘检测之Canny边缘检测算法
本篇将介绍图像边缘检测中的Canny边缘检测,这是传统边缘检测学习中的必学内容,也是图像算法面试中的常见问题,本文将教会初学者如何在理解算法的基础之上,通过C语言来实现Canny边缘检测算法,从而做到 ...
- Edge Detector ----------Marr Hildreth 算法
先说算法过程 1. 用Gaussian Filter平滑图像 2. 求Laplacian 二阶导 Laplacian参考http://blog.csdn.net/traumland ...
- 【计算机视觉】图像分割与特征提取——基于Log、Canny的边缘检测
个人简介: >
- 基于matlab的人脸五官边缘检测方法,人脸边缘检测方法研究与仿真
人脸表情是人类情感的主载体之一,它含有丰富的人体行为信息.通过脸部表情能够表达人微妙的情绪反应以及对应的心理状态[1],人脸表情识别技术随着人们对表情信息的日益重视而受到关注,现已成为人们研究的热点. ...
- 拉普拉斯Laplace算子和高斯二阶导核(LOG算子)和SIFT算法
前置知识 边缘检测:图像边缘的强度(边缘线的清晰度)由图像的梯度的强度决定,因为梯度值越强,说明x轴.y轴的像素点变化越快,所以该点处越可能是边缘.边缘和梯度方向是垂直的.举个例子,下图就是用的y方向 ...
最新文章
- linux内核 -内存管理模块概图
- 比尔盖茨是这样审查项目的 1
- redis6持久化主从复制
- Java提高学习之Object(3)
- Python配置-virtualenv和conda的区别
- mysql 字符串 截取字母_MySQL字符串函数:字符串截取
- 工作与生活 -- 平衡是必须的
- Maven - 基础入门与安装配置
- 学习MiniGui之多线程机制【转】
- snmp error on SnmpMgrRequest 40
- Socket选项系列之TCP_NODELAY
- 手机要求安装NETCFv35.Messages.zh-CHS.cab,怎么办
- C#RSACryptoServiceProvider加密
- iOS之Swift实现二维码扫描
- 线性代数之从线性方程组看线性组合
- 解决JDBC中Parameter number X is not an OUT parameter
- 【Matlab】系统的响应分析
- 携程手机端网页设计效果图
- svn propset svn:ignore
- 车易加加油优惠卡|油价上涨“45元/吨”,由跌变涨
热门文章
- 【Java】流(Stream)快速入门
- 软件开发中的哲学思想
- 计算机机房配置发电设备,选择康明斯计算机机房用发电机组匹配功率的方法
- 妆罢低声问夫婿, 画眉深浅入时无——我的年度Markdown笔记软件VNote
- 智芯传感微差压传感器拓展燃气壁挂炉风压开关应用领域
- oracle数据库添加索引
- indesign如何画弧线_indesign如何画弧线_动漫人物衣服怎么画?教你各种动漫服饰的画法...
- 新钛云服A轮融资数千万元!获资本和客户双重青睐!
- MATLAB 之特征值与特征向量、jordan标准形
- pr中的剪辑视频,音频第一讲