当前位置: 首页 > article >正文

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

原理

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

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

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

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

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

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

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

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

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

本文的边界提取

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

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

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

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

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

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

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)在边缘点集合中剔除某些边界点或填补边界间断点,并将这些边缘连接成完整的线。


http://www.kler.cn/a/234148.html

相关文章:

  • 网络技术-网桥模式
  • 力扣-Mysql-3308- 寻找表现最佳的司机(中等)
  • 一文窥见神经网络
  • 2个word内容合并
  • SpringBoot实战(三十一)集成iText5,实现RSA签署PDF
  • Java 责任链模式 减少 if else 实战案例
  • C# Socket通信从入门到精通(21)——Tcp客户端判断与服务器断开连接的三种方法以及C#代码实现
  • 1.5 Binance_interface API 币本位合约行情
  • Java基础知识总结(持续更新中)
  • 第一篇【传奇开心果微博文系列】Python微项目技术点案例示例:pillow库实现毛笔字春联
  • 华为数通方向HCIP-DataCom H12-821题库(单选题:461-480)
  • 【RabbitMQ(二)】:Exchange 详解 | Message Convert 消息转换器
  • (注解配置AOP)学习Spring的第十七天
  • 每日五道java面试题之java基础篇(五)
  • 43.1k star, 免费开源的 markdown 编辑器
  • grafana+prometheus+hiveserver2(jmx_exporter+metrics)
  • [AIGC] Spring Gateway:一个简单 yet powerful API 网关
  • 每日五道java面试题之java基础篇(二)
  • Go内存优化与垃圾收集
  • 安全之护网(HVV)、红蓝对抗
  • 蓝桥杯官网练习题(Excel地址)
  • 【Chrono Engine学习总结】3-地型terrain
  • Linux基础-配置网络
  • 数据分析基础之《pandas(7)—高级处理2》
  • hook函数——useRef
  • 无人机应用场景和发展趋势,无人机技术的未来发展趋势分析