顶帽操作是图像处理中的一把“手术刀”,专门用来分离和强化图像里那些比周围更亮的微小细节。它背后的逻辑并不复杂:顶帽 = 原图 - 开运算。
这里的“开运算”像一个“过滤器”,先腐蚀再膨胀,能抹去图像中比自身结构元素小的亮斑和细节。原图减去过滤掉细节的图,剩下的自然就是我们想找的微小亮部特征了。
开运算的效果是去除图形外的噪点,原图-开运算就得到了外部的噪点。那什么是开运算呢?
closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)
具体关于什么是腐蚀和膨胀的介绍,大家可以看过往的这篇文章:OpenCV开发教程之腐蚀与膨胀。
其中对什么开运算和闭运算做了介绍。
# 顶帽运算代码
import cv2
import numpy as np
from opencv_jupyter_ui import cv2_imshow
#导入图片
img = cv2.imread('./images/j2.png')
print(img.shape)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (9,9))
print(kernel)
dst = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel, iterations=1)
# 显示结果
cv2_imshow('顶帽运算', np.hstack((img,dst)))

通过上图发现,左边的图只剩下了白色的噪点。
附注:
| 操作 | 执行顺序 | 核心作用 | 对目标物体的影响 | 典型应用 |
|---|---|---|---|---|
| 腐蚀 | 单独操作 | 消除边界点,收缩物体 | 尺寸减小 | 消除细小噪点,分离物体 |
| 膨胀 | 单独操作 | 扩张边界,填充空洞 | 尺寸增大 | 连接断裂部分,填充小孔 |
| 开运算 | 先腐蚀,后膨胀 | 消除亮背景中的暗点噪点,分离粘连物体 | 尺寸和形状基本不变 | 图像去噪,物体分离 |
| 闭运算 | 先膨胀,后腐蚀 | 填充暗背景中的亮点孔洞,连接断裂部分 | 尺寸和形状基本不变 | 填充孔洞,连接邻近物体 |
| 顶帽 | 原图 - 开运算 | 提取出被开运算消除的微小亮部细节 | N/A | 校正不均匀光照,提取微小目标 |
| 黑帽 | 闭运算 - 原图 | 提取出被闭运算填充的微小暗部细节 | N/A | 提取暗色轮廓或斑点 |

全部评论