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

相关推荐
ALISHENGYA3 分钟前
全国青少年信息学奥林匹克竞赛(信奥赛)备考实战之分支结构(实战项目二)
数据结构·c++·算法
guogaocai1235 分钟前
连续自成核退火热分级(SSA)技术表征共聚聚丙烯(PP)分子链结构
算法
咸鱼桨9 分钟前
《庐山派从入门到...》PWM板载蜂鸣器
人工智能·windows·python·k230·庐山派
强哥之神21 分钟前
Nexa AI发布OmniAudio-2.6B:一款快速的音频语言模型,专为边缘部署设计
人工智能·深度学习·机器学习·语言模型·自然语言处理·音视频·openai
yusaisai大鱼24 分钟前
tensorflow_probability与tensorflow版本依赖关系
人工智能·python·tensorflow
18号房客25 分钟前
一个简单的深度学习模型例程,使用Keras(基于TensorFlow)构建一个卷积神经网络(CNN)来分类MNIST手写数字数据集。
人工智能·深度学习·机器学习·生成对抗网络·语言模型·自然语言处理·tensorflow
Biomamba生信基地28 分钟前
R语言基础| 功效分析
开发语言·python·r语言·医药
DARLING Zero two♡29 分钟前
【优选算法】Pointer-Slice:双指针的算法切片(下)
java·数据结构·c++·算法·leetcode
神秘的土鸡32 分钟前
神经网络图像隐写术:用AI隐藏信息的艺术
人工智能·深度学习·神经网络
数据分析能量站33 分钟前
神经网络-LeNet
人工智能·深度学习·神经网络·机器学习