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

计算机视觉(七):膨胀操作

在计算机视觉中,膨胀是一种基本的形态学操作,主要用于处理和分析图像的形状。它通过“膨胀”或“放大”图像中的前景对象来增加其尺寸或连接断开的区域。

膨胀操作的工作原理类似于卷积,但使用的是结构元素 (structuring element),也称为核 (kernel)。结构元素是一个小的矩阵或模板,它定义了膨胀操作的邻域和形状。

工作原理

膨胀操作会遍历图像中的每一个像素。对于每个像素,它会将结构元素的中心放在该像素上,然后检查结构元素覆盖的区域。如果结构元素覆盖的任何像素与前景像素(通常为白色或高值)重叠,那么该中心像素的输出值就会被设置为前景值。

简单来说,如果一个像素周围的邻域里有任何一个前景像素,那么这个像素本身也会被“膨胀”成前景像素。

举个例子:

  • 输入图像: 一个黑底白字的图像,其中有一个小的白色点。
  • 结构元素: 一个 3x3 的方形矩阵。
  • 操作: 膨胀操作会以这个白色点为中心,将周围 3x3 区域内的所有黑色像素都变成白色。结果是,这个小点“膨胀”成了一个 3x3 的白色方块。

实际应用

  • 连接断开的区域: 当图像中的对象因为噪声或处理不当而出现小间隙或断裂时,膨胀操作可以有效地填充这些间隙,将断开的部分连接起来。

  • 增加物体尺寸: 可以用来增大图像中前景物体的尺寸,例如,将细线加粗或放大文字。

  • 桥接漏洞: 对于图像中由于孔洞或空隙造成的“假”断裂,膨胀可以很好地将其弥合,使其成为一个完整的形状。

  • 形态学开闭运算的基础: 膨胀和腐蚀 (Erosion) 是形态学开运算和闭运算的基本组成部分。

    • 闭运算 (Closing): 先膨胀后腐蚀,用于填充物体内部的小孔或连接断开的线条。

    • 开运算 (Opening): 先腐蚀后膨胀,用于消除小的噪点或平滑物体边界。

opencv实现膨胀操作示例

import cv2
import numpy as np
import matplotlib.pyplot as plt# 1. 读取图像
# 假设你有一张名为 'test.jpg' 的二值图像
# 或者你可以创建一个简单的二值图像进行测试
# 比如一个带有断裂线条的图像
image = cv2.imread('test1.jpg', cv2.IMREAD_GRAYSCALE)# 如果你没有图像,可以运行下面这段代码生成一个简单的测试图像
if image is None:print("图像文件未找到,正在生成测试图像...")# 创建一个 100x100 的黑色图像image = np.zeros((100, 100), dtype=np.uint8)# 在图像中绘制一些白色的点或线条image[20:30, 20:30] = 255  # 一个白色方块image[40:41, 50:70] = 255  # 一条白线image[42:43, 50:70] = 255  # 另一条白线 (与上一条线有微小间隙)# 2. 定义结构元素 (Structuring Element / Kernel)
# 结构元素决定了膨胀操作的形状和大小。
# 这里我们创建一个 5x5 的矩形结构元素。
kernel = np.ones((5, 5), np.uint8)# 3. 执行膨胀操作
# cv2.dilate(src, kernel, iterations)
# - src: 输入图像
# - kernel: 结构元素
# - iterations: 膨胀的次数。次数越多,膨胀效果越明显。
dilated_image = cv2.dilate(image, kernel, iterations=1)# 4. 显示结果
# 使用 matplotlib 显示图像,因为它在 Jupyter Notebook 中更方便
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 5))ax1.imshow(image, cmap='gray')
ax1.set_title('Original Image')
ax1.axis('off')ax2.imshow(dilated_image, cmap='gray')
ax2.set_title('Dilated Image')
ax2.axis('off')plt.show()# 如果你想使用 OpenCV 的窗口显示图像
# cv2.imshow('Original Image', image)
# cv2.imshow('Dilated Image', dilated_image)
# cv2.waitKey(0)
# cv2.destroyAllWindows()

执行效果:
在这里插入图片描述

http://www.xdnf.cn/news/19810.html

相关文章:

  • 机器学习 - Kaggle项目实践(8)Spooky Author Identification 作者识别
  • awk命令
  • GitHub 上那些值得收藏的英文书籍推荐(计算机 非计算机类)
  • 逻辑回归:从原理到实战的完整指南
  • 刻意练习理论
  • 群晖为家纺企业 500 名员工打造企业网盘,赋能家纺制造效率飞跃
  • Python数据分析与处理(二):将数据写回.mat文件的不同方法【超详细】
  • 第二章 Windows 核心概念通俗解析
  • Linux 的 swap 是什么
  • Vue3 警告:Runtime directive used on component with non-element root node 解决方案
  • 16k+ star! 只需要DDL就能一键生成数据库关系图!
  • 正运动控制卡学习-网络连接
  • Java 黑马程序员(进阶篇1)
  • 从BERT到RoBERTa、ALBERT:揭秘Encoder-only预训练模型的进化之路
  • 【常用SQL语句和语法总结】
  • 数据科学家如何更好地展示自己的能力
  • 项目中 Spring Boot 配置文件未生效该如何解决
  • JavaScript箭头函数与普通函数:两种工作方式的深度解析
  • 诊断服务器(Diagnostic Server)
  • Linux 字符设备驱动框架学习记录(三)
  • Spring Boot 全局异常处理问题分析与解决方案
  • PastePal for Mac 剪贴板历史记录管理器
  • prometheus+grafana搭建
  • 7.4Element Plus 分页与表格组件
  • js设计模式-装饰器模式
  • CI(持续集成)、CD(持续交付/部署)、CT(持续测试)、CICD、CICT
  • Few-Shot Prompting 实战:用5个例子让GPT-4学会复杂任务
  • (二)文件管理-基础命令-cd命令的使用
  • 中州养老:资源添加功能
  • gitlab推送失败,内存不足的处理