卷积、去卷积
目录
一,线性卷积
1,连续卷积
设: f(x),g(x)是R1上的两个可积函数,作积分
可以证明,关于几乎所有的实数x,上述积分是存在的。这样,随着x的不同取值,这个积分就定义了一个新函数h(x),称为函数f与g的卷积,记为h(x)=(f*g)(x)
对于二维甚至多维空间的积分卷积,定义同理。
2, 离散卷积
和连续积分类似的,离散卷积也是两个序列所有和为固定值的元素乘积之和。
实际上,离散卷积和积分卷积的本质是一样的,可以轻松互相转化。
3,卷积的性质
(1)交换律
(2)结合律
(3)分配律
(4)数乘
(5)微分
对于离散卷积,D就是差分
二,周期卷积
如果2个周期函数可积,那么它的线性卷积:
然而,周期函数只要都不是恒为0,上式的反常积分都是不存在的。
PS:这个反常积分的柯西主值有可能为0,但是不代表反常积分收敛。
而实际上,周期函数也没有必要在无穷区间上卷积,只需要在一个周期内即可。
周期函数的周期卷积:
离散的:
三,循环卷积
对于定义域是有限区间的函数,循环卷积就是函数做周期延展之后的周期卷积。
1,二维连续循环卷积
从这个式子看,其实也相当于从任意位置分割成2段,分段卷积之和。
2,二维离散循环卷积
3,二维离散循环卷积的各种表示法
以卷积 为例
(1)小卷积核表示法
(2)大矩阵表示法
当我们用卷积定理,用傅里叶变换实现卷积运算,使用的就是大矩阵表示法。
(3)超大矩阵表示法
用矩阵表示:
显然,矩阵的第1列是卷积结果中的a的系数,所以第1列的(1 2 0 3 4 0 0 0 0 )就是卷积核
(4)超大矩阵互为转置的2个卷积核
这个矩阵的转置的第1列是(1 0 2 0 0 0 3 0 4)
所以,大矩阵表示法和大矩阵表示法
所对应的超大矩阵表示法互为转置。
考虑到这是循环卷积,我们可以说2个大矩阵关于原点对称。
(5)超大矩阵互为转置的2个卷积核的傅里叶变换
和
把他们用fftshift 变成:
和
,就是互为中心对称的关系。
所以,超大矩阵表示法互为转置的2个卷积核,他们的傅里叶变换互为共轭复数。
(6)三种运算方式
小卷积核对应的是卷积运算,大矩阵表示法对应的是傅里叶变换,超大矩阵表示法对应的是矩阵乘法。
显然超大矩阵表示法的矩阵乘法是最慢的。
卷积运算和傅里叶变换的速度差不多,傅里叶变换的时间复杂度为O(N^2 logN),所以哪个快取决于卷积核的大小。小的卷积核卷积运算快,大的卷积核傅里叶变换运算快。
四,高斯卷积
如果指定g为高斯函数,那么卷积f*g就是f的高斯卷积。
常见的就是一维和二维的高斯函数,即一维和二维的正态分布。
如5*5的高斯卷积
五,滤波器
用卷积作为滤波器,也称核函数。
六,去卷积
1,最优化问题
考虑到噪声的影响,去卷积可以表示成最优化问题:
其中B是卷积核,i是原图,j是模糊图,卷积矩阵H{1,2}表示一阶导数,而H{3...5}表示二阶导数。
即,H是常数矩阵,λ是超参,B和j是输入,i是求解的输出项。
表达式变形:
,其中
是一个常数矩阵。
2,矩阵分析
假设x和j是n行m列的图像转化而来的列向量,即n*m行1列的矩阵,那么B是一个n*m行n*m列的方阵,H1到H5也是如此。
所以,S是一个n*m*5行n*m列的常数矩阵。
3,函数形态分析
可以表示成
其中是凸函数,
也是凸函数,A=S是常数矩阵
这样,我们就可以用一阶原始对偶Chambolle-Pock算法来求解了。
4,Chambolle-Pock算法
solve min f(x)+g(Ax)
solve min h(x) max h(z) , which h(x,z)=f(x)-g_conjugate(z)+z^T * A * x
其中g_conjugate就是g的共轭函数g*
求解方法:
先输入初始值x和z,然后初始化y=x,然后反复调用迭代公式:
所以,主要运算量在4个部分:Ay、ATz、prox g*内部、prox f内部。
5,prox求解
这里,,所以
同样的,,所以
所以,主要运算量在3个部分:Ay、ATz、prox f内部,
而prox f内部又包括 分子Bj、分母BTB、分母逆、分子乘以分母逆。
6,矩阵运算优化
如果采用通用的Chambolle-Pock算法去求解,时间复杂度是非常大的,因为A和B都是超大矩阵。
假如j是1000*1000的图片,100万像素,那么仅仅是Bj这个乘法运算,就需要1万亿次运算。
而prox f内部则更复杂。
解决办法:把超大矩阵表示法换成大矩阵表示法,再用卷积定理。
(1)prox f内部
B是n*m行n*m列的矩阵,j是n*m行1列的矩阵(列向量),由于B本身就是卷积转化而来,所以Bj可以表示成2个n行m列的矩阵的卷积,从而利用卷积定理(傅里叶变换)来完成计算。
同样的,也是某个矩阵对应的卷积,所以
可以表示成
其中F是傅里叶变换。
(2)Ay、ATz
首先是Ay,和Bj是一样的,用卷积定理(傅里叶变换)来完成计算。
其次是求AT,矩阵的转置固然好求,但是A太大了。
由于AT出现的唯一的地方就是AT和z的乘法,所以我们把问题转化成在求Ay的方法的基础上,略改一下就变成了求ATz,直接省掉AT的求解。
在《二维离散循环卷积的各种表示法》中我们已经有了结论,A和AT的傅里叶变换互为共轭复数。
7,去傅里叶变换
傅里叶变换的时间复杂度为O(N^2 logN)
在卷积核远远小于图片尺寸的情况下,卷积运算比傅里叶运算快。
这里涉及的卷积核有2种,一是模糊核,稍微大一点,二是微分,一阶是1*2,二阶是2*2
所以,把微分卷积涉及傅里叶变换的运算,换成卷积运算,理论上更快。
那么,如果Ay这个卷积直接运算而不用傅里叶变换,ATz又该怎么表示呢?
在《二维离散循环卷积的各种表示法》中我们同样已经有了结论,A和AT关于原点对称。