0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于MJPEG的压缩算法研究与实现

lhl545545 来源:电路城 作者:电路城 2020-10-07 11:38 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

1 系统硬件组成与网络架构

摄像机硬件核心采用三星公司推出的基于ARM9架构的S3C2440A芯片,该处理器主频达到400 MHz可以满足实时压缩,MJPEG视频流可以达到320×240分辨率25 fps的性能要求。外围搭配64 MB SDRAM、256 MB NAND Flash,网络功能由DM9000以太网MAC控制芯片负责,摄像头模块由USB控制器控制,系统供电由3片LM71117组成,分别输出3.3 V、1.8 V、1.25 V电压,辅助外围接口构成摄像机硬件结构。S3C2440A系统硬件框图如图1所示。

基于MJPEG的压缩算法研究与实现

图1 S3C2440A系统硬件框图

网络摄像机是互联网上的TCP/IP设备,系统网络拓扑图如图2所示。其中在家庭区域内根据安防的特点在大门走廊、客厅内、阳台区域分别布置摄像机,再由网线连接到路由器,配置路由器参数映射每个摄像机独立端口与IP地址,即完成Internet接入。远端由固定位置的PC机,移动位置的3G笔记本和随身携带的3G Android手机组成,PC机可以通过WEB浏览器访问与控制网络摄像机,Android手机通过客户端实现实时访问。

基于MJPEG的压缩算法研究与实现

图2 系统网络拓扑图

2 系统软件设计

2.1 网络摄像机软件设计

搭建摄像机需要Linux系统环境,首先移植Bootloader,对Linux 2.6.32内核进行裁剪,加载Linux UVC(USB video device class)驱动及相关驱动,将编译好的Linux系统镜像烧写到ARM板Nand Flash中,对Bootloader设置启动引导地址,即完成软件运行环境搭建[2]。

分析网络摄像机性能需求与拓展性,须满足下列条件:

◆ 视频监控实时性;

◆ 支持多客户端同时连接;

◆ 图像识别算法或预留接口;

◆ 功能模块化满足后期开发可扩展。

因此,采用多线程架构与互斥锁机制来保证实时性、模块化的思想设计代码结构。软件程序主流程如图3所示。

基于MJPEG的压缩算法研究与实现

图3 软件程序主流程

其中主要实现如下功能。

① 初始化Linux V4L2接口,必须按照V4L2标准结构初始化结构体,其中包括struct v4l2_capability cap;struct v4l2_format fmt;struct v4l2_buffer buf;struct v4l2_requestbuffers rb; struct v4l2_streamparm setfps。此外将视频设备名、视频宽度、视频高度、帧率、视频格式和抓取方法传递给函数init_videoIn(struct vdIn *vd, char *device, int width, int height, int fps, int format, int grabmethod)实现初始化。值得注意的是众多USB camera并不支持JPEG格式视频流直接抓取,针对YUYV格式抓取却有广泛支持。后期进行图像识别算法操作时直接分析YUYV原始图像数据,将节省JPEG压缩数据转换为原始图像数据的大量运算开销,因此采用YUYV抓取模式。

② 创建核心图像处理线程。在该线程内实现:抓取功能。

◆ UVC设备单帧抓取,uvcGrab(struct vdIn *vd)函数实现单帧YUYV格式的原始图像拷贝到内存,采用高效的mmap内存映射方法读取;

◆ JPEG核心算法实现,JPEG压缩算法占用大量CPU时间,下一小节将详细讨论。

③ 创建套接字接口。为实现多用户同时连接网络摄像机,必须采用socket服务线程,每当有新用户连接同时产生一个新线程与之对应,实现多用户端同步监控。

④ 搭建基于Web浏览器访问方式的web主页。嵌入式设备资源有限,轻量级的Web Server主要有:Boa、Httpd、Thttpd等。本设计选用开源的Boa、交叉编译Boa源码配置boa.conf文件,配置系统etc自启动shell加入Boa程序,将编写HTML页面文件放入系统中对应的www目录后即可正常工作。

2.2 MJPEG压缩算法研究与实现

MJPEG(Motion Joint Photographic Experts Group)视频编码格式,把运动的视频序列作为连续的静止图像来处理,这种压缩方式单独完整地压缩每一帧,编辑过程中可随机存储每一帧,可进行精确到帧的编辑。

MJPEG单帧压缩算法为JPEG(Joint Photographic Experts Group)。

人眼视觉生理特性决定眼睛对构成图像的不同频率成分具有不同的敏感度。JPEG压缩是有损压缩[3],但损失的部分是人类视觉不容易察觉到的部分,利用眼睛对色彩域中的高频信息部分不敏感的特点,节省大量需要处理的数据信息。一帧原始图像数据对其进行JPEG算法编码过程分两大部分:

① 空间冗余度,去除视觉上的多余信息;

② 结构(静态)冗余度,去除数据本身的多余信息。

JPEG编码中主要涉及包括:DCT、zigzag编码、量化、RLE编码、范式Huffman编码、DC(直流分量)的编码。JPEG编码流程如图4所示。

