文章目录

  • 基础知识
    • 1、编码冗余
    • 2、空间冗余和时间冗余
    • 3、不相关的信息
    • 压缩准则及压缩过程
  • 基本的压缩方法
    • 霍夫曼编码
    • 算术编码
    • LZW编码
    • 预测编码
  • 数字图像水印

基础知识

什么是图像压缩?

数据压缩指的是对一定的信息量(发生概率的对数值),我们用少量的数据量来进行表示。其中,相同数量的信息可以用不同数量的数据表示。

从信息论的角度来看,描述信息源的数据是信息和数据冗余之和,包含不相关或重复信息的表示称之为冗余数据
数 据 冗 余 : R = 1 − 1 / C 数据冗余:R=1-1/C 数据冗余:R=1−1/C

压 缩 率 : C = b / b ′ 压缩率:C=b/b' 压缩率:C=b/b′

二维灰度阵列有三种主要类型的数据冗余:

  1. 编码冗余
  2. 空间和时间冗余
  3. 不相关信息

我们在对图像进行处理的时候,希望能用少量的数据表示定量的信息,因此就需要尽可能减少数据冗余,进行数据压缩。

1、编码冗余

编码冗余指在大多数灰度阵列中,用于表示灰度的8比特编码所包含的比特数要比表示该灰度所需要的比特数多。

建设一个离散随机变量表示图像的灰度,每个变量发生的概率为
p r ( r k ) = n k M N , k = 0 , 1 , 2 , ⋯ , L − 1 p_{r}\left(r_{k}\right)=\frac{n_{k}}{M N}, k=0,1,2, \cdots, L-1 pr​(rk​)=MNnk​​,k=0,1,2,⋯,L−1
则每个像素所需的平均比特数为:
L a v g = ∑ k = 0 L − 1 l ( r k ) p r ( r k ) L_{\mathrm{avg}}=\sum_{k=0}^{L-1} l\left(r_{k}\right) p_{r}\left(r_{k}\right) Lavg​=k=0∑L−1​l(rk​)pr​(rk​)
即给各个灰度级分配的码字的平均长度,可通过对用于表示每个灰度的比特数与该灰度出现的概率的乘积求和来得到。

等长编码:所有的带编码的信息都用同样长的编码表示

变长编码:因为带编码的事物出现的频率不一样,频繁出现的用短的编码,不频繁出现的用长的编码。变长编码可能使解码产生二义性。

例如:

在此例中,如果使用8比特定长编码表示4种可能的灰度,则编码的平均比特数是8比特,数据冗余是77.4%,采用变长编码时,平均比特数是1.81比特,压缩率减少,数据冗余变大。

当用自然二进码表示一幅图像的灰度时,编码冗余几乎总是存在,当对事件集合(例如灰度值)分配码时,如果不取全部事件概率的优势,就会出现编码冗余。

2、空间冗余和时间冗余

空间冗余(帧内预测)指大多数二维灰度阵列中,由于每个像素类似于或取决于相邻像素,所以一些像素的信息就被重复定义了,造成了冗余。

在静态图片中,规则物体和规则背景的表面的物理特性都有相关性,可根据某一像素的信息预测周围像素的信息,因此可进行数据压缩。

时间冗余(帧间预测)指在视频序列中,时间相关的像素的信息被重复定义,造成冗余。

在连续图像中,位于时间轴区间的连续画面,相邻帧或相邻场的图像中,在对应位置的像素之间,亮度和色度信息之间有极强的相关性,所以可根据当前帧的信息预测后一帧的信息,因此可进行数据压缩。

3、不相关的信息

不相关的信息指大多数二维灰度阵列中,一些被人类视觉系统忽略或与用途无关的信息,因为没有被利用,所以视为冗余。

压缩准则及压缩过程

1. 信息的度量

我们把某个信息出现的不确定性的大小定义为自信息(自信息同时表示这个信息所包含的信息量,也就是最大能够给予收信者的信息量),用这个信息出现的概率的对数的负值来表示:
I ( E ) = log ⁡ 1 P ( E ) = − log ⁡ P ( E ) I(E)=\log \frac{1}{P(E)}=-\log P(E) I(E)=logP(E)1​=−logP(E)
信息熵表示信源的平均不确定性的大小,定义为自信息的统计平均:
H = − ∑ j = 1 J P ( a j ) log ⁡ P ( a j ) H=-\sum_{j=1}^{J} P\left(a_{j}\right) \log P\left(a_{j}\right) H=−j=1∑J​P(aj​)logP(aj​)
香农第一定理(即无失真变长信源编码定理)是一个关于码长的极限定理,将原始信源符号转化为新的码符号,使码符号尽量服从等概分布,从而每个码符号所携带的信息量达到最大,进而可以用尽量少的码符号传输信源信息。

2. 保真度准则:

为了量化丢失的图像信息,我们引入客观保真度准则和主观保真度准则。

3. 图像压缩模型:

通信系统模型图:

图像压缩由两个不同的功能部分组成:编码器和解码器。

编码器进行压缩,解码器进行解压缩。

