形态学算法之边界提取的简单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)在边缘点集合中剔除某些边界点或填补边界间断点,并将这些边缘连接成完整的线。

相关推荐
盼海5 分钟前
排序算法(四)--快速排序
数据结构·算法·排序算法
LZXCyrus12 分钟前
【杂记】vLLM如何指定GPU单卡/多卡离线推理
人工智能·经验分享·python·深度学习·语言模型·llm·vllm
Enougme15 分钟前
Appium常用的使用方法(一)
python·appium
一直学习永不止步21 分钟前
LeetCode题练习与总结:最长回文串--409
java·数据结构·算法·leetcode·字符串·贪心·哈希表
懷淰メ21 分钟前
PyQt飞机大战游戏(附下载地址)
开发语言·python·qt·游戏·pyqt·游戏开发·pyqt5
我感觉。30 分钟前
【机器学习chp4】特征工程
人工智能·机器学习·主成分分析·特征工程
hummhumm35 分钟前
第 22 章 - Go语言 测试与基准测试
java·大数据·开发语言·前端·python·golang·log4j
YRr YRr39 分钟前
深度学习神经网络中的优化器的使用
人工智能·深度学习·神经网络
DieYoung_Alive39 分钟前
一篇文章了解机器学习(下)
人工智能·机器学习
夏沫的梦40 分钟前
生成式AI对产业的影响与冲击
人工智能·aigc