基于MJPEG的压缩算法研究与实现

图4 JPEG编码流程

DCT(Discrete Cosine Transform)变换,又称离散余弦变换是可逆的、离散的正交变换。它将原始图像色彩空间域转换为频谱域。由于相邻两点像素色彩很多是接近的,压缩这些不需要的数据必须利用图像信号的频谱特性。JPEG压缩原理的理论依据是图像信号频谱线大都分布在0~6 MHz范围内,而且一幅图像内大多数为低频频谱线,而高频的谱线只占图像比例很低的图像边缘或者细微纹理细节的信号时才出现。根据这一特性,在做数字图像处理时对包含信息量大的低频谱区域分配较多的比特数,相反的对于包含信息量低的高频谱区域分配较少的比特数,达到图像压缩的目的,而图像质量并没有肉眼可察觉的降低。除了DCT变换,常用的变化算法还有:WalshHadamard沃尔什哈达玛变换、哈尔变换、傅氏变换等。

DCT变换公式为:

时C(u)=1,C(v)=1.f(i,j)经过DCT变换之后,F(0,0)是直流系数,其他参数时为交流系数。经过DCT变换后一幅图像的DCT系数块集中在8×8矩阵的左上方,这里直流DC系数幅度最大,这一矩阵区域集中了图像的大部分低频频谱分量,离矩阵左上角越远的高频频谱几乎不含图像信息。变换过程本身虽然并不产生压缩作用,但是变换后的频率系数却非常有利于码率压缩。

量化是对DCT系数的一个优化过程,利用了肉眼的高频不敏感特性对数据进行大幅压缩。整个过程是简易的把频率域的每个成份除以对应的常数,并对结果四舍五入取整,整个流程的目的是减少非零的系数以及增加零值系数数目。量化是有损运算,是图像质量下降的主要因素。对于人眼对亮度与色差的敏感性不一致,分别使用亮度量化表与色度量化表。对量化后的数据采用zigzag蛇形编码,这是因为交流分量中含有大量的零值,zigzag编码可以产生更多连续的零值,对下一步使用行程编码非常有利。

行程编码(Run Length Coding)是一种根据相同数据连续重复多次的情况简化表示的算法。例如,5555333333999按照行程编码表示为(5,4)(3,6)(9,3)可以对数据,尤其是大量的零值压缩数据长度。

编码后的数据还须通过Huffman编码来压缩,Huffman编码的最大特点是使出现频率较高的数字小于8位,而出现频率低的数字大于8位,这使得数据大幅压缩。

到此数据的压缩过程结束,对压缩后的数据按照JPEG文件格式要求进行保存,加上文件开始标记Start Of Image=FFD8,文件结束标记End Of Image = FFD9,量化表标记Define Quantization Table=FFDB,霍夫曼编码表标记Ddfine Huffman Table=FFC4,帧开始标记Start Of Frame=FFC0等标记,再加上图片识别信息字节标记就最终形成完整的可用于传输或存储的JPEG帧图像,通过套接字接口不间断地发送JPEG图像即形成MJPEG视频流。

为提高CPU效率,减少进程间切换产生的开销,将压缩算法函数集成到单一线程里。JPEG核心压缩编码函数MCUcode实现如下:

