上海古都建筑设计集团,上海办公室装修设计公司,上海装修公司高质量的内容分享社区,上海装修公司我们不是内容生产者,我们只是上海办公室装修设计公司内容的搬运工平台

FPGA实现JPEG-LS图像压缩,有损无损可配置,提供工程源码和技术支持

guduadmin503月前

目录

  • 1、前言
    • 免责声明
    • 2、JPEG-LS图像压缩理论
    • 3、JPEG-LS图像压缩性能介绍
    • 4、JPEG-LS图像压缩时序介绍
    • 5、JPEG-LS图像压缩输出压缩流
    • 6、工程源码和仿真
    • 7、福利:工程代码的获取

      1、前言

      JPEG-LS(简称JLS)是一种无损/有损的图像压缩算法,其无损模式的压缩率相当优异,优于 Lossless-JPEG、Lossless-JPEG2000、Lossless-JPEG-XR、FELICES 等。

      本设计使用system verilog语言设计了一个JPEG-LS图像压缩加速器,输入数据为8位的灰度图,输出数据为JPEG-LS图像压缩后的16位数据,集成了有损和无损两种压缩方案,可通过顶层参数配置,选择有损压缩时还有1~7的7个有损压缩等级可配置,实用性和灵活性很高;一并提供了加速器的仿真源文件,可通过vivado或其他软件进行仿真,文章后面有详细的仿真教程;

      本文详细描述了JPEG-LS图像压缩加速器及其仿真的设计方案,工程代码可综合编译上板调试,但目前只做到了仿真层面,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做项目开发,可应用于医疗、军工等行业的数字成像和图像压缩领域;

      提供完整的、跑通的工程源码和技术支持;

      工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;

      免责声明

      本工程及其源码即有自己写的一部分,也有网络公开渠道获取的一部分(包括CSDN、Xilinx官网、Altera官网等等),若大佬们觉得有所冒犯,请私信批评教育;基于此,本工程及其源码仅限于读者或粉丝个人学习和研究,禁止用于商业用途,若由于读者或粉丝自身原因用于商业用途所导致的法律问题,与本博客及博主无关,请谨慎使用。。。

      2、JPEG-LS图像压缩理论

      JPEG-LS图像压缩算法介绍可以百度一下或者csdn或者知乎搜一下看看,专业的讲解我不擅长,我只擅长用fpga实现算法,专业讲原理的大佬比我讲得好,这里可以推荐一篇阅读量很大的文章:直接点击前往

      3、JPEG-LS图像压缩性能介绍

      首先看看在Xilinx Artix-7 xc7a35tcsg324-2 上综合和实现的资源消耗:

      FPGA实现JPEG-LS图像压缩,有损无损可配置,提供工程源码和技术支持,在这里插入图片描述,第1张

      35MHz 下,图像压缩的性能为 35 Mpixel/s ,对 1920x1080 图像的压缩帧率是 16.8fps;

      理论上支持任意分辨率图片的压缩;

      4、JPEG-LS图像压缩时序介绍

      首先看看PEG-LS图像压缩加速器顶层接口:

      FPGA实现JPEG-LS图像压缩,有损无损可配置,提供工程源码和技术支持,在这里插入图片描述,第2张

      注意仔细看每个接口对应的注释,看懂了接口才能理解时序;

      下图展示了压缩 2 张图像的输入时序图(//代表省略若干周期,X代表don’t care)。其中图像 1 在输入第一个像素后插入了 1 个气泡;而图像 2 在 i_vs=1 后插入了 1 个气泡。注意图像间空闲必须至少 16 个周期。

      FPGA实现JPEG-LS图像压缩,有损无损可配置,提供工程源码和技术支持,在这里插入图片描述,第3张

      代码量不大,加上注释和隔行一共才856行,如下:

      FPGA实现JPEG-LS图像压缩,有损无损可配置,提供工程源码和技术支持,在这里插入图片描述,第4张

      5、JPEG-LS图像压缩输出压缩流

      在输入过程中,JPEG-LS图像压缩同时会输出压缩好的 JPEG-LS流,该流构成了完整的 .jls 文件的内容(包括文件头部和尾部)。o_de=1 时,o_data 是一个有效输出数据。其中,o_data 遵循大端序,即 o_data[15:8] 在流中的位置靠前,o_data[7:0] 在流中的位置靠后。在每个图像的输出流遇到最后一个数据时,o_last=1 指示一张图像的压缩流结束。

      6、工程源码和仿真

      开发板FPGA型号:Xilinx xc7k325tffg676-2;

      开发环境:Vivado2019.1;

      运行:Vivado在线仿真;

      仿真是将指定文件夹里的 .pgm 格式的未压缩图像批量送入 JPEG-LS图像压缩加速器 进行压缩,然后将 JPEG-LS图像压缩加速器 的输出结果保存到 .jls 文件里,最后通过工具查看.jls图片;

      工程代码架构如下:

      FPGA实现JPEG-LS图像压缩,有损无损可配置,提供工程源码和技术支持,在这里插入图片描述,第5张

      仿真流程为:

      第一步:

      添加源码并开启行为仿真:

      FPGA实现JPEG-LS图像压缩,有损无损可配置,提供工程源码和技术支持,在这里插入图片描述,第6张

      运行中可能会出现如下信息导致仿真失败:

      FPGA实现JPEG-LS图像压缩,有损无损可配置,提供工程源码和技术支持,在这里插入图片描述,第7张

      解决办法:在Tcl中输入以下指令并回车:

      set_property display_limit 134217728 [current_wave_config]

      FPGA实现JPEG-LS图像压缩,有损无损可配置,提供工程源码和技术支持,在这里插入图片描述,第8张

      第二步:

      点击开始仿真:

      FPGA实现JPEG-LS图像压缩,有损无损可配置,提供工程源码和技术支持,在这里插入图片描述,第9张

      该仿真需要运行十几分钟;

      FPGA实现JPEG-LS图像压缩,有损无损可配置,提供工程源码和技术支持,在这里插入图片描述,第10张

      仿真完后可以看到仿真了8张图片,产生了8个sof;

      仿真的输入和输出:

      共准备了9张.pgm 格式的未压缩图像作为输入源,路径如下:

      FPGA实现JPEG-LS图像压缩,有损无损可配置,提供工程源码和技术支持,在这里插入图片描述,第11张

      经过十几分钟的漫长仿真后,输出8张压缩后的.jls图片,路径如下:

      FPGA实现JPEG-LS图像压缩,有损无损可配置,提供工程源码和技术支持,在这里插入图片描述,第12张

      输入输出的对比:

      输入的.pgm 格式的未压缩图像我在Win10系统中可以直接打开;

      输出的压缩后的.jls图片我在Win10系统中不能打开,可以使用下面某网站打开:

      某网站:点击前往

      FPGA实现JPEG-LS图像压缩,有损无损可配置,提供工程源码和技术支持,在这里插入图片描述,第13张

      最后查看原图和压缩后的图比较:

      FPGA实现JPEG-LS图像压缩,有损无损可配置,提供工程源码和技术支持,在这里插入图片描述,第14张

      另外,你还可以修改一些仿真参数来进行别的玩儿法:

      修改 tb_helai_jpeg_jls_EC.sv 里的宏名 NEAR 来改变压缩率。

      修改 tb_helai_jpeg_jls_EC.sv 里的宏名 BUBBLE_CONTROL 来决定输入相邻的像素间插入多少个气泡:

      BUBBLE_CONTROL=0 时,不插入任何气泡;

      BUBBLE_CONTROL>0 时,插入 **BUBBLE_CONTROL **个气泡;

      BUBBLE_CONTROL<0 时,每次插入随机的 0~(-BUBBLE_CONTROL) 个气泡;

      在不同 NEAR 值和 BUBBLE_CONTROL 值下,本库已经经过了几百张照片的结果对比验证,充分保证无bug;

      7、福利:工程代码的获取

      福利:工程代码的获取

      代码太大,无法邮箱发送,以某度网盘链接方式发送,

      资料获取方式:私,或者文章末尾的V名片。

      网盘资料如下:

      FPGA实现JPEG-LS图像压缩,有损无损可配置,提供工程源码和技术支持,在这里插入图片描述,第15张

      FPGA实现JPEG-LS图像压缩,有损无损可配置,提供工程源码和技术支持,在这里插入图片描述,第16张

网友评论

搜索
最新文章
热门文章
热门标签
 
 梦见朋友结婚什么预兆  梦见牙齿掉光了是什么意思  梦见失火是什么意思