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

news2025/1/11 23:34:42

目录

  • 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名片。
网盘资料如下:
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/436323.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

1 Go语言开发环境搭建详细教程【Go语言教程】

Go语言开发环境搭建【Win、Linux、Mac】 1 SDK下载 官网地址&#xff1a;golang.org,因为一些原因国内可能无法访问。可以使用下面第二个链接。国内地址访问&#xff1a;https://golang.google.cn/dl或者https://www.golangtc.com/download 根据自己操作系统版本&#xff0c;下…

30天学会《Streamlit》(9)

30天学会《Streamlit》是一项编码挑战&#xff0c;旨在帮助您开始构建Streamlit应用程序。特别是&#xff0c;您将能够&#xff1a; 为构建Streamlit应用程序设置编码环境 构建您的第一个Streamlit应用程序 了解用于Streamlit应用程序的所有很棒的输入/输出小部件 第9天 - …

超高精度PID控制器的特殊功能(4)——分程控制功能及其应用

摘要&#xff1a;分程控制作为一种典型的复杂控制方法之一&#xff0c;常用于聚合反应工艺、冷热循环浴、TEC半导体温度控制、动态平衡法的真空和压力控制等领域。为快速和便捷的使用分程控制&#xff0c;避免采用PLC时存在的控制精度差和使用门槛高等问题&#xff0c;本文介绍…

pyqt6+vtk

这里用PyQt6vtk9.2.6 pip install PyQt6 pyqt6-tools vtk这里拉了一个水平布局 然后水平布局中加入QWidget&#xff0c;object name改为vtkWidget 右键Promote Widgets Promoted class name: QVTKRenderWindowInteractor Header file: vtkmodules.qt.QVTKRenderWindowInterac…

文章改写神器在线-AI续写文章生成器

AI续写生成器 AI续写生成器是一种利用人工智能技术的创意工具&#xff0c;能够提高写作效率&#xff0c;为营销推广带来全新的可能性。无论你是写手、广告人员还是市场营销人员&#xff0c;这个工具都能够有效地解决你在写作中遇到的难题。 在内容创作行业中&#xff0c;原创…

Amazon Linux2部署安装Jenkins

先决条件 服务器配置要求 256 MB of RAM 1 GB of drive space (although 10 GB is a recommended minimum if running Jenkins as a Docker container) 需要部署安装JDK环境部署安装的Jenkins版本为Version 2.400 部署安装JDK 1. 下载JDK软件包 wget https://corretto.aws/…

Altium Designer借助嘉立创添加PCB封装和3D模型

目录 引言打开立创专业版EDA&#xff0c;建立项目从立创商城找到器件编码添加PCB封装导出和修改3D封装 引言 由于使用Altium Designer的频率并不是特别高&#xff0c;所以每一次使用总是得东跌西撞的才回忆起一些使用步骤。因此&#xff0c;想在这里记录一下Altium Designer借…

【mysql】binlog日志

目录 1.1 基本说明1.2 binlog日志格式1.3 binlog日志查看1.4 binlog日志删除1.5 binlog操作示例 1.1 基本说明 1.全称binary log&#xff0c;二进制日志 2.记录了所有的DDL语句&#xff08;Data Definition Language数据定义语言&#xff09;和DML语句&#xff08;Data Manipul…

Java多线程中sleep()方法和wait()方法的区别

目录 具体而言 &#xff0c;sleep&#xff08;&#xff09;方法与wait&#xff08;&#xff09;方法的区别主要表现在以下几个方面&#xff1a; 引申&#xff1a;sleep&#xff08;&#xff09;方法和yield&#xff08;&#xff09;方法有什么区别&#xff1f; 常见面试题&a…

如何衡量算法的效率?时间复杂度空间复杂度

本篇博客会讲解如何衡量一个算法的效率。衡量算法的效率&#xff0c;主要有2个维度&#xff0c;分别是&#xff1a;时间复杂度和空间复杂度。 时间复杂度用来衡量算法的时间效率。时间复杂度越低&#xff0c;算法的耗时越短&#xff0c;效率则越高。空间复杂度用来衡量算法的空…

Space Cloud updated Crack

Space Cloud updated Crack Space Git Flow-对于实践连续发布周期的开发团队来说&#xff0c;在协调团队成员、建立流程和集成多个工具时&#xff0c;建立交付流可能需要付出巨大努力。为了更容易做到这一点&#xff0c;引入了JetBrains Space Git流&#xff0c;这是一个完整的…

同一热卖商品的高并发写难题 - Lua脚本扣减库存方案

目录 一、Mysql高并发写时的行锁难题 二、Redis的相关命令 1. WATCH命令 2. EVAL与EVALSHA命令 三、SpringBoot执行Lua脚本代码示例 1. 依赖包 2. Lua脚本sku.lua 3. 加载Lua脚本 4. 执行Lua脚本 四、参考资料 一、Mysql高并发写时的行锁难题 通常来说&#xff0c;秒…

百度大模型ERNIE3.0

大模型对比 文心全景图 ERNIE 3.0

《Java8实战》第9章 重构、测试和调试

9.1 为改善可读性和灵活性重构代码 Lambda 表达式可以帮助我们用更紧凑的方式描述程序的行为。 9.1.1 改善代码的可读性 可读性非常主观&#xff0c;但是通俗的理解就是“别人理解这段代码的难易程度”。改善可读性意味着你要确保你的代码能非常容易地被包括自己在内的所有…

【Java|基础篇】方法的定义使用、重载以及递归

文章目录 1.什么是方法2.方法的定义和使用返回值类型形参与实参方法执行过程 3.⭐方法的重载4.递归5. 总结 1.什么是方法 方法就是组织好的,可重复使用的具有某种功能的特定代码块 (类似于函数) 在我们平时写代码时,如果遇到会经常使用的一些功能相同的代码时,我们就可以把这段…

在线考试系统学员答题批改日志,实战练习

一、环境要求 sandbox-hdp 2.6.4 或同等版本自建的HadoopHiveSparkHBase 开发环境。 二、数据描述 这是一份来自于某在线考试系统的学员答题批改日志&#xff0c;日志中记录了日志生成时间,题目难度系数&#xff0c;题目所属的知识点 ID&#xff0c;做题的学生 ID&#xff0…

Oracle的学习心得和知识总结(二十一)|Oracle数据库可插拔数据库PDB的创建及删除

目录结构 注&#xff1a;提前言明 本文借鉴了以下博主、书籍或网站的内容&#xff0c;其列表如下&#xff1a; 1、参考书籍&#xff1a;《Oracle Database SQL Language Reference》 2、参考书籍&#xff1a;《PostgreSQL中文手册》 3、EDB Postgres Advanced Server User Gui…

华为OD机试(Java),5键键盘的输出

一、题目描述 有一个特殊的5键键盘&#xff0c;上面有a&#xff0c;ctrl-c&#xff0c;ctrl-x&#xff0c;ctrl-v&#xff0c;ctrl-a五个键。 a键在屏幕上输出一个字母a&#xff1b;ctrl-c将当前选择的字母复制到剪贴板&#xff1b;ctrl-x将当前选择的字母复制到剪贴板&#…

极氪要上市,吉利“基因改造”成功

文|智能相对论 作者| 落笔 当越来越多的国产新锐品牌入局新能源汽车市场&#xff0c;晚半拍的极氪却用较短的时间实现了主观逆袭。据统计&#xff0c;极氪001自问世以来便接连斩获消费者欢心&#xff0c;2022年极氪001更是实现了全年交付71941台的战绩&#xff0c;且持续蝉联…