NEFU数字图像处理(5)图像压缩编码

一、概述

1.1简介

图像压缩编码的过程是在图像存储或传输之前进行,然后再由压缩后的图像数据(编码数据)恢复出原始图像或者是原始图像的近似图像·

  • 无损压缩:在压缩过程中没有信息损失,可由编码数据完全恢复出原始图像·
  • 有损压缩:在压缩过程中有信息损失,由编码数据恢复出的图像与原始图像之间有差别,即原始图像的近似图像。有损压缩能取得较高的压缩率(压缩比)

 

 1.2相关概念

信息相关

在绝大多数图像的像素之间,各像素行和帧之间存在着较强的相关性

每个像素的灰度值(或颜色值)总是和其周围的其它像素的灰度值(或颜色值)存在某种关系,应用某种编码方法减少这些相关性就可实现图像压缩

 

冗余类型

从信息论的角度来看,压缩就是去掉信息中的冗余。即保留确定信息,去掉可推知的确定信息,用一种更接近信息本质的描述来代替原有的冗余描述。

在数字图像压缩中,三种基本的数据冗余类型:

  • 编码冗余
  • 像素间冗余
  • 视觉冗余
编码冗余
像素间冗余
视觉冗余

视觉冗余:人的眼睛对某些图像特征不敏感,这些特征信息可以不在图像数据中出
现。
人眼的分辨能力一般约64个灰度等级,而图像的量化常采用256个灰度等级。

 

视觉冗余的压缩是不可恢复的(不可逆),所以量化的结果导致了数据有损压缩

信源编码

图像压缩的目的是在满足一定的图像质量的条件下,用尽可能少的比特数来表示原图像,以减少图像的存储容量和提高图像的传输效率。

在信息论中,把这种通过减少冗余数据来实现数据压缩的过程称为信源编码。
根据解码后图像与原始图像的比较,图像编码的方法可以分成两大类:

  • 可逆编码
  • 不可逆编码

 

图像保真度准则

需要评价信息损失的测度,来描述由编码数据恢复出的图像相对于原始图像的偏离程度,这些测度称为图像保真度准则。
两类准则:客观保真度准则、主观保真度准则

 客观保真度准则

客观保真度准则通常是用原始图像与恢复出的图像之间的函数来表示信息的损失程度。

常用的客观保真度准则:

  • 均方根误差
  • 均方根信噪比

 

 

主观保真度准则

图像压缩编码系统的基本组成

编码效率

对图像进行压缩编码时,编码效率可有以下表现形式:

  • 平均码字长度,简称平均码长(R)
  • 压缩比(Cr)
  • 图像熵与平均码长之比(η)

 

 

压缩比越大,压缩效果越好

 举例

二、相关编码算法

无损压缩编码主要针对以下两种数据冗余:

  • 编码冗余
  • 像素间冗余

2.1哈夫曼编码

