《OpenCV计算机视觉》—— 图像形态学(腐蚀、膨胀等)

文章目录

一、图像形态学基本概念

  • 图像形态学是图像处理科学的一个独立分支,它基于集合论和数学形态学的理论,专门用于分析和处理图像中的形状和结构
  • 图像形态学处理主要关注的是二值图像(黑白图像或是灰度图) ,其基本思想是用具有一定形态特征的结构元素去量度和提取图像中的对应形状,以实现图像分析和识别的目的。与传统的基于线性理论的空域或频域图像处理技术相比,图像形态学具有不模糊图像边界和细节、对噪声不敏感、提取的图像边缘平滑、骨架较连续、易于并行处理等特点

二、基本运算

1.简单介绍

  • 图像形态学的基本运算主要包括四种:膨胀、腐蚀、开运算和闭运算。

    • 腐蚀 (Erosion):通过结构元素与图像进行卷积,将结构元素包含的图像区域缩小,以去除图像中小的细节和噪声。这一操作可以用于细化边缘、分离紧密相连的物体等。
    • 膨胀 (Dilation):与腐蚀相反,膨胀操作通过结构元素与图像进行卷积,将结构元素包含的图像区域扩大,以填充图像中的空洞和连接图像中的断线。这有助于填充小的空洞、连接断裂的物体等。
    • 开运算 (Opening):先进行腐蚀操作,再进行膨胀操作的组合。这种操作可以去除图像中的小噪声和细小物体,同时保留图像中的主要结构。
    • 闭运算 (Closing):与开运算相反,闭运算是先进行膨胀操作,再进行腐蚀操作的组合。它可以用于填充图像中的小空洞,连接图像中的断裂结构,并平滑图像边缘。

2.代码实现

  • 基本运算代码实现

    python 复制代码
    import cv2
    import numpy as np
    
    # 读取图像(这里所给的图片已经是黑白图,直接读取,不需要进行二值化操作)
    image = cv2.imread('zhiwen.png')
    
    # 定义结构元素
    # 这里使用3x3的正方形结构元素
    kernel = np.ones((3, 3), np.uint8)
    
    # 腐蚀操作 cv2.erode()
    eroded_image = cv2.erode(image, kernel, iterations=1)  # iterations 为迭代次数(执行了多少次操作)
    
    # 膨胀操作 cv2.dilate()
    dilated_image = cv2.dilate(image, kernel, iterations=1)
    
    # cv2.morphologyEx() 函数用于执行更复杂的形态学操作,如开运算和闭运算
    # 开运算:先腐蚀后膨胀  cv2.MORPH_OPEN()
    opening_image = cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel)
    
    # 闭运算:先膨胀后腐蚀  cv2.MORPH_CLOSE()
    closing_image = cv2.morphologyEx(image, cv2.MORPH_CLOSE, kernel)
    
    # 显示结果
    cv2.imshow('Original Image', image)
    cv2.imshow('Eroded Image', eroded_image)
    cv2.imshow('Dilated Image', dilated_image)
    cv2.imshow('Opening Image', opening_image)
    cv2.imshow('Closing Image', closing_image)
    
    # 等待任意键按下后关闭所有窗口
    cv2.waitKey(0)
    cv2.destroyAllWindows()
  • 原图 如下

  • 腐蚀 图(左)与膨胀 图(右)

  • 开运算 图(左)与闭运算 图(右)

三、高级运算

1.简单介绍

  • 基于上述基本运算,还可以推导出多种高级形态学运算方法,如形态学梯度、顶帽变换、底帽变换等。

    • 形态学梯度 (Morphological Gradient):通过膨胀和腐蚀操作的差异,可以得到图像边缘的强度信息,有助于边缘检测
    • 顶帽变换 :先将图像进行开运算(先腐蚀后膨胀),然后将原始图像与开运算结果相减,作用与应用如下:
      • 顶帽变换能够突出原始图像中比周围区域更明亮的小尺度细节或亮度变化。
      • 常用于增强图像的局部对比度,以突出微小的细节,如血管、细胞核等。
      • 在医学图像分析(如血管和细胞核分割)以及纹理分析中发挥重要作用。
    • 黑帽变换 :先将图像进行闭运算(先膨胀后腐蚀),然后用闭运算结果减去原始图像 ,作用与应用如下:
      • 黑帽变换能够突出原始图像中比周围区域更暗的小尺度细节或亮度变化。
      • 常用于检测图像中的小暗斑点或小暗物体,以及用于凸显亮背景上的暗物体。
      • 在图像增强、缺陷检测、文字识别等领域有广泛应用。