信源编码提高通信系统的有效性

信道编码提高通信系统的可靠性

通用图像压缩系统的功能方框图:

基本的压缩方法

本节中我们主要列出了霍夫曼编码、算术编码、LZW编码、预测编码。

霍夫曼编码

霍夫曼编码过程对一组符号产生最佳编码,其概率服从一次只能对一个符号进行编码的限制,是一种分组码。

编码思路:根据频率的不同使用变长编码,高频率用短编码,低频率用长编码。

二元霍夫曼编码不唯一:

每次对信源缩减时,概率最小的两个信源符号0和1是可以互换的,所以可得到不同的霍夫曼码;

对信源缩减时,如果两个概率最小的信源符号合并后的概率与其他信源符号的概率相同,则在缩减信源中进行概率排序的次序可以是任意的,因此可得到不同的霍夫曼码。

算术编码

霍夫曼编码虽然是个比较实用、高效的编码方法,但对于信源符号个数不多且概率分布比较均匀的信源,需要对较长的信源符号序列进行编码才能得到较高的编码效率,所以需要预先计算信源符号序列的概率分布。因此引出算术编码。

算术编码是一种非分组码,可以直接对输入的信源符号序列编码输出。

编码思路:给出一个区间,当消息中的符号数量增加时,用于表示消息的间隔会变小,而表示该间隔所需的信息单位的数量会变大,即消息的每个符号根据其出现的概率来减少该区间的大小。

LZW编码

霍夫曼码和算数码的编码效率已经非常高,而且实现也不是很困难,但在信源统计特性不可知时就需要用到自适应性能的通用编码方法,LZW就是一种高效的通用编码,是一种基于字典的编码方法。这种编码方法现在已成6为计算机文件压缩的标准算法。

编码思路:LZW编码使用的时定长编码,通常将几个值合并在一起使用一个编码来降低总长度,即将输入的变长模式(字符串)生成一张定长的编码编译表。

对于非平稳信源具有较好的处理效果;

对于平滑且噪声小的信源具有较高的压缩比,且压缩解压缩速度快;

对于数据流中连续重复出现的字节和字串,具有有很高的压缩比

常用于图像数据的压缩处理和文本程序等领域的数据压缩。

预测编码

预测编码不需要较大的计算开销就可以实现较好的压缩效果,并且可以是无误差的或有损的压缩。

编码思路:利用前面的一个或多个信号对下一个信号进行预测,然后对实际值和预测值的差(预测误差)进行量化编码。参与预测的符号越多,预测越准确,该信元的不确定性越小,数码率就可以降的越低。

编译器输出的不是样本的真实值,而是真实值与预测值的差。在译码端,译码器将接收到的这一差值与译码器的预测值相加,从而恢复信源符号。

数字图像水印

将一条或多条信息项插入到潜在的易受攻击的图像中,可阻止非法复制图片,这个信息项就称为水印,水印不能从图像本身分离出来。

数字图像水印涉及信息编码,前面压缩的内容时减少用于图像的数据量,水印处理时在图像上添加信息和数据。

水印本身可以是完全可见或不可见的。

可见水印是一幅不透明的或半透明的子图像,或放在另一幅图像之上的图像。表示为未加水印图像f和水印w的线性组合:
f w = ( 1 − α ) f + α w f_{w}=(1-\alpha) f+\alpha w fw​=(1−α)f+αw
常数α控制水印和衬底图像的相对可见性。α∈[0,1],α=1时,水印不透明,衬底图像完全是暗的;α越接近于0,会逐渐看到更多的衬底图像和更少的水印。

import cv2
from PIL import Image
import matplotlib.pyplot as pltdef add_watermark_to_image(image, watermark):rgba_image = image.convert('RGBA')rgba_watermark = watermark.convert('RGBA')image_x, image_y = rgba_image.sizewatermark_x, watermark_y = rgba_watermark.size# 缩放水印图片scale = 3watermark_scale = max(image_x / (scale * watermark_x), image_y / (scale * watermark_y))new_size = (int(watermark_x * watermark_scale), int(watermark_y * watermark_scale))rgba_watermark = rgba_watermark.resize(new_size, resample=Image.ANTIALIAS)# 透明度rgba_watermark_mask = rgba_watermark.convert("L").point(lambda x: min(x, 180))rgba_watermark.putalpha(rgba_watermark_mask)# 水印位置rgba_image.paste(rgba_watermark, (image_x - watermark_x,image_y - watermark_y ), rgba_watermark_mask) return rgba_imageim_before = Image.open('C:/Users/13121/Desktop/0.jpg')plt.subplot(131)
plt.imshow(im_before)
plt.title("Origin picture")im_watermark = Image.open('C:/Users/13121/Desktop/1.jpg')plt.subplot(132)
plt.imshow(im_watermark)
plt.title("watermark picture")im_after = add_watermark_to_image(im_before, im_watermark)plt.subplot(133)
plt.imshow(im_after)
plt.title("after picture")plt.tight_layout()
plt.show()

