图像处理中的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}\)。
\]
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 | 边界填充:fill\wrap\symm |
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([[5,6],[7,8],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]
图像处理中的valid卷积与same卷积的更多相关文章
- 图像处理中任意核卷积(matlab中conv2函数)的快速实现。
卷积其实是图像处理中最基本的操作,我们常见的一些算法比如:均值模糊.高斯模糊.锐化.Sobel.拉普拉斯.prewitt边缘检测等等一些和领域相关的算法,都可以通过卷积算法实现.只不过由于这些算法的卷 ...
- Full卷积、Same卷积、Valid卷积、带深度的一维卷积
转载和参考以下几个链接:https://www.cnblogs.com/itmorn/p/11177439.html; https://blog.csdn.net/jack__linux/articl ...
- (原)CNN中的卷积、1x1卷积及在pytorch中的验证
转载请注明处处: http://www.cnblogs.com/darkknightzh/p/9017854.html 参考网址: https://pytorch.org/docs/stable/nn ...
- tensorflow中卷积、转置卷积具体实现方式
卷积和转置卷积,都涉及到padding, 那么添加padding 的具体方式,就会影响到计算结果,所以搞清除tensorflow中卷积和转置卷积的具体实现有助于模型的灵活部署应用. 一.卷积 举例说明 ...
- 深度学习面试题10:二维卷积(Full卷积、Same卷积、Valid卷积、带深度的二维卷积)
目录 二维Full卷积 二维Same卷积 二维Valid卷积 三种卷积类型的关系 具备深度的二维卷积 具备深度的张量与多个卷积核的卷积 参考资料 二维卷积的原理和一维卷积类似,也有full卷积.sam ...
- 深度学习面试题09:一维卷积(Full卷积、Same卷积、Valid卷积、带深度的一维卷积)
目录 一维Full卷积 一维Same卷积 一维Valid卷积 三种卷积类型的关系 具备深度的一维卷积 具备深度的张量与多个卷积核的卷积 参考资料 一维卷积通常有三种类型:full卷积.same卷积和v ...
- Convolution Network及其变种(反卷积、扩展卷积、因果卷积、图卷积)
今天,主要和大家分享一下最近研究的卷积网络和它的一些变种. 首先,介绍一下基础的卷积网络. 通过PPT上的这个经典的动态图片可以很好的理解卷积的过程.图中蓝色的大矩阵是我们的输入,黄色的小矩阵是卷积核 ...
- DeepLearning.ai学习笔记(四)卷积神经网络 -- week1 卷积神经网络基础知识介绍
一.计算机视觉 如图示,之前课程中介绍的都是64* 64 3的图像,而一旦图像质量增加,例如变成1000 1000 * 3的时候那么此时的神经网络的计算量会巨大,显然这不现实.所以需要引入其他的方法来 ...
- 卷积神经网络(CNN)之一维卷积、二维卷积、三维卷积详解
作者:szx_spark 由于计算机视觉的大红大紫,二维卷积的用处范围最广.因此本文首先介绍二维卷积,之后再介绍一维卷积与三维卷积的具体流程,并描述其各自的具体应用. 1. 二维卷积 图中的输入的数据 ...
随机推荐
- corosync+pacemaker实现httpd高可用
corosync+pacemaker 官方网址 https://clusterlabs.org/ 一.开源高可用了解 OPEN SOURCE HIGH AVAILABILITY CLUSTER STA ...
- Go 包管理中的常见问题
随处可见的GO111MODULE=on 在GitHub上,经常看到不少项目的readme里都有这么一句: ✗ GO111MODULE=on go get golang.org/x/tools/gopl ...
- Java IO(七)ByteArrayInputStream 和 ByteArrayOutputStream
Java IO(七)ByteArrayInputStream 和 ByteArrayOutputStream 一.介绍 ByteArrayInputStream 和 ByteArrayOutputSt ...
- 【MOOC操作系统】测试题大题-进程调度 先入先服务算法例题 【某多道程序系统供用户使用的主存为100K,磁带机2台,打印机1台,采用可变分区存储管理,静态方式分配外围设备(进程获得所需全部设备才能进入内容),忽略用户作业的I/O时间。采用动态分区、首次匹配法(从低地址区开始)分配主存,一个作业创建一个进程,且运行中不紧缩内存。作业调度采用FCFS算法,在主存中的进程采用剩余时间最短调度算法。】
分析图: 答案: (1) 8 : 00作业1到达,占有资源并调入主存运行. 8: 20作业2和3同时到达,但作业2因分不到打印机,只能在后备队列等待.作业3资源满足,可进主存运行,并与作业1平分CPU ...
- 【JVM】堆体系结构及其内存调优
堆体系结构 一个JVM实例只存在一个堆内存,堆内存的大小是可调节的.类加载器读取类文件后,需要把类.方法.常量.变量放在堆内存中,保存所有引用类型的真实信息,以方便执行器指向,堆内存分为三个部分:年轻 ...
- akka-typed(3) - PersistentActor has EventSourcedBehavior
akka-typed中已经没有PersistentActor了.取而代之的是带有EventSourcedBehavior的actor,也就是一种专门支持EventSource模式的actor.Even ...
- Bom和Dom对象
BOM-JavaScript是运行在浏览器中的,所以提供了一系列对象用于和浏览器窗口进行交互,这些对象主要包括window.document.location.navigator和screen等.通常 ...
- Java实现 LeetCode 76 最小覆盖子串
76. 最小覆盖子串 给你一个字符串 S.一个字符串 T,请在字符串 S 里面找出:包含 T 所有字母的最小子串. 示例: 输入: S = "ADOBECODEBANC", T = ...
- Java实现二进制幂
1 问题描述 使用n的二进制表示,计算a的n次方. 2 解决方案 2.1 从左至右二进制幂 此方法计算a的n次方具体思想,引用<算法设计与分析基础>第三版一段文字介绍: package c ...
- Java实现最小费用最大流问题
1 问题描述 在最大流有多组解时,给每条边在附上一个单位费用的量,问在满足最大流时的最小费用是多少? 2 解决方案 下面代码所使用的测试数据如下图: package com.liuzhen.pract ...