目录

  • 1、前言
  • 2、我已有的视频图像编解码方案
  • 3、png图片解码理论
  • 4、png图片解码性能介绍
  • 5、png图片解码器时序介绍
    • 输入码流
    • 输出图像信息和像素
  • 6、png图片解码器设计详解
  • 7、工程源码和仿真
    • 工程代码架构
    • 仿真流程
  • 8、输出RGB图像验证
  • 9、福利:工程代码的获取

1、前言

png 是仅次于jpg的第二常见的图象压缩格式。png支持透明通道(A通道),支持无损压缩,支持索引RGB(基于调色板的有损压缩)。在色彩丰富的数码照片中,png只能获得1~4倍的压缩比。在人工合成图(例如平面设计)中,png能获得10倍以上的压缩比。

本设计使用system verilog语言设计了一个png图片解码器,输入数据为8位的流式数据,输出数据为解码后的32位数据,其中高24位为RGB数据,低8位为透明度数据,实用性和灵活性很高;一并提供了加速器的仿真源文件,可通过vivado或其他软件进行仿真,文章后面有详细的仿真教程;

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

2、我已有的视频图像编解码方案

我这里目前已有的视频图像编解码方案如下:
1:FPGA实现H264视频解码方案,工程源码和设计说明参考链接:点击直接前往
2:FPGA实现MPEG2视频压缩方案,工程源码和设计说明参考链接:点击直接前往
3:FPGA实现JPEG图像解码方案,工程源码和设计说明参考链接:点击直接前往
4:FPGA实现JPEG-LS图像压缩方案,工程源码和设计说明参考链接:点击直接前往
5:FPGA实现png图片解码方案,即本文。。。

3、png图片解码理论

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

4、png图片解码性能介绍

1:基于FPGA的流式的 png 图象解码器,输入 png 码流,输出原始像素;
2:支持图像宽度<4000,高度不限;
3:支持所有颜色类型:灰度、灰度+A、RGB、索引RGB、RGB+A;
4:仅支持8bit深度(大多数 png 图像都是8bit深度);
5:资源消耗少,首先看看在Xilinx Artix-7 xc7a35tcsg324-2 上综合和实现的资源消耗:

6:解码延时低
在 Xilinx Artix-7 xc7a35tcsg324-2 上部署 png图片解码器,时钟频率= 50MHz (正好时序收敛)。根据仿真时每个图像消耗的时钟周期数,可以算出压缩图像时的性能,举例如下:

上表中的测试图片我会在工程文件中一并给出,感兴趣的也可以重新测试一遍延时。。。

5、png图片解码器时序介绍

首先看看png图片解码器顶层接口:

输入码流

png图片解码器的使用方法很简单,以 我给出的测试图片文件夹test_image/img01.png 这张图像为例,如下时序图,在输入一张图象的码流前,先要令 istart 上产生一个高电平脉冲(宽度至少为一个时钟周期),然后通过 ivalid 和 ibyte 信号来输入码流(这张图象的 png 码流有 98 字节,这 98 字节都要逐一输入给 png图片解码器),其中 ivalid 和 iready 构成了握手信号: ivalid=1 时说明外部想发送一个字节给png图片解码器。iready=1 时说明png图片解码器已经准备好接收一个字节。只有 ivalid 和 iready 同时=1 时握手才成功,ibyte 才被成功的输入png图片解码器中。

输出图像信息和像素

在输入码流的同时,这张图象的解压结果(也就是图像基本信息和原始像素)会从模块中输出,如下图,在图象的像素输出前,ostart 信号会出现一个时钟周期的高电平脉冲,同时 colortype, width, height 会有效。其中:
width, height 分别是图象的宽度和高度;
colortype 是 png 图像的颜色类型,含义如下:

然后,ovalid=1 代表该时钟周期有一个像素输出,该像素的 R,G,B,A 通道会分别出现在opixelr,opixelg,opixelb,opixela 信号上。

6、png图片解码器设计详解

png图片解码器原理框图如下:

其中顶层的数据输入输出如下:

具体设计的代码层级讲解这里不多说,要把代码讲清楚写几本书也未必能说清楚,还是拿到代码去仔细品味吧。。。

7、工程源码和仿真

开发板FPGA型号:Xilinx xc7k325tffg676-2;
开发环境:Vivado2019.1;
输入:14张png图片;
输出:txt文件;
输出显示:我用的Matlab读取txt显示图片;
运行:Vivado在线仿真;

