zoukankan      html  css  js  c++  java
  • 图像处理中的valid卷积与same卷积

    valid卷积

    在full卷积的卷积过程中,会遇到(K_{flip})靠近I的边界(K矩阵与I矩阵),就会有部分延申到I之外,这时候忽略边界,只考虑I完全覆盖(K_{flip})内的值情况,这个的过程就是valid卷积。一个高为H1,宽为W1的矩阵I与高为H2,宽为W2的矩阵K,在H1大于等于H2,W1大于等于W2的情况下,valid卷积的结果就是一个(H1-H2+1)*(W-W+1)的矩阵(C_{valid})

    [C_{valid}与C_{full}的对应关系为: C_{valid} = C_{full}( Rect (W_{2}-1,H_{2}-1,W_{1}-W_{2}+1,H_{1}-H_{2}+1) ) ]

    same卷积

    无论是full卷积还是valid卷积都不会得到正好的尺寸,要么比原尺寸大要么比原尺寸小,这时就需要same卷积来解决这个问题。若想得到宽和高都正好的矩阵我们首先需要给(K_{flip})一个锚点,将锚点放在(循环)图像矩阵的(r,c)处,((r,c)在矩阵之内),将对应位置的元素逐个相乘,最终将所有的积进行求和作为输出图像矩阵在(r,c)处的输出值。这个过程称为same卷积。
    OpenCv函数copyMakeBorder的参数表

    参数 解释
    src 输入矩阵
    dst 输出矩阵
    top 上侧扩充的行数
    bottom 下侧扩充的行数
    left 左侧扩充的行数
    right 右侧扩充的行数
    borderType 边界扩充的类型
    value border Type= BORDER_CONSTANT事的常数

    其中borderType有多种类型,比如:BORDER_REPLICATE(边界复制)、BORDER_CONSTANT(常数扩充)、BORDER_REFLECT(反射扩充)等。
    在使用Python进行卷积操作时用到包Scipy,其中有关的操作函数为convolve2d(in1,in2,mode='full',boundary='fill',fillvalue=0)

    参数 解释
    in1 输入数组
    in2 输入数组,代表K(卷积算子)
    mode 卷积类型,也就是以上提到的三种类型:full,valid,same
    boundary 边界填充:fillwrapsymm
    fillvalue 当boundary='fill'时,设置边界填充的值,默认为0

    在这里需要注意的是当model为same时卷积算子的锚点位置由不同尺寸而不同,假设K(卷积算子)的宽和高分别为W、H。

    W和H的值 锚点位置
    均为奇数 默认为中心点
    H为偶数、W为奇数 (H-1,(W-1)/2)
    H为奇数,W为偶数 ((H-1)/2,W-1)
    均为偶数 (H-1,W-1)

    代码实现:

    import numpy as np
    from scipy import signal
    
    if __name__ == "__main__":
    
        I = np.array([[1,2],[3,4],np.float32])
        #I的高和宽
        H1,W1 = I.shape[:2]
        #卷积算子
        k = np.array([[-1,-2],[2,1],np.float32])
        #K的宽和高
        H2,W2 = k.shape[:2]
        #计算full卷积
        c_full = signal.convolve2d(I,k,mode='full')
        #设定锚点
        r,c = 0,0
        #根据锚点来从full卷积中截取same卷积
        c_same= c_full[H2-r-1:H1-r-1,W2-c-1:W1+W2-c-1]
    
  • 相关阅读:
    URAL 2067 Friends and Berries (推理,数学)
    URAL 2070 Interesting Numbers (找规律)
    URAL 2073 Log Files (模拟)
    URAL 2069 Hard Rock (最短路)
    URAL 2068 Game of Nuts (博弈)
    URAL 2066 Simple Expression (水题,暴力)
    URAL 2065 Different Sums (找规律)
    UVa 1640 The Counting Problem (数学,区间计数)
    UVa 1630 Folding (区间DP)
    UVa 1629 Cake slicing (记忆化搜索)
  • 原文地址:https://www.cnblogs.com/supershuai/p/13169917.html
Copyright © 2011-2022 走看看