形态学算法之边界提取的简单python实现——图像处理

原理

图像处理中的边界提取是一项基本而重要的任务,主要用于识别和提取图像中物体的轮廓或边界。

具体流程

1.边缘检测

边界提取的第一步通常是边缘检测。边缘是图像亮度变化显著的地方,是物体与背景或不同物体间的分界线。边缘检测算法通过识别图像中的亮度梯度来查找边缘。常用的边缘检测算子包括Sobel、Prewitt、Roberts和Canny等。

Sobel、Prewitt、Roberts算子:这些算子通过计算图像中每个像素点的梯度幅值来检测边缘。它们通过水平和垂直方向的滤波器来估计梯度。

Canny边缘检测器:Canny算法是一种更为复杂的边缘检测方法,目的是尽可能准确地捕捉到图像中的边缘,并尽量减少误检和漏检。Canny检测器先使用高斯滤波器平滑图像,以减少噪声,然后计算图像中每一点的梯度幅度和方向,接着应用非极大值抑制(NMS)来细化边缘,最后使用双阈值法和边缘连接技术检测和连接边缘。

2.边界提取

在检测到边缘之后,下一步是从边缘信息中提取完整的边界。这通常涉及到边缘连接和边界跟踪算法,以形成连续的边界线。

3.边缘连接:这个步骤旨在将检测到的边缘片段连接成完整的边界线。可以通过查找边缘片段之间的空间关系来实现,如基于距离和方向的相似性。

4.边界跟踪:一旦开始点被确定,边界跟踪算法就沿着边缘移动,直到返回到起点。这种方法通常用于提取闭合边界。

5.后处理

在边界提取过程中可能会存在噪声和不规则的边缘,因此后处理步骤是必需的。这可能包括去除小的断裂、平滑边界线以及填充边界内的孔洞等。

边界提取不仅在图像分析和机器视觉中扮演着重要角色,也是计算机图形学、医学成像、监控、车辆导航等领域的基础技术之一。通过边界提取,可以进一步进行物体识别、场景理解和图像分割等高级处理。

本文的边界提取

边界提取通过以下步骤实现:

腐蚀操作:原图像通过腐蚀操作,去除了一些边缘像素,使物体缩小。这一步减少了物体的尺寸,主要影响物体的边缘部分。

原图像与腐蚀后图像的差分:通过将原图像与腐蚀后的图像相减,我们可以得到物体的边界。因为腐蚀操作主要移除了物体边缘的一层像素,所以原图与腐蚀后图像的差异主要在于物体的边缘。这个差分操作突出了物体的边缘,因为这些区域在原图中存在而在腐蚀后的图像中被移除。

这种方法的优点是简单且直观,适用于具有较为明显边界的图像。通过调整结构元素的大小和形状,可以对边界提取的细节级别进行控制。这种边界提取技术广泛应用于图像分析、特征提取、物体识别等领域。

数学形态学的腐蚀操作

数学形态学是图像处理领域的一个基本理论,主要用于提取图像的结构信息和形状分析。腐蚀(Erosion)是数学形态学中的一种基本操作,它可以减小图像中物体的大小,去除小的噪声点,断开物体之间的狭窄连接,和消除细小 protrusions。腐蚀操作的效果类似于"侵蚀"图像中的前景物体,使边界向内收缩。

腐蚀操作的原理

腐蚀操作使用一个称为结构元素(或核)的小窗口在输入图像上滑动。对于每个像素,以该像素为中心放置结构元素,如果结构元素内的所有像素都是图像的一部分,则保留该中心像素,否则将其移除(设为背景)。这个过程使得只有当结构元素完全位于图像前景部分时,中心像素才被保留。

python实现下图

代码实现

python 复制代码
import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('Fig0914.tif')

kernel = np.ones((3, 3), dtype=np.uint8)
img1 = cv2.erode(img, kernel)
img2 = img - img1

plt.subplot(1, 2, 1)
plt.imshow(img, cmap='gray')
plt.axis('off')
plt.title('original')

plt.subplot(1, 2, 2)
plt.imshow(img2, cmap='gray')
plt.axis('off')
plt.title('border')


plt.show()

结果展示

总结

边缘是图像的最重要的特征,。边缘是指周围像素灰度有阶跃变化或屋顶变化的那些像素的集合。

边缘提取,指数字图像处理中,对于图片轮廓的一个处理。对于边界处,灰度值变化比较剧烈的地方,就定义为边缘。也就是拐点,拐点是指函数发生凹凸性变化的点。二阶导数为零的地方。并不是一阶导数,因为一阶导数为零,表示是极值点。

边缘提取:边缘检测的基本思想首先是利用边缘增强算子,突出图像中的局部边缘,然后定义象素的"边缘强度",通过设置阈值的方法提取边缘点集。由于噪声和模糊的存在,监测到的边界可能会变宽或在某点处发生间断。因此,边界检测包括两个基本内容: (1)用边缘算子提取出反映灰度变化的边缘点集。 (2)在边缘点集合中剔除某些边界点或填补边界间断点,并将这些边缘连接成完整的线。

相关推荐
KKKlucifer6 分钟前
拨开接口黑盒迷雾:运营商第三方合作接口安全审计与准入管控落地实践
网络·人工智能·安全
WangYan20227 分钟前
基于XGBoost与AI的生态—地学多源数据建模:植被与土地利用识别、土壤碳氮空间预测、生物多样性驱动机制、土壤微生物功能预测、生态退化与风险识别
python·机器学习·xgboost
梦梦代码精12 分钟前
连锁品牌数字化:从门店扩张到用户资产运营的技术底座
大数据·人工智能·低代码·docker·开源·代码规范
咕噜咕噜啦啦13 分钟前
vLLM框架
人工智能·qwen·vllm
不会代码的小猴32 分钟前
21. 泛型编程上
开发语言·c++·笔记·算法
启雀AI43 分钟前
AI 驱动的视频课程自动摘要与知识点提取:ASR + LLM 流水线工程实践
人工智能·阿里云·华为云·音视频·培训saas平台
Mac的实验室44 分钟前
2026年8月最新实操:谷歌Gmail邮箱手机号注册扫码发短信提示“无法验证”怎么办?(附100%成功绕过指南)
人工智能
MindUp1 小时前
AI辅助PPT生成工具的内容组织能力实测:8款产品的文档解析与排版效果对比
人工智能
寒草1 小时前
【寒草呈献】当巴菲特走进 AI 投研助手
人工智能·架构