uint8_t *MCUcode(S_JPEG_ENCODER_STRUCTURE * enc,uint32_t image_format, uint8_t * output_ptr) {

DCT(enc﹥Y1);//DCT离散余弦变换函数

quantization(enc,enc﹥Y1, enc﹥ILqt);//量化函数,亮度量化表量化并按照zigzag排列存储

output_ptr = huffman(enc, COMPONENT_Y, output_ptr);//霍夫曼编码函数

DCT(enc﹥Y2)……

DCT(enc﹥Y3)……

DCT(enc﹥Y4)……

DCT(enc﹥CB);//DCT离散余弦变换函数

quantization(enc,enc﹥CB, enc﹥ICqt);//量化函数,色度量化表量化
责任编辑:pj

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    20148

    浏览量

    247155
  • 芯片
    +关注

    关注

    462

    文章

    53535

    浏览量

    459146
  • 路由器
    +关注

    关注

    22

    文章

    3890

    浏览量

    118877
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    应用于暂态波形存储的数据压缩算法需要考虑哪些因素?

    应用于暂态波形存储的数据压缩算法,需围绕 暂态波形特性 (突变性、关键特征依赖性)、 工业场景需求 (实时性、硬件限制)及 数据应用价值 (故障溯源、合规性)综合考量,核心需关注以下六大维度: 一
    的头像 发表于 11-05 15:02 148次阅读

    SM4算法实现分享(一)算法原理

    ,Xi、Yi、rki为字,i=0,1,2,…,31。则本算法的加密实现为: 本算法的解密实现与加密实现结构是相同的,不同的只是提供的轮
    发表于 10-30 08:10

    复杂的软件算法硬件IP核的实现

    具体方法与步骤 通过 C 语言实现软件算法,并验证了算法的有效性以后,就可以进行算法的 HDL 转化工作了。通过使用 Altium Designer 的 CHC 编译器(C to H
    发表于 10-30 07:02

    高动态响应云台电机驱动电路设计及控制算法实现

    高动态响应云台马达驱动方案电路设计及控制算法实现是当前精密控制领域的重要研究方向,尤其在无人机、光电跟踪、机器人等应用场景中,对云台的快速响应能力和稳定精度提出了更高要求。本文将围绕驱动电路硬件设计和控制
    的头像 发表于 08-14 17:59 833次阅读

    利用自压缩实现大型语言模型高效缩减

    随着语言模型规模日益庞大,设备端推理变得越来越缓慢且耗能巨大。一个直接且效果出人意料的解决方案是剪除那些对任务贡献甚微的完整通道(channel)。我们早期的研究提出了一种训练阶段的方法——自压缩
    的头像 发表于 07-28 09:36 365次阅读
    利用自<b class='flag-5'>压缩</b><b class='flag-5'>实现</b>大型语言模型高效缩减

    低内存场景下的高效压缩利器:FastLZ压缩库应用实践指南

    在资源受限环境中,数据压缩既要追求速度又要节省内存。本文聚焦FastLZ压缩库,深入探讨其在低内存场景下的应用实践,通过解析其核心算法与优化策略,带您掌握如何利用该库实现快速
    的头像 发表于 07-22 15:13 209次阅读
    低内存场景下的高效<b class='flag-5'>压缩</b>利器:FastLZ<b class='flag-5'>压缩</b>库应用实践指南

    基于FPGA实现FOC算法之PWM模块设计

    哈喽,大家好,从今天开始正式带领大家从零到一,在FPGA平台上实现FOC算法,整个算法的框架如下图所示,如果大家对算法的原理不是特别清楚的话,可以先去百度上学习一下,本教程着重介绍
    的头像 发表于 07-17 15:21 3130次阅读
    基于FPGA<b class='flag-5'>实现</b>FOC<b class='flag-5'>算法</b>之PWM模块设计

    山西大学实现一种压缩激光新型光源

    图1.压缩激光原理示意图 近日,山西大学光电研究所利用压缩库增强光学参量耦合新方案,实验实现了一种压缩激光新型光源。相关
    的头像 发表于 07-17 09:44 303次阅读
    山西大学<b class='flag-5'>实现</b>一种<b class='flag-5'>压缩</b>激光新型光源

    基于FPGA的压缩算法加速实现

    本设计中,计划实现对文件的压缩及解压,同时优化压缩中所涉及的信号处理和计算密集型功能,实现对其的加速处理。本设计的最终目标是证明在充分并行化的硬件体系结构 FPGA 上
    的头像 发表于 07-10 11:09 2085次阅读
    基于FPGA的<b class='flag-5'>压缩</b><b class='flag-5'>算法</b>加速<b class='flag-5'>实现</b>

    Aigtek电压放大器基于伺服系统的激光控制研究研究

    但可以实现对光学系统的高精度调节和稳定,从而保证压缩态光场的制备精度和稳定性。而且,相位锁定技术可以对光学系统进行实时调节和控制,从而实现压缩态光场
    的头像 发表于 03-20 11:56 434次阅读
    Aigtek电压放大器基于伺服系统的激光控制<b class='flag-5'>研究</b>的<b class='flag-5'>研究</b>

    智能电动轮椅控制系统的研究与设计

    本文介绍了智能轮椅、自动避障算法以及电机调速系统的国内外发展现状,并 研究了用户对智能轮椅的实际需求,分析了国内应用市场上智能轮椅存在的不足, 设计了一款具有自动避障和坡度智能制动功能的智能轮椅
    发表于 03-07 15:17

    FOC 算法实现永磁同步电机调整指南

    本文档介绍了使用 FOC 算法实现永磁同步电机 (Permanent Magnet SynchronousMotor,PMSM)调整所需的步骤和设置,该算法如 AN1078《PMSM 电机的无传感器
    发表于 03-03 01:53

    PID控制算法的C语言实现:PID算法原理

    在工业应用中 PID 及其衍生算法是应用最广泛的算法之一,是当之无愧的万能算法,如果能够熟练掌握 PID 算法的设计与实现过程,对于一般的研
    发表于 02-26 15:24

    嵌入式系统中的代码优化与压缩技术

    32位指令转换为16位Thumb指令,实现代码的初步压缩。 数据压缩:对嵌入式系统中的常量数据、字符串等进行压缩。例如,采用哈夫曼编码对经常出现的字符串进行编码,用较短的编码表示频繁
    发表于 02-26 15:00

    EE-257:面向Blackfin处理器的引导压缩/解压缩算法

    电子发烧友网站提供《EE-257:面向Blackfin处理器的引导压缩/解压缩算法.pdf》资料免费下载
    发表于 01-07 13:56 0次下载
    EE-257:面向Blackfin处理器的引导<b class='flag-5'>压缩</b>/解<b class='flag-5'>压缩</b><b class='flag-5'>算法</b>