Haar变换又叫做Haar小波变换,是一种简单的小波变换,那么什么又是小波变换呢?所谓的小波是一种能量会衰减的波形,不同于能量永恒的波形,例如正弦波。从下面的图形可以形象看出它的命名由来:
正弦波
小波
小波变换同其他许多信号和数据的变换一样,其作用是作数据或信号的分析,处理。在这里,变换常常用到的方法便是,使用一组基(向量基,或者基函数等)对一个信号进行分解,也可以看作是使用一组函数(比如正弦、余弦函数)重新表示这个信号或原函数,这样做便能将信号中不同的分量拿出来作分析。而在作这些分解的时候,有时还要求或者希望基是互相正交的。
作为一类非常有用的变换,小波变换的特点是选用了“小波”(而非正弦波等)作为变换的基函数,使得它在处理非周期的、能量突然变换的信号时更有优势,想象一下,如下图的这个信号,如果用能量永恒的波形(其波形在整个时间轴一直持续)进行拟合将麻烦很多。
由于这种特性,使得小波变换不仅在图像的处理,在图像的检测方面也能发挥用武之地。
作为一种简单的小波变换,Haar变换在图像的检测中又有什么作用呢?首先,我们来看看什么是Haar变换。
假设我们有一张图,大小是1 x 4,也就是一张一维的图像,像下图这样:
8 | 4 | 1 | 3 |
接下来,我们对它进行Haar变换,变换的结果同样存放在一个1 x 4的数组中。
第一步,将图像中的元素两两计算平均值,并将结果存放在目标数组的开始部分,假如我们将原图像叫做P,结果数组叫做P1,则计算之后结果如下:
P1:
6 | 2 |
如果只看P1的前半部分,在计算之后,我们得到了一幅分辨率只有原来一半的新图像。
这一步我们把它叫做求均值(averaging),也叫做approximation。
第二步,计算前面两两元素的差值并除以2,再将结果存放到目标数组P1的后半部分。
P1:
6 | 2 | 2 | -1 |
当我们将图像压缩为原来分辨率一半的新图像的时候,图像的部分信息丢失了,如果需要还原原始图像,则需要补充一些细节信息。而图像两两元素的均值,与两两元素的差值,正好可以求出原像素。
这样,结果数组P1就完整地保留了原始图像的所有信息。这一步我们把它叫做求差值(differencing)。
在这里介绍几个术语,一个叫做approximation coefficients,也叫尺度函数的系数,就是前面求出来的均值。另一个叫做detail coefficients,也叫做小波函数的系数,或者细节系数。经过这个变换之后,目标数组将会存储低频信息和高频信息,低频信息对应于均值,高频信息对应于差值。
如果我们将图像继续压缩,对数组将半部分存储的均值部分继续做以上的变换,则可以得到:
P1:
4 | 2 | 2 | -1 |
这个时候图像被压缩到了原来的1/4,只有一个像素,而细节信息则有三个像素。下面用一个表格把这两次变换放到一起,看看完整的过程。
分辨率 | 均值 | 差值 |
4 | [8,4,1,3] | |
2 | [6,2] | [2,-1] |
1 | [4] | [2] |
在这个过程中,信息是没有损失的,可以无损地还原图像。
有关于如何还原原始图像,在《Haar 小波——原理》(网址:https://zhuanlan.zhihu.com/p/386322623)一文中有非常通俗易懂的描述,感兴趣可以看一看。
刚才我们其实只是讲到了一个一维信号的Haar变换,如果是二维信号呢?图像通常都是二维信号,只不过刚才为了易于理解,我们选取了一个只有一行像素的图像作为例子。
对于二维信号,通常有两种规则进行分解:标准分解和非标准分解。标准分解是指先对每一行完成分解,然后再对完成行分解的数据中的每一列进行分解;而非标准分解则是交替进行行列的分解。需要注意的是两种分解规则所得到的结果是不完全相同的。
标准分解法示意:
非标准分解法示意:
我们以非标准分解法举例,分解之后的图像是这样的:
灰度图像看得更清楚:
从上面的例子我们可以看到,Haar变换只是降低了图像的分辨率,并没有改变图像的轮廓。同时我们还发现,均值变换缓慢,属于低频信息,存储了图片的轮廓信息;而差值变化较快,属于高频信息,存储了图像的细节信息,还有噪音。
这个特点对于Haar特征这一工具来说是非常重要的。