上次我们已经总结过了图像的基本概念。抛开各种图像的文件格式和压缩算法,实际在内存中的图片,就是一个个的数字矩阵。对图片存储有疑问,可以去翻看我前一节的总结。本次我们总结下图片的基本操作--图片融合,图片拼接,图片对比度,亮度处理等。
首先,我们来考虑下图片拼接。既然图片是一个个数据矩阵,那是不是我们把2个数字矩阵接在一起,是不是就是图片相接呢?答案是肯定的。比如萌妹子的图片:
同样的,水平相接也一样。
其次,我们讨论下图片的融合。图片的融合是指2张或2张以上的图片,叠加在一起,形成一张图。是不是,我们只要把两张图的数字矩阵,直接在我们需要的位置,相加就行了呢?理论是这样的。但是考虑到uint8的取值范围只有255.所以,我们会赋予2张带计算的图一定的权重,这样也可以调节,每个图片的占比。
两张妹子图我们让右边的图,所占比重为0.2,左边为0.8,即可得到下面的图片。
最后,我们总结下图片的对比度,亮度等的处理。几乎所有的图像特征处理都离不开图像的卷积运算,不论是经典cv还是深度学习的CNN。当然,我们本次的例子也是为了引出卷积的应用和概念。
不用排斥,我们不会用大量的平移,反转,叠加这种摸不着头脑的解释。这个奇葩的解释明显就是看着公式定义的运算,说废话。至少我想要的是个直观的物理意义或几何意义。
卷积的概念其实非常非常简单,可以用四个字概括:加权平均和。是的,讲完了。
我们简单理解下这个公式。可以把f函数当作目标函数,g函数当作加权函数(或者叫系数,只是这个系数也是个函数而已)。公式的意义就可以理解为,g函数对f函数在x时间内的加权平均和。
这么说可能还有些抽象。我们把f函数当作图像矩阵,g函数当作卷积核。这个公式的作用,就是用卷积核逐步滑动整个图片,对每个滑动位置做加权平均和。如图:
我们假设左边的矩阵是图片原始数据,黄色的滑动矩阵为固定的卷积核。右边的粉色矩阵为卷积的运算结果。很明显可以看出,卷积过程,就是滑动卷积核在图像所有位置的加权平均和。卷积核各个位置的数值,就是我们的加权系数,也就是公式中的g函数。
在了解了卷积运算的定义之后,我们考虑如何增加一张图片的对比度。
我们考虑处理这张妹子图片。
实际上,我们通过这样的一个卷积核,对图像做卷积运算就可以增强图像的对比度了。增强图像的对比度,实际上就是改变图像矩阵相邻数据的像素差异。相邻像素的数值差异越大,表现出的图像对比度就越强。
通过这样的一个卷积运算后,明显可以把相邻像素的像素差异变大。稍微推下微分公式,相信不需要做过多解释了。明白了图像的卷积,就能针对图像做各种各样的处理了。
至于图像的亮度提高,我相信读者已经猜到了。对的,只要提高每个像素点的值,图片亮度就相应的提升了。
下次总结,我们总结下傅立叶变换推导和在图像的应用,图像的各种滤波,平滑去燥,以及图像的形态学操作。