工程代码架构

工程代码架构如下:

仿真流程

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

第二步:
点击开始仿真:

该仿真需要运行30分钟;

仿真的输入我准备了共14张png图片,分辨率不一样,基本可以完美的模拟绝大多数类型的png图片了,输入图片文件夹位置如下:

经过漫长的仿真后会结束,并跑完波形如下:

此时也生成了对应的14个txt文件,位置如下:

以out14.txt为例,打开文件:

8、输出RGB图像验证

使用Matlab将输出的txt文件转为图片显示,再和源png图片做对比,当然,还可以用Python等验证,方法自己喜欢就好。。。
以out14.txt为例,打开out14.txt,并去掉首行字符,如下:

另存为out14_matlab.txt,位置如下:

将此文件复制到Matlab源码文件夹下,运行如下Matlab源码即可显示输出RGB图像;Matlab源码如下:

clear;clear all;clc;
col = 1920;
row = 1080;
n   = 3;    image_sim_pass = uint8(zeros(row,col,n));
fid = fopen('out14_matlab.txt','r');
for x = 1:rowfor y = 1:colRGB = fscanf(fid,'%s',1);image_sim_pass(x,y,1) = uint8(hex2dec(RGB(1:2)));image_sim_pass(x,y,2) = uint8(hex2dec(RGB(3:4)));image_sim_pass(x,y,3) = uint8(hex2dec(RGB(5:6)));              end
end
fclose(fid);
imshow(image_sim_pass),title('png解码后的RGB图片');
imwrite(image_sim_pass,'img14_simout.jpg');

打开源png图片和Matlab输出的解码后的RGB图做对比如下:

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

福利:工程代码的获取
代码太大,无法邮箱发送,以某度网盘链接方式发送,
资料获取方式:私,或者文章末尾的V名片。
网盘资料如下:

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

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

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

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

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

  3. FPGA实现模拟视频BT656解码 TW2867四路PAL采集拼接显示 提供工程源码和技术支持

    目录 1.前言 2.模拟视频概述 3.模拟视频颜色空间 4.逐行与隔行 5.BT656数据与解码 BT656数据格式 BT656数据解码 6.TW2867芯片解读与配置 TW2867芯片解读 TW28 ...

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

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

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

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

  6. FPGA基于GS2971/GS2972实现SDI视频收发 提供工程源码和技术支持

    目录 1.前言 2.我目前已有的SDI编解码方案 3.GS2971/GS2972芯片解读 GS2971解读 GS2972解读 4.详细设计方案 5.vivado工程1解读 硬件逻辑工程 软件SDK工程 ...

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

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

  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. c语言基础 验证ascii 码表
  2. [Google Guava] 7-原生类型
  3. 浙江绿盟科技2011.10.14校园招聘会笔试题
  4. php手机电子相册,免费电子相册制作软件 手机电子相册制作软件
  5. GROOVY简单语法实习
  6. 腾讯、爱奇艺修改超前点播规则:不再是支付额外50元看6集
  7. php 输出可以设置格式文件,PHP实现的文件直接输出下载
  8. Java系统日志管理
  9. think in java学习笔记
  10. 6、域渗透中查询域用户对域成员机器关系
  11. STP怎么选根桥和根端口
  12. 习题整理——二叉树NOI1758、UVA679、UVA122
  13. 关于scene understanding场景理解概念的理解
  14. 秋色园QBlog技术原理解析:性能优化篇:access的并发极限及超级分库分散并发方案(十六)...
  15. 一个自学前端的4年工作总结【三十而立,拒绝躺平】
  16. python编程从入门到实践(入门)
  17. 树莓派usb摄像头网络监控(定时拍照+网络存储)
  18. js系统5秒后自动返回
  19. 雅马哈与上位机TCP通讯
  20. linux测试服务器上传速度和下载速度

热门文章

  1. 回到未来:Smalltalk 编程系统
  2. git命令——将本地文件上传到远程厂库步骤
  3. 税务会计与税收筹划课后习题答案
  4. oss取视频封面 以及图片缩略图
  5. 武汉大学 gps 计算机 陈冰,武汉大学人文社会科学研究院
  6. J2EE开发的环境变量配置
  7. 给予有效的360度反馈的5个提示
  8. 360 度评估的优缺点
  9. 一篇万字博文带你入坑爬虫这条不归路 【万字图文】
  10. 【保研加分项】本年度最全大学生竞赛汇总