| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 【计算机视觉】图像分割与特征提取——基于Log、Canny的边缘检测 -> 正文阅读 |
|
[人工智能]【计算机视觉】图像分割与特征提取——基于Log、Canny的边缘检测 |
个人简介:?
前言:
目录 一:相关概念1.一阶导数二阶导数在图像边缘中的应用?
2.边缘检测基本步骤
3.好的边缘检测遵循的原则
4.二阶微分(差分)算子????????如果所求的一阶导数高于某一阈值,则确定该点为边缘点,这样做会导致检测的边缘点太多。?一种更好的方法就是求梯度局部最大值对应的点,并认定它们是边缘点,通过去除一阶导数中的非局部最大值,可以检测出更精确的边缘。?一阶导数的局部最大值对应着二阶导数的零交叉点。这样,通过找图像强度的二阶导数的零交叉点就能找到边缘点。 二:拉普拉斯算子1.等效式??? 2.拉普拉斯算子????
????3.拉普拉斯算子缺点?
三:高斯-拉普拉斯算子(Log)1.相关概念????????Marr和Hildreth将高斯滤波和拉普拉斯边缘检测结合在一起,首先用高斯函数先进行低通滤波,然后利用拉普拉斯算子进行高通滤波并提取零交叉点,形成LoG(Laplacian of Gaussian)算法,也称之为拉普拉斯高斯算法.? ?? 2.Log边缘检测(1)基本特征
(2) 代码实战对图像加入不同噪声之后使用Log算子进行边缘检测:
?? 图3.4-1 Log算子(Sigma = 2) ?? 图3.4-2 Log算子(Sigma = 3) ?? 图3.4-3 Log算子(加入高斯0噪声,Sigma=2) ?? 图3.4-4 Log算子(加入强度0.1高斯噪声,THRESH=0.01,Sigma=2) ?? 图3.4-5 Log算子(加入强度0.1高斯噪声,THRESH=0.012,Sigma=2) (3)结果分析????????Log算子我采用了matlab自带的函数进行实验,edge(I,'log',THRESH,SIGMA) 可以看到有两个参数,THRESH表示函数忽略所有强度不大于THRESH值的边缘,SIGMA作为LoG过滤器的标准差。 ????????LoG算子将高斯滤波和拉普拉斯边缘检测结合在一起,首先用高斯函数先进行低通滤波,然后利用拉普拉斯算子进行高通滤波并提取零交叉点。可以看到处理结果的图像边缘较平滑(见图3.4-1),是因为LoG算子不能检测边缘方向。而且在加入噪声之后,可以看到LoG算子对噪声十分敏感(见图3.4-3),不断调整参数,最终在参数THRESH=0.012,Sigma=2时得到较好的结果(见图3.4-5),但是还是损失了很多边缘信息。 四:Canny边缘检测1.相概念????????Canny边缘检测是一种非常流行的边缘检测算法,计算机视觉中用得最广的边缘检测器,是John Canny在1986年提出的(发表在PAMI)。 ????????理论模型:加性噪声干扰的阶梯边缘(Step-Edge) Canny展示了高斯函数的一阶导紧密逼近最优化信噪比和局部化的边缘算子? 2.检测步骤步骤1.?图像与高斯平滑滤波器卷积: 步2. 使用一阶有限差分计算偏导数阵列P与Q: 步骤3. ?计算梯度幅值与方向角: 步骤4. 非极大值抑制(NMS ) : ????去掉幅值局部变化非极大的点. ????* 将梯度角离散为圆周的四个扇区之一,以便用3×3的窗口作抑制运算 ? ?* 方向角离散化: ???? ? ?* 抑制,得到新幅值图: ?? 步骤5. 阈值化 取高低两个阈值作用于幅值图N[i,j],得到两个边缘图:高阈值和低阈值边缘图。连接高阈值边缘图,出现断点时,在低阈值边缘图中的8邻点域搜寻边缘点。 3.代码实战
4.结果分析??? 图3.5-1 Matlab自带canny函数检测结果 图3.5-2 Matlab自带canny函数检测加入高斯噪声图像结果? 图3.5-3 自编程实现canny算子检测结果 ?? 图3.5-4 自编程实现canny算子检测加入高斯噪声图像结果 ????????Canny算子能够有效地抑制噪声,且其根据信噪比与定位比乘积进行测度,得到最优化逼近算子,能较精确确定边缘的位置。类似于LoG边缘检测方法,Canny也属于先求平滑后求导数的方法。Canny边缘检测算法可以简化为四个步骤: 步骤1:用高斯滤波器平滑处理原图像; ????????使用平滑滤波的原因从根本上来说是边缘检测算子中的导数计算。导数计算对噪声十分敏感,如果不提前使用滤波器加以改善,则在导数计算后,噪声将会被放大,使得检测出来的虚假边缘变多,不利于边缘的提取。但是平滑滤波虽然能有效抑制噪声,但是会使得图像边缘模糊,增加了边缘检测的不确定性,但是噪声带来的影响更大,因此首先应考虑去除噪声。图像的边缘有方向和幅度两个属性,沿边缘方向像素变化平缓,垂直于边缘方向像素变化剧烈,边缘上的这种变化可以用微分算子检测出来,通常用一阶或二阶导数来检测边缘。在这里选用一阶导数来检测边缘,即求一阶导数最大值。设M(x,y)代表幅值,当其取得局部最大值时,其对应的梯度方向θ(x,y)反映了边缘的方向(边缘方向与梯度方向垂直)。得到全局梯度之后,还不能确定边缘,还需要保留局部梯度最大的点,且还要抑制非极大值,即将非局部最大值的像素点置为0。这就需要利用梯度的方向,与领域像素的梯度幅值进行比较,在程序中我采用的是3*3的窗口做抑制运算,对每个像素点与沿着梯度方向的两个八领域像素的梯度进行比较,最后选取梯度值最大的点。这样就基本排除了非边缘信息,仅仅保留了一些细的线条,即候选边缘。最后还需要采用双阈值法来检测和连接边缘,将高于高阈值的像素点保留,将低于低阈值的像素点排除,若高阈值图像边缘出现0值像素点,则判断该像素点低阈值图像8领域空间的像素是否存在高于高阈值的像素,如果存在则该像素被保留(像素值置为1),否则被排除,至此就实现了Canny边缘检测。 ????????从实验结果(见图3.5-3)来看,Canny算子检测出来的边缘信息更准确,显示出来的边缘线条较细。且在加入噪声之后,由于前面利用平滑滤波过滤了噪声,最后得到的边缘检测结果也还是较满意的(见图3.5-4),但是由于原图像有些边缘周围的像素值较小,且变化较平缓,例如屋顶区域,在进行平滑滤波时容易将边缘信息抹除,故最终检测结果屋顶部分的边缘便消失了。 五:思考总结(1)评价一下Roberts 算子、Prewitt 算子、Sobel 算子对于噪声条件下边界检测的性能。 ????????从上面的检测结果来看,Roberts算子采用的是2*2的模板,对噪声比较敏感,对有噪声的图像处理能力不强;而Prewitt算子采用的是3*3的模板,其抗噪能力要强一些,但是效果也不是很理想;对于Sobel算子,其在Prewitt算子升增加了权重的概念,具有平滑噪声的作用,因此其对有噪声图像的边缘检测能力要比另外两个算子强。 (2)为什么LoG梯度检测算子的处理结果不需要象Prewitt 等算子那样进行幅度组合? ????????因为LoG算子采用拉普拉斯算子计算二阶导数,且边缘检测判据是二阶导数零交叉点并对应一阶导数的较大峰值,还使用线性内插方法在子像素分辨率水平上估计边缘的位置。 (3)实验中所使用的四种算子所得到的边界有什么异同? ????????Roberts、Prewitt、Sobel算子得到的边缘信息较粗,定位都不是很准确,而LoG算子得到的边缘信息定位较准确,且得到的边缘线条较细。对于有噪声的图像,Roberts、Prewitt、LoG算子都对噪声比较敏感,处理能力一般,而Sobel算子能对噪声进行平滑,其对噪声图片的边缘检测要比另外三个好。 (4)比较边缘提取中LOG、Canny算子的边缘提取效果。 ????????相同尺度下的LOG算子总是能比Canny算子检测出更多的细节,Canny算子能对真正比较显著地边缘给出检测。LOG算子容易受尺度的影响,不同尺度下的边缘点要用不同尺度的LOG算子检测,Canny 算子受尺度的影响不太明显,不同尺度下,边缘点的位置都有偏差,但几乎相同;从对噪声的敏感程度来看,LOG边缘检测子是采用二阶导数过零点的检测方法,故对噪声更敏感一些,因此从抑制噪声方面来讲,Canny边缘检测子不容易受到噪声的干扰,而相同尺度下LOG算子却容易受到噪声的干扰,抑制噪声的能力要弱一些。LOG算子对噪声的抑制能力随着尺度的增加而增加,相同尺度下的Canny算子比LOG算子的抗噪声能力强,而LOG算子比Canny算子的边缘点准确;对于弱边缘,由于Canny边缘检测子采用两种不同的阈值分别检测强边缘和弱边缘,并且当弱边缘和强边缘相连时,才将弱边缘包含在输出图像中,故而Canny算子更能检测出真正的弱边缘,但是Canny边缘检测子检测出的边缘的位置会有一定范围的误差;对于假边缘,LOG边缘检测子相对比较容易受到噪声干扰,会检测出更多的细节,也容易检测出一些由于噪声引起的假边缘,但是LOG边缘检测子对边缘位置的检测还是很准确的。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 20:40:55- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |