zoukankan      html  css  js  c++  java
  • 图像形态学


    理论

    数学形态学(Mathematical morphology) 是一门建立在 格论拓扑学 基础之上的图像分析学科,是 数学形态学图像处理 的基本理论。

    其基本的运算包括:腐蚀和膨胀、开运算和闭运算、骨架抽取、极限腐蚀、击中击不中变换、形态学梯度、Top-hat变换、颗粒分析、流域变换等。


    一、腐蚀操作

    import cv2
    import numpy as np
    import matplotlib.pyplot as plt
    
    img = cv2.imread('dige.png')
     
    kernel = np.ones((5, 5), np.uint8)
    erosion = cv2.erode(img, kernel, iterations = 1) 
    # iterations 迭代次数;如果多迭代几次,可能腐蚀的更强烈
    
    # cv_show(erosion)
    plt.imshow(erosion)
    

    迭代次数的作用

    kernel = np.ones((5, 5), np.uint8)
    erosion = cv2.erode(img, kernel, iterations = 2)  
    plt.imshow(erosion)
    

    核的作用

    
    kernel = np.ones((3, 3), np.uint8)
    erosion = cv2.erode(img, kernel, iterations = 1)  
    plt.imshow(erosion)
    

    pie = cv2.imread('pie.png')
     
    kernel = np.ones((5, 5), np.uint8)
    e1 = cv2.erode(pie, kernel, iterations = 1) 
    plt.imshow(e1)
    

    kernel = np.ones((15, 15), np.uint8)
    e1 = cv2.erode(pie, kernel, iterations = 5) 
    plt.imshow(e1)
    

    二、膨胀操作

    和腐蚀操作 互为逆运算;

    dilate 方法

    kernel = np.ones((5, 5), np.uint8)
    erosion = cv2.erode(img, kernel, iterations = 1) # 腐蚀
    dilate = cv2.dilate(erosion, kernel, iterations=2)  # 膨胀
    plt.imshow(dilate)
    
    kernel = np.ones((5, 5), np.uint8)
    d1 = cv2.dilate(pie, kernel, iterations=15)  # 膨胀
    plt.imshow(d1)
    

    三、开运算与闭运算

    腐蚀和膨胀的组合

    开运算

    先腐蚀,再膨胀

    
    opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
    plt.imshow(opening)
    

    闭运算

    先膨胀,再腐蚀

    closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)
    plt.imshow(closing)
    
    # 毛刺不仅没消失,还明显了
    

    四、梯度运算

    膨胀 --> 胖
    腐蚀 --> 瘦

    梯度 = 胖 - 瘦 (的轮廓)

    kernel = np.ones((5, 5), np.uint8)
    gradient = cv2.morphologyEx(pie, cv2.MORPH_GRADIENT, kernel)
    
    plt.imshow(gradient)
    
    # 修改核大小;宽度约等于 15
    kernel = np.ones((15, 15), np.uint8)
    gradient = cv2.morphologyEx(pie, cv2.MORPH_GRADIENT, kernel)
    
    plt.imshow(gradient)
    
    # 修改核大小 
    kernel = np.ones((25, 10), np.uint8)
    gradient = cv2.morphologyEx(pie, cv2.MORPH_GRADIENT, kernel)
    
    plt.imshow(gradient)
    

    五、礼帽和黑帽

    礼帽 = 原始输入 - 开运算结果
    开:先腐蚀后膨胀(不带刺)
    礼帽:刺


    黑帽 = 闭运算 - 原始输入
    黑帽:原始的小轮廓

    kernel = np.ones((5, 5), np.uint8)
    tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)
    
    plt.imshow(tophat)
    
    kernel = np.ones((5, 5), np.uint8)
    tophat = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel)
    
    plt.imshow(tophat)
    
  • 相关阅读:
    Android控件之ListView探究二
    Android控件之Gallery探究
    Android控件之CheckBox、RadioButton探究
    如何解决虚拟机安装centos无法全屏显示问题!
    在Windows下远程桌面连接Linux XManager篇
    putty 中文乱码解决方法
    在IIS上启用Gzip压缩(HTTP压缩)
    LINUX下RPM的使用方法
    虚拟机和主机之间文本的复制和粘贴
    windows上透过Xmanager连接Centos的远程桌面
  • 原文地址:https://www.cnblogs.com/fldev/p/14371271.html
Copyright © 2011-2022 走看看