本博客谈谈对以下两个问题的理解:
1. 为何图像的卷积是对应元素相乘并求和;
2 为何图像的卷积可以实现图像的模糊或锐化的作用。
问题一:
先借助别人的博客,说明下图像卷积的操作:
1.1 图像卷积的操作方法:
数字图像是一个二维的离散信号,对数字图像做卷积操作其实就是利用卷积核(卷积模板)在图像上滑动,将图像点上的像素灰度值与对应的卷积核上的数值相乘,然后将所有相乘后的值相加作为卷积核中间像素对应的图像上像素的灰度值,并最终滑动完所有图像的过程。
这张图可以清晰的表征出整个卷积过程中一次相乘后相加的结果:该图片选用3*3的卷积核,卷积核内共有九个数值,所以图片右上角公式中一共有九行,而每一行都是图像像素值与卷积核上数值相乘,最终结果-8代替了原图像中对应位置处的1。这样沿着图片一步长为1滑动,每一个滑动后都一次相乘再相加的工作,我们就可以得到最终的输出结果。除此之外,卷积核的选择有一些规则:
1)卷积核的大小一般是奇数,这样的话它是按照中间的像素点中心对称的,所以卷积核一般都是3x3,5x5或者7x7。有中心了,也有了半径的称呼,例如5x5大小的核的半径就是2。
2)卷积核所有的元素之和一般要等于1,这是为了原始图像的能量(亮度)守恒。其实也有卷积核元素相加不为1的情况,下面就会说到。
3)如果滤波器矩阵所有元素之和大于1,那么滤波后的图像就会比原图像更亮,反之,如果小于1,那么得到的图像就会变暗。如果和为0,图像不会变黑,但也会非常暗。
4)对于滤波后的结构,可能会出现负数或者大于255的数值。对这种情况,我们将他们直接截断到0和255之间即可。对于负数,也可以取绝对值。
1.2 对卷积操作的理解:
首先需要理解卷积公式:
因为图像是二维离散,所以直接理解离散二维卷积:
这就是f()和X()的卷积, 对于离散变量,其实就是个求和的过程; 对于图像来说, X()是原始的图像, 而f()是模板,就是平时说的kernel核;
对这个公式稍微观察,就很容易理解卷积其实就是求解对应元素的乘积之和。
1.3 下面举一实例:
一般卷积模板行列为奇数,输出图像大小与输入相同。
设卷积模板F、输入图像X、输出图像均为3*3矩阵。
卷积模板元素下标调整后,为:
比如求点X(2,2)处的卷积,以公式: Y(2,2)=∑∑F(m,n)×X(2-m,2-n), 其中m和n取-1,0,1;
=F(-1,-1)×X(3,3)+F(-1,0)*X(3,2)+F(-1,1)*X(3,1)
+ F(0,-1)×X(2,3)+F(0,0)*X(2,2)+F(0,1)*X(2,1)
+ F(1,-1)×X(1,3)+F(1,0)*X(1,2)+F(1,1)*X(1,1)
细心的你 可能已经发现, 这9个数的对应关系并不是 1.1节 中的对应, 而是相差了180°, 所以图像处理中, 一般情况下 ,现将模板旋转180°,然后再进行对应位置元素相乘并求和。
二、为何卷积可以有图像的模糊和锐化等效果。
这要从卷积的性质说起:
时域和频域的卷积关系有:
f(x,y)*g(x,y)=F(u,v)×G(u,v)
其中f()和g()是时域的图像,*表示卷积, 而F和G是对应的傅里叶变化。
时域中的卷积相当于在频率域中的乘积。 这是个对应关系,可以帮助理解:
比如g1(x,y)是高斯核, 它的频率域G是个低通滤波器, 则F和G的乘积,结果只有低频被通过,而高频被过滤掉, 高频部分是图像的细节部分, 这样在时域中与g1的卷积就实现了去除图像细节部分 模糊效果;
再比如g2(x,y)是高斯核, 它的频率域G是个高通滤波器, 则F和G的乘积,结果只有高频被通过,而低频被过滤掉, 低频部分是轮廓信息, 这样在时域中与g2的卷积就实现了锐化效果;
可以设计各种各样的卷积核函数, 来实现卷积操作, 达到不同的效果。