当前位置:网站首页>MATLAB实现的图像分割之边缘检测和连接
MATLAB实现的图像分割之边缘检测和连接
2022-07-28 17:46:00 【biyezuopinvip】
图像分割之边缘检测和连接
一、实现细节
本节分四个部分讲解实现细节,对应本次作业中:边缘检测的三个方法和边缘连接的方法
1.1 Sobel 基本边缘检测法
实现步骤

遇到的问题
关于阈值的选取需要人为的去调整, 过低的阈值难以去噪声点, 过高的阈值又使得边缘大量间断,最终选取阈值为 30%; 此外, 在阈值化的同时, 进行二值化是必要的, 方便后续的边缘连接的处理。
1.2 Marr-Hildreth 边缘检测器
实现步骤
用高斯低通滤波器平滑图像
计算上一步结果的拉普拉斯
寻找上述结果的零交叉
遇到的问题
关于零交叉的计算,原本按课件上的写法,要求上下、左右、两对角有符号相反差异大于阈值为零交叉,但是效果并不理想,边缘毛刺较多。后参考了网上一篇博客,具体链接参见报告末尾,改进了零交叉的算法:先将 3*3的区域通过 2×2的全 1 的滤波器卷积, 生成 2×2的区域,再判断区域内的最大和最小值是否符号相反且大于阈值。
1.3 Canny 边缘检测器

非最大抑制, 即寻找和梯度方向最接近的方向, 若当前像素不是方向上最大值则抑制滞后阈值,即用两个阈值把像素集合划分为 2 个部分连通性分析,即将低阈值集合进行去噪, 跟高阈值集合没连通的点都去掉, 然后合并两个集合
遇到的问题
非最大抑制按课件的写法是把非最大的像素置零, 从实际代码的效率考虑, 反过来操作, 因为图像是稀疏的, 故先整体置零,如果像素是最大的, 像素值就设置为 255
1.4 边缘连接方法
实现步骤
给定二值图像和起始点如果起始点像素为 0 则直接结束,否则把起始点加入 output 中对于起始点的 8 邻域, 如果附近存在没访问过的点,且点的像素值为 255,则加入到 output 当中以刚刚加入的点为新的起始点, 循环的按照第 3 步的方法去寻找。
当 8 邻域内没符合条件的点时, 停止循环。输出 output
遇到的问题
原本打算在判断局部相似性的时候使用梯度, 但效果不理想, 于是简单处理, 即直接找 8 邻域内像素值不为 0 的点即可, 当然寻找的时候需要避免重复, 本质思想就是图遍历;
考虑边界情况要特殊处理, 例如整个图像的边和角上的点不能直接用 8 连通性, 否则数组越界;
需要注意坐标参数传递的顺序, imtool 函数的参数顺序是先列(x)再行(y)。而我们实现的 my_edgelinking 参数传递顺序是先行(row)再列(col)。
起始点在加入 output 后, 不将其标记为已到达, 目的是方便将来再次到达使得边界成为闭合曲线
边缘检测的方法采用效果相对最好的 Canny 检测器, 在此基础上继续边界跟踪
二、结果
本节分三个部分,分别介绍实验的结构设置、实验效果、结论分析
2.1 实验设置
code 文件内对应框架代码 edge_test.m、my_edge.m、my_edgelinking.m。
其中 my_edge 函数的参数 method 为 1、2、3 时对应 sobel、Marr-Hildreth、Canny 三种方法
asset\image 文件夹内对应图片文件
直接运行代码即可查看原图、各种边缘检测的效果和边缘连接的效果,要替换输入的图片即把代码中的 imread 函数的参数修改即可。
doc 文件夹里即是正在阅读的报告
2.2 实验结果
2.2.1 rubberband_cap.png






2.2.2 ayu.jpg





2.2.3 giraffe.jpg





2.2.4 leaf.jpg





2.2.5 noise.jpg





边栏推荐
猜你喜欢

可转债概念表 x Notion 给你方便快捷的体验!

Image processing web application development tutorial

Rust 入门指南(rustup, cargo)

Asp net MVC web development tutorial

Photoshop web design practical tutorial

宝塔面板搭建小说CMS管理系统源码实测 - ThinkPHP6.0

Method of win7 system anti ARP attack

Iclr21 (classification) - future classic "vit" an image is worth 16x16 words (including code analysis)

使用百度EasyDL实现明厨亮灶厨师帽识别

Rust Getting Started Guide (modules and engineering structures)
随机推荐
SaltStack之return与job管理
How to use Qianqian listening sound effect plug-in (fierce Classic)
When CNN meets transformer cmt:revolutionary neural networks meet vision transformers
With the help of panel industry innovation, will FPGA become the best choice for TCON?
[solved] ac86u ml revision firmware virtual memory creation failed, prompting that the USB disk reading and writing speed does not meet the requirements
Ardupilot software in the loop simulation and online debugging
以数字化转型为契机,3C企业如何通过SRM供应商云协同平台实现高效协同?
Cell综述:人类微生物组研究中的单细胞方法
BeanFactory not initialized or already closed - call ‘refresh‘ before accessing beans via the Applic
彻底理解位运算——左移、右移
SQL audit tool self introduction owls
Getting started with saltstack
Rust Getting Started Guide (modules and engineering structures)
JS 批量添加事件监听onclick this 事件委托 target currentTarget onmouseenter onmouseover
【笔记】《启示录》:产品经理的实践经验与反省清单
Rust 入门指南(crate 管理)
宝塔面板搭建小说CMS管理系统源码实测 - ThinkPHP6.0
Update of objects in ES6
Rust Getting Started Guide (rustup, cargo)
JS modify table font and table border style