目录

  • 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图像压缩加速器及其仿真的设计方案,工程代码可综合编译上板调试,但目前只做到了仿真层面,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做项目开发,可应用于医疗、军工等行业的数字成像和图像压缩领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;

2、JPEG-LS图像压缩理论

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

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

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

35MHz 下,图像压缩的性能为 35 Mpixel/s ,对 1920x1080 图像的压缩帧率是 16.8fps;
理论上支持任意分辨率图片的压缩;

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

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

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

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

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

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图片;

工程代码架构如下:

仿真流程为:
第一步:
添加源码并开启行为仿真:

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

解决办法:在Tcl中输入以下指令并回车:
set_property display_limit 134217728 [current_wave_config]

第二步:
点击开始仿真:

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

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

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

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

输入输出的对比:
输入的.pgm 格式的未压缩图像我在Win10系统中可以直接打开;
输出的压缩后的.jls图片我在Win10系统中不能打开,可以使用下面某网站打开:
某网站:点击前往

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

另外,你还可以修改一些仿真参数来进行别的玩儿法:
修改 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图像压缩,有损无损可配置,提供工程源码和技术支持相关推荐

  1. FPGA解码4line MIPI视频 IMX291/IMX290摄像头采集 提供工程源码和技术支持

    目录 1.前言 2.Xilinx官方主推的MIPI解码方案 3.我已有的MIPI解码方案 4.纯Vhdl代码解码MIPI 5.vivado工程介绍 6.上板调试验证 7.福利:工程代码的获取 1.前言 ...

  2. FPGA驱动silicon9011和silicon9134完成HDMI收发,提供工程源码和技术支持

    目录 1.HDMI输入输出设计框架 2.silicon9011/9013芯片详解及配置 3.silicon9134芯片详解及配置 4.FPGA工程介绍 5.上板调试验证 6.福利:工程源码获取 1.H ...

  3. FPGA实现MPEG2视频压缩 提供工程源码和技术支持

    1.前言 MJPEG.MPEG2.MPEG4.H264 是流行且兼容性很高的 4 种视频编码格式.其中 MJPEG 对每帧独立进行 JPEG 图象压缩,而不利用帧间相关性,因此压缩效果较差. MPEG ...

  4. FPGA硬件png图片解码器,支持所有颜色类型解码,提供工程源码和技术支持

    目录 1.前言 2.我已有的视频图像编解码方案 3.png图片解码理论 4.png图片解码性能介绍 5.png图片解码器时序介绍 输入码流 输出图像信息和像素 6.png图片解码器设计详解 7.工程源 ...

  5. FPGA纯Verilog实现任意尺寸图像缩放,串口指令控制切换,贴近真实项目,提供工程源码和技术支持

    目录 1.前言 2.目前主流的FPGA图像缩放方案 3.本方案的优越性 4.详细设计方案 5.vivado工程详解 6.上板调试验证并演示 7.福利:工程源码获取 1.前言 代码使用纯verilog实 ...

  6. FPGA实现CSI-2 解码MIPI视频 2line 720P分辨率 OV5647采集 提供工程源码和技术支持

    目录 1.前言 2.Xilinx官方主推的MIPI解码方案 3.纯Vhdl方案解码MIPI 4.vivado工程介绍 5.上板调试验证 6.福利:工程代码的获取 1.前言 FPGA图像采集领域目前协议 ...

  7. FPGA使用GTX实现SFP光纤收发SDI视频 全网首创略显高端 提供工程源码和技术支持

    目录 1.前言 2.设计思路和框架 3.vivado工程详解 4.上板调试验证并演示 5.福利:工程代码的获取 1.前言 FPGA实现SDI视频编解码目前有两种方案: 一是使用专用编解码芯片,比如典型 ...

  8. FPGA基于SFP光口实现1G千兆网UDP通信 1G/2.5G Ethernet PCS/PMA or SGMII替代网络PHY芯片 提供工程源码和技术支持

    目录 1.前言 2.我这里已有的UDP方案 3.详细设计方案 4.vivado工程详解 5.上板调试验证并演示 6.福利:工程代码的获取 1.前言 目前网上的fpga实现udp基本生态如下: 1:ve ...

  9. FPGA基于SFP光口实现10G万兆网UDP通信 10G Ethernet Subsystem替代网络PHY芯片 提供工程源码和技术支持

    目录 1.前言 2.我这里已有的UDP方案 3.详细设计方案 4.vivado工程详解 5.上板调试验证并演示 6.福利:工程代码的获取 1.前言 目前网上的fpga实现udp基本生态如下: 1:ve ...

最新文章

  1. 【组队学习】【32期】李宏毅机器学习(含深度学习)
  2. 非常震撼!微软 Win 10X 系统的深度体验
  3. 在java中必须要有main吗_在一个Java应用程序中main方法必须被说明为_____。
  4. python对excel某一列去重-python中怎么对dataframe列去重
  5. Git之常见零碎问题的原因分析和解决方案
  6. ADSL断流问题分析
  7. 英特尔拥抱开源,岂能没有杀手锏?
  8. 高维网络(dp+容斥?)
  9. zz 传苹果平板电脑的UI界面将具备“快速学习”功能
  10. spss无法连接到本地计算机,有关IBM SPSS Statistics无法打开的几个原因,附带解决方法...
  11. 我为什么不再推荐 RxJava
  12. 95后频频离职,是员工本人问题?
  13. 二进制,八进制,十六进制,十进制之间的换算
  14. 西门子s7-1200博图v16灌装机PLC程序+西门子KTP1200触摸屏程序,设备上已使用的程序
  15. 建站神器:使用Hexo+Kaze+Gitee 自建博客
  16. 电信无限流量卡为什么无服务器,为什么移动、联通、电信4G无限流量卡都必须限速,怎么回事?...
  17. 玩转Redis-HyperLogLog统计微博日活月活
  18. [bzoj4084][Sdoi2015]双旋转字符串_hash
  19. Python数据结构之二——tuple(元组)
  20. gradle的依赖方式优化

热门文章

  1. GNS3导入c7200路由器
  2. 【软件工具篇01】如何用思维导图构建自己的知识体系
  3. 小鱼的航程(两种解决方法)
  4. Jenkins 部署项目出现 Failed to connect to repository : Command git ls-remote -h http://gitlab. 128
  5. CSDN之每日IT冷知识答案大全
  6. 关于Twinmotion可视化渲染软件初识
  7. win10卸载vivado
  8. 使用ElementUi的tabs切换组件时下拉选择器出现破板情况
  9. How to Install Cinnamon Desktop on Ubuntu
  10. 关于微信聊天中的语音开发