0
点赞
收藏
分享

微信扫一扫

【youcans 的 OpenCV 例程200篇】121. 击中-击不中用于特征识别


【youcans 的 OpenCV 例程 200 篇】121. 击中-击不中用于特征识别

击中-击不中是形态检测的基本工具,可以实现对象的细化和剪枝操作,常用于物体识别、图像细化。

击中-击不中变换变换定义为两个结构元 B1、B2 对对集合 A 的运算:
I ⊛ B 1 , 2 = ( A ⊖ B 1 ) ∩ ( A c ⊖ B 2 ) I \circledast B_{1,2} = (A \ominus B_1) \cap (A^c \ominus B_2) IB1,2=(AB1)(AcB2)

结构元 B1 对图像上进行腐蚀、结构元 B2 对图像的补集进行腐蚀,二者的结果相减得到击中-击不中变换。

击中击不中变换有两个结构元,B1 是当前位置可以有的形状,B2是当前位置不可以有的形状,虽然总体而言这两个结构元应该被视为一体,但在实际运算中是先后进行两次腐蚀运算,然后取交集。

严格来说,击中击不中并非相当于腐蚀操作,而是类似于严格的模板匹配。只有符合要求的形状,才会在最终结果中显示出来。

OpenCV 中的函数 cv.morphologyEx 可以实现击中-击不中变换,但要将参数 op 设为 cv.MORPH_HITMISS,并使用 CV_32SC 数据类型。


例程 10.9:击中-击不中变换进行特征识别

本例使用击中-击不中变换进行特征识别,提取绳结特征。

    # 10.9 击中-击不中变换进行特征识别
    # 读取原始图像
    imgGray = cv2.imread("../images/imgNetrope.png", flags=0)  # flags=0 读取为灰度图像
    ret, imgBin = cv2.threshold(imgGray, 25, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)  # 二值化处理

    # 击中击不中变换
    kernal1 = cv2.getStructuringElement(cv2.MORPH_CROSS, (5, 5), (-1, -1))
    kernal2 = cv2.getStructuringElement(cv2.MORPH_CROSS, (9,9), (-1, -1))
    imgHMT1 = cv2.morphologyEx(imgBin, cv2.MORPH_HITMISS, kernal1)
    imgHMT2 = cv2.morphologyEx(imgBin, cv2.MORPH_HITMISS, kernal2)

    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("HMT (5,5)"), plt.axis('off')
    plt.imshow(imgHMT1, cmap='gray', vmin=0, vmax=255)
    plt.subplot(133), plt.title("HMT (9,9)"), plt.axis('off')
    plt.imshow(imgHMT2, cmap='gray', vmin=0, vmax=255)
    plt.tight_layout()
    plt.show()

在这里插入图片描述


(本节完)


版权声明:

youcans@xupt 原创作品,转载必须标注原文链接:(https://blog.csdn.net/youcans/article/details/123344496)

Copyright 2022 youcans, XUPT
Crated:2022-3-6


举报

相关推荐

0 条评论