9.4 Python图像处理之图像数学形态学-基于灰度形态学的应用(形态梯度、形态平滑、高帽变换、低帽变换)

9.4 Python图像处理之图像数学形态学-基于灰度形态学的应用(形态梯度、形态平滑、高帽变换、低帽变换)

1 算法原理

1.1 形态学梯度

形态学梯度膨胀图与腐蚀图之差,用于保留目标物体的边缘轮廓。形态学梯度操作能描述图像亮度变化的剧烈程度;当我们想要突出高亮区域的外围时,则可以选用形态学梯度来突出边缘,可以保留物体的边缘轮廓。 形态学梯度的应用,如下图所示,可以看出,利用形态学梯度,可以很好地区分图像不同区域的灰度变化,所以,在图像分割领域,形态学梯度有很好的应用。公式(K是卷积核,F是待处理灰度图):

image-20210808214531661

1.2 形态平滑

形态平滑,使用开运算和闭运算做形态平滑,循环执行开运算-闭运算-开运算操作,交替顺序,不断增大的结构元素来执行开-闭滤波。利用形态学开运算和闭运算可以实现图像的形态学平滑(也可以称之为图像除噪)处理,想象一下,假如有一块高低不平的田地,为了使这块平整这块土地,你需要挖掉高处的土,填到田地的低洼处,而闭运算就相当于挖掉高处的土,开运算就相当于将在高处挖掉的图填至低处。所以,按照这个原理,利用开运算和闭运算就可以实现图像的平滑,

本次算法设计采用了 10 次开-闭运算操作。

image-20210808214546886

利用开运算和闭运算实现的形态学平滑,具有计算量大,复杂度较高等缺点,俄日了应对这一问题,可以直接使用膨胀和腐蚀来实现这一运算,其实现公式如下所示:

image-20210808214553251

1.3 高帽变换(顶帽)

高帽变换(顶帽)是原图与原图的开运算的差值图像。开运算放大了裂缝或者局部低亮度的区域,所以,从原图中减去开运算后的图,得到的结果突出了比原图轮廓周围的区域更明亮的区域,这个操作与选择的核的大小有关。TopHat 运算一般用来分离比邻近点亮一些的斑块,可以使用这个运算提取背景。

Top-hat Transform算法在中文里被称为“高帽算法”,简称为TT,Top-hat算法。提取不光滑背景中的图像特征时,Top-hat算法是一种非常有效的工具。按照Top-hat算法的实现方式,TT算法可以分为以下两类:

image-20210808214602070

1.4 低帽运算(黑帽)

低帽运算(黑帽)是闭运算结果与原图的差值图像。黑帽运算的结果突出了比原图轮廓周围区域更暗的区域,所以黑帽运算用来分离比邻近点暗一些的斑块。

Open-cv 中的 morphologyEx()函数可以用来执行灰度形态学的形态梯度、高帽变换、低帽变换等操作,本次算法设计用到的参数有:

MORPH_OPEN:开运算(Opening operation);

MORPH_CLOSE:闭运算(Closing operation);

MORPH_GRADIENT:形态学梯度:(Morphological gradient);

MORPH_TOPHAT:“顶帽”(“Top hat”);

MORPH_BLACKHAT :“黑帽”(“Black hat“)。

2 代码

运行代码说明

1.要改变代码中的图片地址(地址不能有中文)

更改put(path)函数中的路径put(r'../image/image1.jpg')

2.注意最后的plt.savefig('1.new.jpg')是保存plt图像,如果不使用可以注释掉

代码依赖包:

matplotlib  3.4.2
numpy  1.20.3
opencv-python  4.1.2.30
# pip安装
pip install matplotlib numpy opencv-python
import numpy as np
import cv2
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

def put(path):
    # 读取图片
    img = cv2.imread(path, 0)

    # 设置核
    kernel = np.ones((5, 5), np.uint8)
    kernel2 = np.ones((55, 55), np.uint8)

    # 形态学梯度调用
    gradient = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel)

    # 形态平滑
    # 使用开运算和闭运算做形态学平滑
    # 10次交替开闭运算得到形态平滑结果
    fasf = img.copy()  # 用以存放交替开闭运算的形态平滑图像
    for i in range(10):
        # 图像开运算
        fasf = cv2.morphologyEx(fasf, cv2.MORPH_OPEN, kernel)
        # 图像闭运算
        fasf = cv2.morphologyEx(fasf, cv2.MORPH_CLOSE, kernel)

    # 高帽变换
    tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel2)

    # 低帽变换
    blackhat = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel2)

    # 图像显示
    plt.rcParams['font.sans-serif'] = ['SimHei']
    plt.subplot(231), plt.imshow(img, plt.cm.gray), plt.title('原始图像'), plt.axis('off')
    plt.subplot(232), plt.imshow(img, plt.cm.gray), plt.title('灰度图像'), plt.axis('off')
    plt.subplot(233), plt.imshow(gradient, plt.cm.gray), plt.title('形态梯度(5 * 5核)'), plt.axis('off')
    plt.subplot(234), plt.imshow(fasf, plt.cm.gray), plt.title('形态平滑(5*5核)'), plt.axis('off')
    plt.subplot(235), plt.imshow(tophat, plt.cm.gray), plt.title('高帽变换(55 * 55核)'), plt.axis('off')
    plt.subplot(236), plt.imshow(blackhat, plt.cm.gray), plt.title('低帽变换(55*55核)'), plt.axis('off')

    # plt.savefig('4.new-img.jpg')
    plt.show()
# 图像处理函数,要传入路径
put(r'../image/image3.jpg')

3 效果

在这里插入图片描述

  • 6
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
PDI-CE-9.4是Pentaho Data Integration Community Edition的一个版本。下面是关于如何部署和安装PDI-CE-9.4的步骤: 1. 首先,你需要去PDI-CE-9.4的官方网站,下载相应的软件包。下载完后,解压缩软件包到你想要安装的目录。 2. 接下来,你需要检查你的系统是否具备运行PDI-CE-9.4的要求。确保你的系统满足最低硬件和软件要求,以确保软件能够正常运行。 3. 打开解压后的文件夹,找到运行PDI-CE-9.4的可执行文件,例如`spoon.bat`(Windows系统)或`spoon.sh`(Linux/Unix系统)。 4. 双击运行`spoon.bat`(Windows系统)或通过终端运行`./spoon.sh`(Linux/Unix系统),启动PDI-CE-9.4。 5. 在PDI-CE-9.4启动后,你将看到一个图形界面。你可以在这里创建、编辑和执行数据集成和转换的任务。 6. 在使用PDI-CE-9.4时,你需要连接到相应的数据库。你可以通过点击菜单栏中的"连接"按钮,然后选择需要连接的数据库类型,并提供相关的连接信息。 7. 在创建和编辑任务时,你可以使用PDI-CE-9.4提供的各种转换步骤和作业入口来操作数据。 8. 在完成任务设置和编辑后,你可以点击菜单栏中的"运行"按钮来执行任务。你还可以使用调试功能来调试任务并查看执行过程中的数据变化和结果。 9. 在使用完毕后,你可以点击菜单栏中的"退出"按钮或关闭PDI-CE-9.4窗口来退出软件。 这些是关于PDI-CE-9.4部署和安装的一些简要步骤。根据不同的操作系统和实际需求,可能会有些许差异,但总体过程大致相同。希望这些步骤能帮助你成功地部署和安装PDI-CE-9.4

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值