基于EBAZ4205矿板的图像处理:17基于小波变换的图像分解及其重建
特别说明
这个项目的代码不会开源,因为这个项目的一大部分是在实习的公司做的,所以仅提供思路和展示,展示一下我的能力。
先看效果
这次让小牛和小绿做模特
经过重建后的图像能够正常显示。
算法原理
haar小波几乎是最简单的小波变换,但是他的图像分解能力依然较好。
对于图像小波分解,haar小波分解就是简单的讲前后两个像素点(x1和x2)求均值((x1+x2)/2)和偏差((x1-x2)/2)。
对每一行像素中的每两个像素进行分解,就是一次行变换,然后,对每一列图像中的上下两个像素进行分解,就是一次列变换。
一次行列变换就是一次小波分解,称之为一阶haar小波分解,多次分解就是多阶haar小波分解。
一阶haar小波分解的流程见下图
算法部署
但是!真的部署的时候,可不是按照上面的流程来部署,因为在FPGA里面数据是一行一行来的。
所以这里提供两种方案。
算法部署方案1(已验证)
因为数据是一行一行来的,所以要先缓存一行,然后将缓存换和当前行同时进行行变换。然后,行变换完的当前行和缓存行进行列变换。也就是说,我们的分解器会同时输出两行。会同时输出分解完的当前行和上一行。
重建器将输入的当前行和上一行进行列变换,然后再对每行进行行变换,然后缓存一行,一行一行的输出数据。
算法部署方案2(未实现,请关注,如果实现会开源)
把mallat算法的haar小波变换抽象为卷积运算,计算出卷积权重,然后就简单了,缓存一行输入数据,使用2x2大小的,步长为2的卷积核,对图像进行卷积运算就可求的分解结果,逆变换也是如此。