赞
踩
资源下载地址:https://download.csdn.net/download/sheziqiong/86781652
资源下载地址:https://download.csdn.net/download/sheziqiong/86781652
本节分四个部分讲解实现细节,对应本次作业中:边缘检测的三个方法和边缘连接的方法
关于阈值的选取需要人为的去调整, 过低的阈值难以去噪声点, 过高的阈值又使得边缘大量间断,最终选取阈值为 30%; 此外, 在阈值化的同时, 进行二值化是必要的, 方便后续的边缘连接的处理。
用高斯低通滤波器平滑图像
计算上一步结果的拉普拉斯
寻找上述结果的零交叉
关于零交叉的计算,原本按课件上的写法,要求上下、左右、两对角有符号相反差异大于阈值为零交叉,但是效果并不理想,边缘毛刺较多。后参考了网上一篇博客,具体链接参见报告末尾,改进了零交叉的算法:先将 3*3的区域通过 2×2的全 1 的滤波器卷积, 生成 2×2的区域,再判断区域内的最大和最小值是否符号相反且大于阈值。
非最大抑制, 即寻找和梯度方向最接近的方向, 若当前像素不是方向上最大值则抑制滞后阈值,即用两个阈值把像素集合划分为 2 个部分连通性分析,即将低阈值集合进行去噪, 跟高阈值集合没连通的点都去掉, 然后合并两个集合
非最大抑制按课件的写法是把非最大的像素置零, 从实际代码的效率考虑, 反过来操作, 因为图像是稀疏的, 故先整体置零,如果像素是最大的, 像素值就设置为 255
给定二值图像和起始点如果起始点像素为 0 则直接结束,否则把起始点加入 output 中对于起始点的 8 邻域, 如果附近存在没访问过的点,且点的像素值为 255,则加入到 output 当中以刚刚加入的点为新的起始点, 循环的按照第 3 步的方法去寻找。
当 8 邻域内没符合条件的点时, 停止循环。输出 output
原本打算在判断局部相似性的时候使用梯度, 但效果不理想, 于是简单处理, 即直接找 8 邻域内像素值不为 0 的点即可, 当然寻找的时候需要避免重复, 本质思想就是图遍历;
考虑边界情况要特殊处理, 例如整个图像的边和角上的点不能直接用 8 连通性, 否则数组越界;
需要注意坐标参数传递的顺序, imtool 函数的参数顺序是先列(x)再行(y)。而我们实现的 my_edgelinking 参数传递顺序是先行(row)再列(col)。
起始点在加入 output 后, 不将其标记为已到达, 目的是方便将来再次到达使得边界成为闭合曲线
边缘检测的方法采用效果相对最好的 Canny 检测器, 在此基础上继续边界跟踪
本节分三个部分,分别介绍实验的结构设置、实验效果、结论分析
code 文件内对应框架代码 edge_test.m、my_edge.m、my_edgelinking.m。
其中 my_edge 函数的参数 method 为 1、2、3 时对应 sobel、Marr-Hildreth、Canny 三种方法
asset\image 文件夹内对应图片文件
直接运行代码即可查看原图、各种边缘检测的效果和边缘连接的效果,要替换输入的图片即把代码中的 imread 函数的参数修改即可。
doc 文件夹里即是正在阅读的报告
资源下载地址:https://download.csdn.net/download/sheziqiong/86781652
资源下载地址:https://download.csdn.net/download/sheziqiong/86781652
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。