【youcans 的 OpenCV 例程 200 篇】118. 形态学操作之底帽运算
形态学的基本思想是利用结构元素测量或提取输入图像中的形状或特征,以便进行图像分析和目标识别。形态学操作都是基于各种形状的结构元,结构元对输入图像进行操作得到输出图像。
2. 形态学基本操作
2.5 顶帽运算和底帽运算
顶帽变换和底帽变换用结构元通过开操作或闭操作从一副图像中删除物体,得到仅保留已删除分量的图像。顶帽变换用于暗背景上的亮物体,而底帽变换则用于用于亮背景上的暗物体,常用于校正不均匀光照的影响。
结构元 B 对集合 A 的底帽运算定义为图像闭运算结果减去原图像:
B
h
a
t
(
A
)
=
A
∙
B
−
A
=
(
A
⊕
B
)
⊖
B
−
A
B_{hat}(A) = A \bullet B - A = (A \oplus B) \ominus B - A
Bhat(A)=A∙B−A=(A⊕B)⊖B−A
闭运算可以删除亮背景下的暗区域,底帽变换可以得到原图中的暗区域,因此又称黑底帽变换。
底帽运算突出了比原图轮廓周围的区域更暗的区域,而且效果与核的大小相关,可以分离比邻近点暗的斑块。
OpenCV 中的函数 cv.morphologyEx 可以实现图像的顶帽运算和底帽运算,参数 op 则要分别设为 MORPH_TOPHAT、MORPH_BLACKHAT。
函数说明:
cv.morphologyEx(src, op, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]] )→ dst
参数说明:
- src:输入图像,可以为单通道或多通道,图像深度必须为 CV_8U, CV_16U, CV_16S, CV_32F 或 CV_64F 。
- op:形态学运算类型
- cv.MORPH_OPEN:开运算, 先腐蚀再膨胀
- cv.MORPH_CLOSE:闭运算, 先膨胀再腐蚀
- cv.MORPH_GRADIENT:形态学梯度, 膨胀图与腐蚀图之差
- cv.MORPH_TOPHAT:顶帽变换, 原图像与开运算之差
- cv.MORPH_BLACKHAT:黑帽变换, 闭运算图与原图像之差
- kernel:结构元(卷积核),null 时使用 3*3 矩形卷积核
例程 10.6:形态学之底帽运算
# 10.6 形态学之底帽运算
# 读取原始图像
imgGray = cv2.imread("../images/Fig0338a.tif", flags=0) # flags=0 读取为灰度图像
ret, imgBin = cv2.threshold(imgGray, 127, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU) # 二值化处理
kernel = np.ones((5, 5), np.uint8) # 卷积核
imgClose = cv2.morphologyEx(imgBin, cv2.MORPH_CLOSE, kernel) # 闭运算
imgBhat = cv2.morphologyEx(imgBin, cv2.MORPH_BLACKHAT, kernel) # 底帽运算
plt.figure(figsize=(9, 5))
plt.subplot(131), plt.axis('off'), plt.title("Origin")
plt.imshow(imgBin, cmap='gray', vmin=0, vmax=255)
plt.subplot(132), plt.title("MORPH_CLOSE"), plt.axis('off')
plt.imshow(imgClose, cmap='gray', vmin=0, vmax=255)
plt.subplot(133), plt.title("MORPH_BLACKHAT"), plt.axis('off')
plt.imshow(imgBhat, cmap='gray', vmin=0, vmax=255)
plt.tight_layout()
plt.show()
(本节完)
版权声明:
youcans@xupt 原创作品,转载必须标注原文链接:(https://blog.csdn.net/youcans/article/details/123306045)
Copyright 2022 youcans, XUPT
Crated:2022-3-5