形态学操作—开运算

开运算(Opening)原理和作用:

  开运算是图像形态学处理中的一种操作,它由两个步骤组成:先进行腐蚀(Erosion),再进行膨胀(Dilation)。开运算的主要目的是消除图像中的小型噪点(白色噪点对应的是小型黑色区域,黑色噪点对应的是小型白色区域),同时保留图像中大型物体的结构特征。

开运算的数学表达:

  给定输入图像 I I I、结构元素 B B B,开运算可以用数学表达式表示为:
Opening ( I , B ) = Dilation ( Erosion ( I , B ) , B ) \text{Opening}(I, B) = \text{Dilation}(\text{Erosion}(I, B), B) Opening(I,B)=Dilation(Erosion(I,B),B)
  其中, Erosion ( I , B ) \text{Erosion}(I, B) Erosion(I,B) 表示输入图像 I I I被结构元素 B B B腐蚀的结果, Dilation ( ⋅ ) \text{Dilation}(\cdot) Dilation() 表示膨胀操作。

适用场景:
  • 去除小型噪点或者孤立的像素;
  • 平滑物体边缘,保留物体的整体结构;
  • 提取比结构元素更小的物体。

代码示例:

  以下是使用 OpenCV 和 Python 进行开运算的简单示例:

import cv2
import numpy as np

def show_images(image):
    cv2.namedWindow('image',cv2.WINDOW_KEEPRATIO)
    cv2.imshow('image',image)
    cv2.waitKey()
    cv2.destroyAllWindows()

def Open(image):
    # 定义结构元素(可以自定义不同形状和大小的结构元素)
    kernel = np.ones((5, 5), np.uint8)  # 5x5 的全白正方形作为结构元素
    # 进行开运算
    opened_image = cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel)
    return opened_image

if __name__ == '__main__':
    # 读取图像
    img = cv2.imread('cat-dog.png', flags=0)
    re_img=Open(img)
    # # 将四张图像连接成一个大图像
    # top_row = np.hstack((img, re_img[0]))
    # bottom_row = np.hstack((re_img[1], re_img[2]))
    # combined_img = np.vstack((img, re_img))
    combined_img=np.hstack((img,re_img))
    show_images(combined_img)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Make_magic

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值