作者:牛栋凯
前言
图片模糊是Android客户端开发中一种比较常见的特效,诸如对话框背景半透明效果,头像背景模糊效果都是通过图片模糊技术实现的。本文主要介绍图片模糊的实现原理及实现方案。
图片模糊原理
卷积
卷积(Convolution)是图像处理中最基本的操作,就是一个二维原图像素矩阵A(MxN)和一个二维图像滤波矩阵B(mxn)做若干操作,生成一个滤波后的新像素矩阵C(MxN),其中m和n远小于M和N,B称为卷积核(kernel),又称滤波器矩阵。
这里举个卷积的例子,如图:
上图中,最左边的是源矩阵(8x8),中间是卷积核(3x3,半径为1),最右边是通过对前面两个矩阵做卷积生成的结果矩阵。图中,如果我们要求出结果矩阵中第二行第二列的元素的值,则把卷积核的中心元素(值为0)和源矩阵的第二行第二列(值为6)对齐,然后求加权和,即图中的公式,最后得到-3。
对图像边界像素的操作应特别注意,由于周边没有足够的点,通常有三种的处理方法:1)对称处理:就是把已有的点拷贝到另一面的对应位置,模拟出完整的矩阵;2)赋0:想象图像是无限长的图像的一部分,除了我们给定值的部分,其他部分的像素值都是0;3)赋边界值:想象图像是无限制长,但是默认赋值的不是0而是对应边界点的值。
一般认为图像是连续的数据,所以一般用图像边界的值进行拓展,计算边界的像素值。计算示例如下:
值得注意的是,通常来说卷积核需要满足如下条件:
宽和高都为奇数,这样才会有半径和中心的概念。
元素总和为1。
滤波器
均值滤波器
均值滤波器(Mean Filter)是最简单的一种滤波器,它是最粗糙的一种模糊图像的方法。均值滤波器的卷积核通常是m*m的矩阵,其中每个元素为1/(m^2),可以看出卷积核的元素总和为1。比如3x3的均值滤波器,卷积核的每个元素就是1/9。如下图所示: