122. 形态算法之边界提取

8. 形态学图像处理索引

一、 形态学算法

  • 形态学处理的主要应用是提取图像中用来表示和描述形状的元素和成分,例如提取边界、连通分量、凸壳和区域骨架。

二、边界提取

  • 边界提取的原理是通过对目标图像进行腐蚀和膨胀处理,比较结果图像与原图像的差别来实现。

  • 内边界的提取可以利用图像的腐蚀处理得到原图像的一个收缩,再将收缩结果与目标图像进行异或运算,实现差值部分的提取。
    集合 A 的边界 β(A) 可以通过合适的结构元 B 腐蚀集合 A,然后求 A 与腐蚀结果的差集来实现:
    β(A)=A−(A⊖B)
    常用的结构元 B 是 3X3 的全 1 核,而 5X5 的全 1 核往往可以得到2~3个像素宽度的边界。

  • 类似地,外边界提取先对图像进行膨胀处理,然后用膨胀结果与原目标图像进行异或运算,也就是求膨胀结果与原目标图像的差集。

三、例程

  • 10.10:形态算法之边界提取
import cv2
import numpy as np
from matplotlib import pyplot as plt

# 10.10 形态算法之边界提取
imgGray = cv2.imread(r"E:\OpenCV\Proj\imgNetrope.JPG", flags=0)  # flags=0 读取为灰度图像
ret, imgBin = cv2.threshold(imgGray, 25, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)  # 二值化处理

kSize = (3, 3)  # 卷积核的尺寸
kernel = np.ones(kSize, dtype=np.uint8)  # 生成盒式卷积核
imgErode1 = cv2.erode(imgBin, kernel=kernel)  # 图像腐蚀
imgBound1 = imgBin - imgErode1  # 图像边界提取

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("Eroded kSize=(3,3)"), plt.axis('off')
plt.imshow(imgErode1, cmap='gray', vmin=0, vmax=255)
plt.subplot(133), plt.title("Boundary extraction"), plt.axis('off')
plt.imshow(imgBound1, cmap='gray', vmin=0, vmax=255)
plt.tight_layout()
plt.show()

四、资料

youcans_的博客:
https://blog.csdn.net/youcans/article/details/123415801
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容