zoukankan      html  css  js  c++  java
  • 卷积核----图片边缘滤波器

    from PIL import Image
    import numpy as np
    import matplotlib.pyplot as plt
    
    def main():
        im = Image.open("D:\temp\img\bw.jpg")
    
        res=conv2(im,kv).astype(dtype="uint8")
        print(res)
        img2=Image.fromarray(res)
        img2.show()
    #计算结果可能不在[0,255]之间
    def Relu2(a):
        if a<0:
            return 0
        if a>255:
            return 255
    #被卷积的图片,卷积核
    def conv2(im,kk):
        matrix = np.asarray(im)
        m1 = matrix[:, :, 0]
        m2 = matrix[:, :, 1]
        m3 = matrix[:, :, 2]
        matrix1=conv(m1,kk)
        matrix2=conv(m2,kk)
        matrix3=conv(m3,kk)
        return np.dstack((matrix1,matrix2,matrix3))
    #整体边缘滤波器
    ke=np.array([
        [0,-4,0],[-4,16,-4],[0,-4,0]
    ])
    #水平边缘滤波器
    kh=np.array([
        [1,2,1],[0,0,0],[-1,-2,-1]
    ])
    #垂直边缘滤波器
    kv=np.array([
        [1,0,-1],[2,0,-2],[1,0,-1]
    ])
    
    #被卷积一维矩阵,卷积核
    def conv(mx,kmx):
        v1=mx.shape[0]
        v2=mx.shape[1]
        kv1=kmx.shape[0]
        kv2=kmx.shape[1]
        l1=v1-kv1
        l2=v2-kv2
        res=np.zeros((l1,l2))
        for i in range(l1):
            for j in range(l2):
                res[i][j]=Relu2((mx[i:i+kv1,j:j+kv2]*kmx).sum())
        return res
    main()

    图像读出来是个三维矩阵,对每个通道使用不同卷积核卷积,观察效果

     

    效果:

    整体边缘滤波器:

    水平边缘滤波器:

    垂直边缘滤波器:

  • 相关阅读:
    Lotus Notes中文档查询(转)
    MSSQL日志管理
    VS使用带临时表的存储过程
    TaskbarForm
    IT人士在离职后可以做的14件事情
    app.config数据库连接字符串的加密
    IT职场人,切不要一辈子靠技术生存
    wmi资料
    迁移成功
    【SpeC#】-C#的又一同胞兄弟
  • 原文地址:https://www.cnblogs.com/webdev8888/p/10154437.html
Copyright © 2011-2022 走看看