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()

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

     

    效果:

    整体边缘滤波器:

    水平边缘滤波器:

    垂直边缘滤波器:

  • 相关阅读:
    oracle 12C linux centos7.5 安装 12C
    FizzBuzz
    批量判断能否telnet登录
    统计所有机器的挂载情况
    ffmpeg windows vs library 下载地址
    需求文档测试
    接口测试分析
    chrome网页截图
    不要为了测试写一个新系统
    C# 判断是否为数字
  • 原文地址:https://www.cnblogs.com/webdev8888/p/10154437.html
Copyright © 2011-2022 走看看