今天狼哥又来更新了,上段时间写了一篇文章介绍缩放的原理《FPGA图像处理算法—基于双线性插值的图像缩放原理》,今天介绍下基于这个原理实现的无极缩放。
无极缩放是个很有意思也很有用的一个功能,在pc上实现缩放效率比较低,基于FPGA的缩放可以实时实现视频的缩放,本篇主要介绍程序的实现,对原理不做讲解,对原理不熟悉的可以看上次的原理讲解。
整个缩放的实现架构如下,主要分成两个模块,一个负责数据的读写控制,一个负责双线性插值,由于双线性插值需要两行数据才能进行差值,所以数据控制模块需要有bram缓存数据,再一个就是插值需要四个数据,所以需要四个bram来存储数据,这样才能在一个时钟周期读取四个数据,然后在有两行数据后启动插值,使用插值模块计算出来的反映射地址来控制数据读取地址,将读取出来的数据给后面的插值模块使用,所有的模块使用纯流水的模式进行,数据流进去数据流出来。
整个实现的参数设置和占用的资源如下所示,输入分辨率支持到1080p(修改参数可以支持到更高分辨率),数据位宽8bit,小数位12位,整数位8位,其他参数位宽为16bit,消耗的资源还不错。
最后放一些不同尺寸的缩放效果图:
图一最左边为原图尺寸276*276,放大到554*554,中间是FPGA放大的图,最右边是matlab出来的图。
图二左边为原图尺寸276*276,放大到1080p
图三左边为原图尺寸276*276,缩小到128*128
图四左边为原图尺寸276*276,缩小到64*64
图五左边为原图尺寸1024*1024,放大到1080p
************往期精彩文章列表************
点击上面链接查看详情