不可见水印是裸眼看不见的,需要一个合适的解码算法才能恢复。不可见性是通过作为可见的冗余信息插入水印来保证的。表示为:
f w = 4 ( f 4 ) + w 64 f_{w}=4\left(\frac{f}{4}\right)+\frac{w}{64} fw​=4(4f​)+64w​

数字图像处理知识点梳理——第八章 图像压缩相关推荐

  1. 数字图像处理知识点梳理——第七章 小波和多分辨率处理

    文章目录 前言 1 背景 2 多分辨率展开 函数的伸缩和平移 级数展开 尺度函数 小波函数 3 一维小波变换 离散小波变换 连续小波变换 4 快速小波变换 5 二维小波变换 6 小波变换和Fourie ...

  2. 数字图像处理知识点梳理——第十章 图像分割

    文章目录 引言 不连续检测 1.点检测 2.线检测 3.边缘检测 基本的边缘检测方法 更先进的边缘检测技术 1.Marr-Hildreth边缘检测器 2.坎尼边缘检测器 阈值处理 1.基本的全局阈值处 ...

  3. 数字图像处理知识点梳理——第九章 形态学图像处理

    文章目录 1.预备知识 2.腐蚀和膨胀 3.开操作和闭操作 4.一些基本的形态学算法 1.预备知识 数学形态学的语言是集合论. 在形态学中集合的反射和平移广泛用来表达基于结构元(SE)的操作:研究一幅 ...

  4. 数字图像处理知识点梳理——第二章 数字图像基础

    文章目录 2.1 视觉感知要素 2.2 光和电磁波谱 2.3 图像感知和获取 2.4 图像取样和量化 2.4.1 取样和量化的基本概念 2.4.2 数字图像表示 2.4.3 空间和灰度分辨率 2.4. ...

  5. 数字图像处理知识点总结

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达本文转自|新机器视觉 数字图像处理知识点总结 第一章 导论 1.   ...

  6. 数字图像处理与机器视觉光盘资料_机器视觉——数字图像处理知识点总结

    数字图像处理知识点总结 第一章 导论 1. 图像:对客观对象的一种相似性的生动性的描述或写真. 2. 图像分类:按可见性(可见图像.不可见图像),按波段数(单波段.多波段.超波段),按空间坐标和亮度的 ...

  7. OpenCV图像处理知识点梳理

    OpenCV知识点梳理 OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux.Windows.Android和Mas OS操作系统上. 它轻量级而且高效 ...

  8. 数字图像处理——知识点

    啥也先不说,Lena镇个楼. Lena 第一章 绪论 * 数字图像:能够在计算机行显示和处理的图像. * 数字图像处理:利用计算机对图像进行分析.加工等处理,使其能够满足各种目的. * 数字图像的特点 ...

  9. 数字图像处理知识点复习(上)

    数字图像处理 绪论(一些基本概念) 图像(Image) 数字图像 图像表示 矩阵表示 向量表示 数字图像处理 概念 特点 目的 高级图像编辑 数字图像处理基础 视觉过程 采样量化 图像类型 二值图像 ...

最新文章

  1. optee的error codes
  2. 新手可以做的ai比赛:亲测有效
  3. php pdo 查询语句,PDO:预处理语句(参数化查询)
  4. c语言返回二叉树的大小,C语言中计算二叉树的宽度的两种方式
  5. 决策树(四)--随机森林与GBDT
  6. Crawler 爬虫
  7. [python] 解决OSError: Address already in use
  8. 网页抓取软件-免费网页自动采集抓取任意内容软件
  9. Project软件安装包下载project安装教程
  10. 国产操作系统要起来?自主银河麒麟V10发布!
  11. Eureka注册服务配置info-使用$project.artifactId$无法动态显示artifactId
  12. 在OpenGL中创建一个球体动画,使球体在窗口内做自由落体运动,并在撞击地面后能够返回原来高度
  13. 从键盘读入一个字符串,若遇到字母,则输出0;若遇到数字则输出1;否则不输出。例如:输入ab@12c,输出00110
  14. 微信智慧商圈-java-springBoot实例
  15. 在win7命令行下编译运行C++程序
  16. DAO跨事物调用---转账
  17. 逻辑函数的简化之图解法(卡诺图法)
  18. No connection could be made because the target machine actively refused it [::1]:808
  19. 自学笔记之计算机网络(3)--奈奎斯特定理与香农定理
  20. 网络工程防雷接地实训装置

热门文章

  1. python 携程登陆,Python爬取携程信息
  2. linux ssh 终端退格键,退格键,Tab,Del和箭头键在终端中不起作用(使用ssh)
  3. TreeMap的介绍与使用
  4. Dell电脑Fn与功能键的切换
  5. golang优雅的使用context
  6. matlabnbsp;蠓虫分类问题nbsp;amp;n…
  7. 回归分析regression analysis
  8. Leetcode(69)——x 的平方根
  9. 最短路计数(入门最短路)
  10. 停车还能360全方位影像_停车场实拍长安UNI-T,全系配主动刹车、360全景影像,定价成关键...