2.代码实现

  • 形态学梯度运算代码实现

    python 复制代码
    """梯度运算"""
    # 读取图片
    wenzi = cv2.imread('wenzi.png')
    
    # 定义结构元素
    # 这里使用2x2的正方形结构元素
    kernel = np.ones((2, 2), np.uint8)
    
    # 膨胀
    pz_wenzi = cv2.dilate(wenzi, kernel, iterations=2)
    # 腐蚀
    fs_wenzi = cv2.erode(wenzi, kernel, iterations=2)
    
    # 膨胀 - 腐蚀  cv2.MORPH_GRADIENT
    TiDu_wenzi = cv2.morphologyEx(wenzi, cv2.MORPH_GRADIENT, kernel)
    
    # 显示图片
    cv2.imshow('yuantu_wenzi', wenzi)
    cv2.imshow('pz_wenzi', pz_wenzi)
    cv2.imshow('fs_wenzi', fs_wenzi)
    cv2.imshow('TiDu_wenzi', TiDu_wenzi)
    
    # 等待任意键按下后关闭所有窗口
    cv2.waitKey(0)
    cv2.destroyAllWindows()
  • 原图

  • 膨胀(左)、腐蚀(中)、形态学梯度运算(膨胀 - 腐蚀)(右)

  • 顶帽和黑帽代码实现

    python 复制代码
    """顶帽和黑帽"""
    # 顶帽 = 原始图片 - 开运算结果(先腐蚀后膨胀)
    # 黑帽 = 原始图片 - 闭运算结果(先膨胀后腐蚀)
    
    # 读取图片
    sun = cv2.imread('sun.png')
    
    # 定义结构元素
    # 这里使用3x3的正方形结构元素
    kernel = np.ones((3, 3), np.uint8)
    
    # 开运算
    sun_open = cv2.morphologyEx(sun, cv2.MORPH_OPEN, kernel)
    # 闭运算
    sun_close = cv2.morphologyEx(sun, cv2.MORPH_CLOSE, kernel)
    
    # 顶帽  cv2.MORPH_TOPHAT
    tophat = cv2.morphologyEx(sun, cv2.MORPH_TOPHAT, kernel)
    
    # 黑帽  cv2.MORPH_BLACKHAT
    blackhat = cv2.morphologyEx(sun, cv2.MORPH_BLACKHAT, kernel)
    
    # 显示图片
    cv2.imshow('sun_yuantu', sun)
    cv2.imshow('sun_open', sun_open)
    cv2.imshow('sun_close', sun_close)
    cv2.imshow('TOPHAT', tophat)
    cv2.imshow('blackhat', blackhat)
    
    # 等待任意键按下后关闭所有窗口
    cv2.waitKey(0)
    cv2.destroyAllWindows()
  • 原图

  • 开运算(左)与顶帽(右)

  • 闭运算(左)与黑帽(右)

相关推荐
AI营销实验室1 分钟前
原圈科技AI CRM系统:数据闭环与可视化革新的行业突破
大数据·人工智能
AndrewHZ3 分钟前
【复杂网络分析】什么是图神经网络?
人工智能·深度学习·神经网络·算法·图神经网络·复杂网络
2501_9414185516 分钟前
腰果病害图像识别 Mask-RCNN HRNetV2P实现 炭疽病 锈病 健康叶片分类
人工智能·分类·数据挖掘
skywalk816322 分钟前
使用Trae 自动编程:为小学生学汉语项目增加不同出版社教材的区分
服务器·前端·人工智能·trae
Deepoch25 分钟前
仓储智能化新思路:以“渐进式升级”破解物流机器人改造难题
大数据·人工智能·机器人·物流·具身模型·deepoc·物流机器人
智界前沿35 分钟前
集之互动AIGC广告大片:以“高可控”技术重构品牌视觉想象
人工智能·重构·aigc
牛客企业服务1 小时前
AI面试选型策略:9大维度避坑指南
人工智能·面试·职场和发展
Yeats_Liao1 小时前
MindSpore开发之路(四):核心数据结构Tensor
数据结构·人工智能·机器学习
许泽宇的技术分享1 小时前
解密Anthropic的MCP Inspector:从协议调试到AI应用开发的全栈架构之旅
人工智能·架构·typescript·mcp·ai开发工具
nopSled1 小时前
AlphaAvatar:一个基于 LiveKit 的插件化实时 Omni-Avatar 架构
人工智能·语言模型