【问题标题】:How to create a Python convolution kernel?创建一个python卷积核
【发布时间】:2020-02-11 11:22:21
【问题描述】:

我正在尝试创建一个卷积核,中间将是 1.5。不幸的是,我一直在思考如何做到这一点。我正在尝试创建类似的东西

Array = [
        [0 , 1 , 0]
        [1 , 1.5 , 1]
        [0 , 1 , 0]
]

【问题讨论】:

    标签: python numpy opencv image-processing convolution


    【解决方案1】:

    由于 OpenCV 使用 Numpy 显示图像,您可以简单地使用 Numpy 创建卷积核。

    import numpy as np
    
    convolution_kernel = np.array([[0, 1, 0], 
                                   [1, 1.5, 1], 
                                   [0, 1, 0]])
    

    这是内核。注意类型是<class 'numpy.ndarray'>

    [[0.  1.  0. ]
     [1.  1.5 1. ]
     [0.  1.  0. ]]
    

    要将内核与图像卷积,您可以使用cv2.filter2D()。像这样的

    import cv2
    
    image = cv2.imread('1.png')
    result = cv2.filter2D(image, -1, convolution_kernel)
    

    有关内核构造的更多信息,请查看this。以下是一些常见的内核和卷积后的结果。使用此输入图像:

    锐化内核

    sharpen = np.array([[0, -1, 0], 
                        [-1, 5, -1], 
                        [0, -1, 0]])
    

    拉普拉斯核

    laplacian = np.array([[0, 1, 0], 
                          [1, -4, 1], 
                          [0, 1, 0]])
    

    压纹内核

    emboss = np.array([[-2, -1, 0], 
                       [-1, 1, 1], 
                       [0, 1, 2]])
    

    大纲内核

    outline = np.array([[-1, -1, -1], 
                        [-1, 8, -1], 
                        [-1, -1, -1]])
    

    底部索贝尔

    bottom_sobel = np.array([[-1, -2, -1], 
                             [0, 0, 0], 
                             [1, 2, 1]])
    

    左索贝尔

    left_sobel = np.array([[1, 0, -1], 
                           [2, 0, -2], 
                           [1, 0, -1]])
    

    正确的索贝尔

    right_sobel = np.array([[-1, 0, 1], 
                            [-2, 0, 2], 
                            [-1, 0, 1]])
    

    顶级索贝尔

    top_sobel = np.array([[1, 2, 1], 
                          [0, 0, 0], 
                          [-1, -2, -1]])
    

    【讨论】:

    • 对不起,我的问题太含糊了。数组的大小会有所不同,所以它可以是任何大小的参数,它将创建一个 NxN 数组,然后它的中间必须有 1.5。
    • 根据您希望内核的其余部分包含的内容,您可以使用a = np.ones((N, N)); a[N//2, N//2] = 1.5。另请查看scipy.signalscipy.ndimage
    • 我觉得这个答案既有帮助又有启发性,感谢您抽出宝贵时间将其发布得这么好!
    猜你喜欢
    • 1970-01-01
    • 2019-02-11
    • 2016-12-31
    • 1970-01-01
    • 2018-11-11
    • 1970-01-01
    • 2017-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多