前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[Python图像处理] 十.形态学之图像顶帽运算和黑帽运算

[Python图像处理] 十.形态学之图像顶帽运算和黑帽运算

作者头像
Eastmount
发布2021-12-02 21:15:34
8830
发布2021-12-02 21:15:34
举报

该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门、OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子、图像增强技术、图像分割等,后期结合深度学习研究图像识别、图像分类、目标检测应用。

前一篇文章介绍图像形态学变换,包括图像开运算、图像闭运算和梯度运算。本篇文章继续讲解Python调用OpenCV实现图像形态学变换,包括图像顶帽运算和图像黑帽运算,基础性知识希望对您有所帮助。不足之处,还请海涵~

  • 一.图像顶帽运算
  • 二.图像黑帽运算
  • 三.总结

文章参考自己以前系列图像处理文章及OpenCV库函数,同时部分参考网易云lilizong老师的视频,推荐大家去学习。同时,本篇文章涉及到《计算机图形学》基础知识,请大家下来补充。该系列在github所有源代码:

  • https://github.com/eastmountyxz/ ImageProcessing-Python

数学形态学(Mathematical morphology)是一门建立在图论和拓扑学基础之上的图像分析学科,是数学形态学图像处理的基本理论。其基本的运算包括:腐蚀和膨胀、开运算和闭运算、骨架抽取、极限腐蚀、击中击不中变换、形态学梯度、Top-hat变换、颗粒分析、流域变换等。


一. 图像顶帽运算

1.基本原理 图像顶帽(或图像礼帽)运算是原始图像减去图像开运算的结果,得到图像的噪声。如下图所示:

顶帽运算(img) = 原始图像(img) - 开运算(img)

2.函数原型 图像开运算主要使用的函数morphologyEx,它是形态学扩展的一组函数,其参数cv2.MORPH_TOPHAT对应开运算。其原型如下:

  • dst = cv2.morphologyEx(src, cv2.MORPH_TOPHAT, kernel)

参数dst表示处理的结果,src表示原图像,cv2.MORPH_TOPHAT表示顶帽运算,kernel表示卷积核。下图表示5*5的卷积核,可以采用函数 np.ones((5,5), np.uint8) 构建。

卷积如下图所示:

3.代码实现 完整代码如下所示:

代码语言:javascript
复制
#encoding:utf-8
import cv2  
import numpy as np  

#读取图片
src = cv2.imread('test01.png', cv2.IMREAD_UNCHANGED)

#设置卷积核
kernel = np.ones((5,5), np.uint8)

#图像顶帽运算
result = cv2.morphologyEx(src, cv2.MORPH_TOPHAT, kernel)

#显示图像
cv2.imshow("src", src)
cv2.imshow("result", result)

#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果如下图所示,可以看到外部噪声被提取出来。

如果想获取更多的细节,可以将卷积设置为10*10,如下图所示:

  • kernel = np.ones((10,10), np.uint8)
  • result = cv2.morphologyEx(src, cv2.MORPH_TOPHAT, kernel)

二. 图像黑帽运算

1.基本原理 图像黑帽运算是图像闭运算操作减去原始图像的结果,得到图像内部的小孔,或者前景色中的小黑点。如下图所示:

黑帽运算(img) = 闭运算图像(img) - 原始图像(img)

2.函数原型 图像开运算主要使用的函数morphologyEx,它是形态学扩展的一组函数,其参数cv2.MORPH_BLACKHAT对应开运算。其原型如下:

  • dst = cv2.morphologyEx(src, cv2.MORPH_BLACKHAT, kernel)

参数dst表示处理的结果,src表示原图像,cv2.MORPH_BLACKHAT表示黑帽运算,kernel表示卷积核。下图表示5*5的卷积核,可以采用函数 np.ones((5,5), np.uint8) 构建。

3.代码实现 完整代码如下所示:

代码语言:javascript
复制
#encoding:utf-8
import cv2  
import numpy as np  

#读取图片
src = cv2.imread('test02.png', cv2.IMREAD_UNCHANGED)

#设置卷积核
kernel = np.ones((5,5), np.uint8)

#图像黑帽运算
result = cv2.morphologyEx(src, cv2.MORPH_BLACKHAT, kernel)

#显示图像
cv2.imshow("src", src)
cv2.imshow("result", result)

#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果如下图所示,可以看到图像内部黑点被提取出来。

但内部比较大的四个黑点没有被提取,如果想获取更多的细节,可以将卷积设置为10*10,如下图所示:

  • kernel = np.ones((10,10), np.uint8)
  • result = cv2.morphologyEx(src, cv2.MORPH_BLACKHAT, kernel)

三.总结

本篇文章主要讲解Python调用OpenCV实现图像腐蚀和图像膨胀的算法,基础性知识希望对您有所帮助。

  • 一.图像顶帽运算
  • 二.图像黑帽运算
  • 三.总结

源代码下载地址,记得帮忙点star和关注喔!

  • https://github.com/eastmountyxz/ ImageProcessing-Python

参考文献,在此感谢这些大佬,共勉!

  • [1] 冈萨雷斯. 数字图像处理(第3版)[M]. 电子工业出版社, 2013.
  • [2] 罗子江. Python中的图像处理[M]. 科学出版社, 2020.
  • [3] https://blog.csdn.net/Eastmount
  • [4]《计算机图形学》基础知识
  • [5] 部分内容参考网易云lilizong老师的视频
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-05-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 娜璋AI安全之家 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 二. 图像黑帽运算
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档