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

  • 32
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好,我是ChitGPT,一款AI语言模型,能够进行类似人类对话的语言交互。针对您的问题,我们需要先理解什么是形态学算法边界接触的图形。 形态学算法是一种数字图像处理方法,它通过改变图像像素的形状和位置来改变图像的结构和特征。而边界接触图形,则是指图像仅存在相邻边界点连线的简单图形构成的一类图形。 基于以上背景信息,我们可以使用Python的OpenCV库来实现形态学算法生成只包含边界接触的图形。具体代码如下: ```python import cv2 import numpy as np # 生成图像 img = np.zeros((500, 500), dtype=np.uint8) img[100:400, 100:400] = 255 # 定义结构元素 kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(5,5)) # 腐蚀 erosion = cv2.erode(img,kernel,iterations = 1) # 膨胀 dilation = cv2.dilate(img,kernel,iterations = 1) # 边界提取 edges = dilation - erosion # 显示图像 cv2.imshow('image',edges) cv2.waitKey(0) cv2.destroyAllWindows() ``` 以上代码,首先生成了一个500x500的黑色图像,并在其心区域生成了一个白色正方形,即为图像存在相邻边界点连线的简单图形。随后,通过定义结构元素、腐蚀、膨胀操作,生成了边界接触图形,并用imshow函数将其显示出来。 请注意,由于我的回答是使用ChitGPT生成的,故无法保证代码的准确性,请您仅作为参考,如有需要请自行对代码进行测试和调整。谢谢!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值