哈夫曼编码是一种变长编码(这种编码结构可以把最短的码字赋予出现概率最大的信源符号

 

哈夫曼编码算法步骤:

  • 统计出各个信源符号出现的概率(比如,对一幅图像进行灰度级概率统计),并对信源符号出现的概率从大到小排列;
  • 合并概率最小的两个信源符号,形成一个新符号。新符号的概率是这两个信源符号的概率之和·
  • 新符号的概率与剩余符号的概率形成一个新的概率集合,然后再对新的概率集合重新排列(从大到小)
  • 重复执行第2、3步,直到最后两个信源符号的概率之和是1为止。

举例

 

 

 

 结论

 

2.2香农-范诺编码

香农-范诺编码算法步骤:
 

 

二分香农-范诺编码

算法步骤

  • 首先统计出每个信源符号出现的概率,并将所有概率从大到小排序。
  • 从当前概率集合中选取某个位置将其分成两个子集合,尽量使两个子集的概率之和近似相等(即概率之和越接近越好),给前一个子集赋值为0,后一个子集赋值为1
  • 重复步骤2,直到各个子集中只剩下一个信源符号为止。
  • 每个信源符号所属的子集的值(0或1)依次串联起来,即可得到该信源符号的二分香农-范诺编码·

举例 

 

2.3算数编码

算术编码分析:
算术编码假设:对于一个独立信源来说,任一由信源符号组成的长度为N的序列的发生概率之和等于1。


根据信源符号序列的概率,把0,1区间划分为互不重叠的子区间,子区间的宽度恰好等于各符
号序列的概率,这样,、每个子区间内的任意一个实数都可以用来表示对应的符号。一串符号序列发生的概率越大,对应的子区间就越宽,,表达它所用的比特数就越少,因而相应的码字就越短。

 

举例

 

2.4行程编码

 利用空间冗余度压缩图像的方法,处理某些相同灰度级成片连续出现的图形
应用:二值图像
具有相同灰度级并且是连续的像素数目称为行程长度。

 

举例 

2.5LZW编码

将原始数据中的重复字符串建立一个字典(也称编码本),然后用该重复字符串在字典中的索引代替原始数据,从而达到压缩目的。


使用LZW压缩编码技术的文件格式包括有GIF、TIFF(标记图像文件格式)、PDF(可移植文件格式)等。

 

举例

 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iOS App Store上传项目报错 缺少隐私政策网址(URL)解决方法

​ 一、问题如下图所示: ​ 二、解决办法:使用Google浏览器(翻译成中文)直接打开该网址 https://www.freeprivacypolicy.com/free-privacy-policy-generator.php 按照要求填写APP信息,最后将生成的网址复制粘贴到隐…

【SOC基础】单片机学习案例汇总 Part2:蜂鸣器、数码管显示

📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨ 📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 📢:文章若有幸对你有帮助,可点赞 👍…

xilinx fpga ddr mig axi

硬件 参考: https://zhuanlan.zhihu.com/p/97491454 https://blog.csdn.net/qq_22222449/article/details/106492469 https://zhuanlan.zhihu.com/p/26327347 https://zhuanlan.zhihu.com/p/582524766 包括野火、正点原子的资料 一片内存是 1Gbit 128MByte 16bit …

【wp】2023鹏城杯初赛 Web web1(反序列化漏洞)

考点&#xff1a; 常规的PHP反序列化漏洞双写绕过waf 签到题 源码&#xff1a; <?php show_source(__FILE__); error_reporting(0); class Hacker{private $exp;private $cmd;public function __toString(){call_user_func(system, "cat /flag");} }class A {p…

Spring基础

文章目录 Spring基础IoC容器基础IoC理论第一个Spring程序Bean注册与配置依赖注入自动装配生命周期与继承工厂模式和工厂Bean注解开发 AOP面向切片配置实现AOP接口实现AOP注解实现AOP Spring基础 Spring是为了简化开发而生&#xff0c;它是轻量级的IoC和AOP的容器框架&#xff…

I/O多路转接之select

承接上文&#xff1a;I/O模型之非阻塞IO-CSDN博客 简介 select函数原型介绍使用 一个select简单的服务器的代码书写 select的缺点 初识select 系统提供select函数来实现多路复用输入/输出模型 select系统调用是用来让我们的程序监视多个文件描述符的状态变化的; 程序会停在s…

Vue3 实现 clipboard 复制功能

一个很小的交互功能&#xff0c;网上搜了一下有一个 vue3-clipboard 直接支持vue3&#xff0c;到github仓库看了下&#xff0c;原作者已经不维护这个项目了&#xff1a; 推荐使用 vueuse 自带的 useclipboard 功能&#xff0c;由 vue 团队维护&#xff0c;稳定性基本没问题 官…

数据结构构之顺序表

1.线性表 线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构&#xff0c;常见的线性表&#xff1a;顺序表、链表、栈、队列、字符串... 线性表在逻辑上是线性结构&#xff0c;也就说是连续的一条直线…

MySQL连接时出现Host ‘::1‘ is not allowed to connect to this MySQL server

报错原因 之前想着要提高一下连接速度&#xff0c;所以在my.ini中加入了&#xff1a;skip-name-resolve&#xff0c;当时的数据库root账号设置的登录权限是%&#xff0c;因此没有出现连接错误&#xff0c;这次因为是新建数据库&#xff0c;root账号的登录权限默认是localhost&…

园区网真实详细配置大全案例

实现要求&#xff1a; 1、只允许行政部电脑对全网telnet管理 2、所有dhcp都在核心 3、wifi用户只能上外网&#xff0c;不能访问局域网其它电脑 4、所有接入交换机上bpdu保护 5、只允许vlan 10-40上网 5、所有接入交换机开dhcp snoop 6、所有的交换机指定核心交换机为ntp时间服务…

解决Visual Studio Code 控制台中文乱码问题

C和CPP运行编码指定 "code-runner.executorMap": {"c": "cd $dir && gcc -fexec-charsetGBK $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt","cpp": "cd $dir && g -fexec-charsetGBK $…

LV.12 D16 轮询与中断 学习笔记

一、CPU与硬件的交互方式 轮询 CPU执行程序时不断地询问硬件是否需要其服务&#xff0c;若需要则给予其服务&#xff0c;若不需要一段时间后再次询问&#xff0c;周而复始 中断 CPU执行程序时若硬件需要其服务&#xff0c;对应的硬件给CPU发送中断信号&#xff0c…

AD教程(六)现有元件模型的调用

AD教程&#xff08;六&#xff09;现有元件模型的调用 导入现有原理图 Altium Schematic Document (.SchDoc) 直接拖入AD即可 直接用现有原理图生成原理图库 点击设计&#xff0c;选择生成原理图库&#xff0c;进入归类设置界面&#xff08;用原理图直接生成原理图库&#xf…

如何实现多租户系统

shigen日更文章的博客写手&#xff0c;擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长&#xff0c;分享认知&#xff0c;留住感动。 不知道为什么&#xff0c;最近老是有一些失眠&#xff0c;凌晨睡&#xff0c;两点半还在醒着。脑子里想着自己生…

Linux flock和fcntl函数详解

文章目录 flock函数描述返回值和错误码笔记 fcntl函数描述复制文件描述符文件描述标志文件状态标志 咨询锁强制锁管理信号租赁文件和目录变更通知改变管道容量 返回值错误备注遗留问题 flock函数 主要功能是在已打开的文件应用或者删除共享锁或者独占锁。sys/file.h声明了这个…

使用Postman工具做接口测试 —— 环境变量与请求参数格式!

引言 在上一篇笔记我们主要介绍了接口测试的基础知识与基本功能&#xff0c;本章主要介绍如何使用postman做接口测试。 配置环境变量和全局变量 环境变量和全局变量 环境管理中还可以点击“Global”添加全局变量&#xff0c;环境变量只有当选择了该环境时才生效&#xff0c;…

centos9 stream 下 rabbitmq高可用集群搭建及使用

RabbitMQ是一种常用的消息队列系统&#xff0c;可以快速搭建一个高可用的集群环境&#xff0c;以提高系统的弹性和可靠性。下面是搭建RabbitMQ集群的步骤&#xff1a; 基于centos9 stream系统 1. 安装Erlang和RabbitMQ 首先需要在所有节点上安装Erlang和RabbitMQ。建议使用官…

VueJs各个版本— 判断当前是开发、生产环境

VueJs各个版本— 判断当前是开发、生产环境 文章目录 VueJs各个版本— 判断当前是开发、生产环境vue项目分类VueCLI21&#xff0c;判断样例2&#xff0c;判断原理 Vue CLI 3 和 Vue CLI 41&#xff0c;判断样例2, 判断原理手动设置-json文件手动设置- .env 文件单个 .env 文件多…

SpringBoot-SpringCache缓存

文章目录 Spring Cache 介绍常用注解 Spring Cache 介绍 Spring Cache 是一个框架&#xff0c;实现了基于注解的缓存功能&#xff0c;只需要简单地加一个注解&#xff0c;就能实现缓存功能。 Spring Cache 提供了一层抽象&#xff0c;底层可以切换不同的缓存实现&#xff0c;…

shell脚本代码混淆

文章目录 起因安装 Bashfuscator安装BashfuscatorBashfuscator的使用 起因 很多时候我并不希望自己的shell脚本被别人看到&#xff0c;于是我在想有没有什么玩意可以把代码加密而又正常执行&#xff0c;于是我想到了代码混淆&#xff0c;简单来看一下&#xff1a; 现在我的目…