【学习图像处理】编码优化

图像编码中的正交变换:优化压缩与重建 在数字图像处理领域,图像编码旨在通过数学变换和压缩算法将原始图像数据转化为更紧凑的表示形式,从而实现高效的存储和传输。本文将介绍正交变换在图像编码中的应用,探讨其优化压缩和重建图像的重要性和方法。正交变换作为图像编码中的重要工具,在优化压缩和重建图像过程中发挥着关键作用。此外,基于深度学习的端到端图像编码技术也成为研究热点,通过神经网络学习压缩和解压过程,实现更灵活高效的图像编码方法。在信号的还原过程中,逆正交变换将压缩后的数据重新转换为原始图像数据,并通过解码过程实现图像数据的重建。 阅读详情

前言

这次只是对之前两次编码实验的一个小小的补充,没有很多的内容。而且临近期末了,我也不是很想去写一些很复杂的优化策略了,只用最最简单的差值预测来进行编码优化。经测试赫夫曼编码的压缩效率提高了很多,LZW依旧取决于图像,但是不会出现反向压缩的问题了。

编码优化

上次在进行LZW编解码时我提到过有反向压缩的问题,给出了一种很麻烦的解决方法,就是用变长的码表来逐一试,最终试出效果最好的那个。然而你要是全自动的试也就算了,bitset还只能手动编译,因此这种方法注定只能是权宜之计。

不出所料,这周的课程就讲了如何优化编码的效果。不过和我预想的计算可以计算最佳码表长度不一样,我们的优化是通过降低信息熵实现的。

1、无损预测编码

信息熵实际上就是衡量信息量多少的一个量化标准,根据最优编码理论,信息熵是图像压缩的下限,也就是说不论你用什么样的方法,都不可能在不损失信息的情况下,将图片的平均码长缩短到小于信息熵的程度。

信息熵H和平均码长L的计算公式如下:

H ( X ) = − ∑ i = 1 k p ( x i ) l o g p ( x i ) H(X)=-\sum_{i=1}^{k}p(x_i)logp(x_i) H(X)=−i=1∑k​p(xi​)logp(xi​)

L = ∑ i = 1 k p ( s i ) l i L=\sum_{i=1}^{k}p(s_i)l_i L=i=1∑k​p(si​)li​

x i x_i xi​表示像素值, s i s_i si​表示编码, l i l_i li​是码长,对于灰度图像而言就是对0-255的像素值的对应项求和。

但是往往我们的要求就是这么高,既不想损失信息,又想要尽可能地压缩,那咋办嘛?聪明的前人想到了很多种方法,它们可以暂时的将图像的信息熵减小,解码之后再复原就好了。预测编码就是其中的一个大类,而我实现的,是最不需要计算量的一种,其原理图如下:

预测优化
f ( i ) f(i) f(i)就是原始的图像数据,我们将首位设为0,然后将原始图像的像素值错位的赋值给后续位置。最后用原始数据减去错位后的数据,就可以得到一个信息熵减小的数据 e ( i ) e(i) e(i)了。原始图片的信息熵较大,是因为像素值的范围、起伏都比较大,我们通过这样的错位相减,可以使图像整体的像素分布更加集中(你可以用实验二中的方法绘制直方图,效果很明显)。

而且这样变化之后还是可以复原的,复原过程如下图:

预测优化复原
这个减小信息熵过程,叫做预测器处理,我们的算法就是预测器。用不同的预测器会有不同的效果,上面演示的属于差值预测,还有另一大类的方法叫做线性预测,一般会按照预测值的数量划分为一维、二维预测等,不再赘述了。

2、有损预测编码

既然有无损压缩这样的方法,那对应的也就有有损压缩算法。不是每个人都是列文虎克写轮眼,对于类似表情包这样的图片,我们只需要看缩略图就明白对面是什么意思了,不需要放大再放大。因此与其追求两全,不如省点流量,把图像尽可能的压缩,这就是有损预测的初衷。

有损预测为什么会有损呢?是因为它在预测器的基础上添加了一个量化器。当然这个量化也分为标量量化和矢量量化,这里只讨论标量量化。

我给你说量化器干的事,你就知道损失在哪了。编码的时候,量化器对所有像素值进行除以10后取整操作。解码的时候,量化器对所有像素值进行乘以10的操作。。。

当然人家也是有公式的,我上面只是举了一个简单的例子,公式如下:

f ′ ( x , y ) = r o u n d ( ∑ i = 1 m a i F ′ ( x , y − i ) ) f'(x,y)=round(\sum_{i=1}^ma_iF'(x,y-i)) f′(x,y)=round(i=1∑m​ai​F′(x,y−i))

最简单的有损预测编码方法是Delta调制,其公式如下:

f ′ ( n ) = a f ′ ( n − 1 ) f'(n)=af'(n-1) f′(n)=af′(n−1)

e ( n ) = f ( n ) − f ′ ( n ) e(n)=f(n)-f'(n) e(n)=f(n)−f′(n)

e ′ ( n ) = { + δ , 当 e n > 0 − δ , 其 他 情 况 e'(n)= \left\{ \begin{aligned} +\delta,当e_n>0\\ -\delta,其他情况 \end{aligned} \right. e′(n)={+δ,当en​>0−δ,其他情况​

最简单当然效果也比较差了,现在一般不会再使用了。

delta调制

代码实现

没什么可讲的,按照上面的原理图一一对应就好了,只给出了预测和还原的函数,在调用其他编码算法之前使用预测函数,在用其他编码还原出预测图像后再还原即可。

预测编码:

void img_Predict(BMPFILE &src, BMPFILE &des)	//对图像进行线性预测
{
	img_Clone(src, des);
	int i, j;
	for (i = 0; i < des.imagew; i++)	//f'(i)=f(i-1)
		for (j = 0; j < des.imageh; j++)
		{
			if (i == 0 && j == 0)
			{
				des.pDataAt(i)[j] = 0;
			}
			else
			{
				if (j != 0)
				{
					des.pDataAt(i)[j] = src.pDataAt(i)[j - 1];
				}
				if (j == 0)
				{
					des.pDataAt(i)[j] = src.pDataAt(i - 1)[src.imageh - 1];
				}
			}
		}

	for (i = 0; i < des.imagew; i++)	//e(i)=f(i)-f'(i)
		for (j = 0; j < des.imageh; j++)
		{
			des.pDataAt(i)[j] = src.pDataAt(i)[j] - des.pDataAt(i)[j];
		}

	des.SaveBMPFILE("predict.bmp");
}

还原:

void img_Depredict(BMPFILE &src, BMPFILE &des)		//将经过预测编码的图像还原为原始图片
{	//src相当于e(i)
	img_Clone(src, des);
	int i, j;
	for (i = 0; i < des.imagew; i++)	//f'(i)=e(i-1)+f'(i-1)
		for (j = 0; j < des.imageh; j++)
		{
			if (i == 0 && j == 0)
			{
				des.pDataAt(i)[j] = 0;
			}
			else
			{
				if (j != 0)
				{
					des.pDataAt(i)[j] = src.pDataAt(i)[j - 1] + des.pDataAt(i)[j - 1];
				}
				if (j == 0)
				{
					des.pDataAt(i)[j] = src.pDataAt(i - 1)[src.imageh - 1] + des.pDataAt(i - 1)[des.imageh - 1];
				}
			}
		}

	for (i = 0; i < des.imagew; i++)	//f'(i)=e(i-1)+f'(i-1)
		for (j = 0; j < des.imageh; j++)
		{
			des.pDataAt(i)[j] += src.pDataAt(i)[j];
		}

	des.SaveBMPFILE("Depredict.bmp");
}

结语

我已经把这个优化整合在了赫夫曼编解码函数里,等LZW的实验检查之后我也会将其整合一下。
本次内容的完整代码及其他相关函数代码均可见我的gitee。

稀疏编码(Sparse Coding)的前世今生(三) 稀疏编码(sparse coding)和低秩矩阵(low rank)的区别        上两个小结介绍了稀疏编码的生命科学解释,也给出一些稀疏编码模型的原型(比如LASSO),稀疏编码之前的探讨文章就不说了,今天开始进入机器学习领域的稀疏表达。稀疏编码进入机器学习领域后,出现了很多应用,比如计算视觉领域的图像去噪,去模糊,物体检测,目标识别和互联网领域的推荐系统(Collabora 阅读详情

相关推荐

无损图像压缩编码——一维预测编码

图像压缩是计算机视觉和图像处理领域中十分重要的技术,可以将大容量的图像数据压缩为较小的文件尺寸,从而方便存储、传输和处理。一维预测编码是一种常见的数据压缩技术,其基本思想是通过对已知的数据序列进行预测,以求得待编码的数据序列的冗余信息,并通过对该冗余信息进行编码来实现数据的压缩。预测误差是指预测值与实际值之间的差,其大小通常较小,因此可以通过 Huffman 编码等方法进行编码压缩。对每个小块进行预测,通常采用线性预测方法,即根据相邻像素之间的线性关系进行预测。将编码后的数据进行拼接组成压缩后的图像文件。

2301_78484069的博客 533

无损预测编码

%无损预测编码 f=imread('Aligned Matches.tif'); e=mat2lpc(f)%预测编码f entropy(e)%计算e的一阶估计 c=mat2huff(e);%编码矩阵e cr=imratio(f,c)%计算f和c的比率 [h,x]=hist(e(:)*512,512);%显示直方图 figure;bar(x,h,'k'); g=lpc2mat(huff2mat(c...

YangYaYan的博客 3968

13、图像压缩中的无损编码与预测编码技术

本文深入探讨了图像压缩中的无损编码与预测编码技术。无损编码通过Huffman、算术和GR编码等方法实现高效数据表示,而预测编码利用像素相关性减少冗余,重点介绍了一阶、二阶及p阶线性预测器的设计原理与性能分析。结合MATLAB示例展示了DPCM编码器在不同量化器下的表现,并比较了均匀与非均匀量化器的SNR差异。文章还阐述了预测编码在视频编码和图像存储中的应用,并展望了其在未来与深度学习融合、自适应优化及高阶预测的发展趋势,为提升图像压缩效率提供了理论基础与实践指导。

pytorchlight8的博客 98

数字图像处理作业:一维无损预测压缩 一维游程编码

游程编码算法 基于预测编码的图像压缩方法的研究 游程编码代码 function S=RLC(I) %====================================================================================================== % 游程长度编码是栅格数据压缩的重要编码方法,它的基本思路是:对于一幅栅格图像,常常有行(或列)方向上相邻的若干点 % 具有相同的属性代码,因而可采取某种方法压缩那些重复的记录内容。其编码方案是,只在各行(

ysh的博客 2697

易语言梦幻WAS图像处理源码分析与应用

易语言以其简单易学的特点,成为了许多初学者及专业人士的首选编程语言。梦幻WAS作为易语言的一个扩展,为开发者提供了丰富的网络编程组件。提取梦幻WAS源码对于理解其工作原理、进行二次开发和性能优化至关重要。本章将为您提供对易语言梦幻WAS提取源码工作流程的概述。梦幻WAS(Web Application Server)是易语言为快速构建网络应用所提供的一种组件。它能够帮助开发者快速搭建一个网络应用平台,支持动态网页的生成、数据库连接和处理网络请求等功能。

weixin_28681379的博客 463

Frida精准定位Shopee x-sap-ri动态签名生成函数

x-sap-ri是Shopee客户端生成的上下文感知型动态令牌,本质为基于设备标识、请求路径与毫秒级时间戳三元组的SHA256哈希值,经Base64编码后作为防重放与防批量伪造的核心校验字段。其生成逻辑深度混淆且跨Java/Native层,静态分析失效,而Frida凭借内存级函数调用拦截与JNI层穿透能力,成为唯一可行的技术路径。本文聚焦Frida在加固App中的实战适配——通过libcrypto.so API特征扫描反向定位被抹名的生成函数,实现对x-sap-ri输入参数(如16字节device_id加密

weixin_33978578的博客 607

第三章 图像编码原理与技术

视频压缩通信第三章图像编码原理与技术的学习记录

m0_46303430的博客 7478

地图坐标系大全:常用地图坐标系详解与转换指南

地图坐标系是用于描述地图上位置的数学模型。它可以用来表示地球表面上的任意一个点,使得这个点的位置可以在地图上精确定位。不同的地图坐标系采用不同的基准面和投影方式,因此会有不同的坐标系参数,不同的坐标系之间也需要进行坐标转换。在地图制图、导航、GIS等领域中,地图坐标系是一个非常重要的概念。

weixin_39888010的博客 1万+

【图像处理】基于逆仿射变换的图像压缩、图像加密解密和图像编码译码附Matlab代码

图像处理技术在现代信息社会中扮演着至关重要的角色,其应用领域涵盖了医学影像、卫星遥感、计算机视觉等诸多方面。而高效的图像压缩、安全可靠的图像加密解密以及准确无误的图像编码译码是图像处理技术的核心组成部分。本文将探讨基于逆仿射变换在上述三个领域中的应用,深入分析其原理、优势以及局限性。逆仿射变换作为一种线性变换,具有良好的数学性质,易于计算且可逆。它能够将图像数据从空间域变换到变换域,在变换域中进行操作,再通过正变换返回空间域。这种特性使其成为图像处理中一种有效的工具。

m0_60703264的博客 643

Visual Studio 2013 + Intel(R) Visual Fortran 安装教程

安装了好几遍,ivf都不能加载到vs中,中途放弃了vs,又改用codeblocks编译器,依然在写fortran的时候出现了各种问题,于是又放弃了codeblocks改回vs,总之是折腾了好久,终于装明白了ivf并且将fortran模板成功加载到vs中。 PS:一定要安装Intel Visual Fortran.Composer XE.2013-SP1,不要用Intel Visual Fortr...

Coco_wjy的博客 12万+

大模型训练方法全面解析:SFT、RFT、TRPO、DPO、PPO、GRPO、RLH、RLHF技术深度剖析

大模型训练方法全面解析 本文系统介绍了当前主流的大模型训练和对齐技术,包括监督微调(SFT)、拒绝采样微调(RFT)、信任域策略优化(TRPO)、直接偏好优化(DPO)、近端策略优化(PPO)等。这些方法各有特点:SFT简单高效但数据依赖性强;RFT通过质量筛选提升输出质量;TRPO训练稳定但计算复杂;PPO是RLHF核心算法,平衡探索与利用。文章详细分析了各方法的实现原理、优势劣势及适用场景,为开发者选择合适的大模型训练策略提供参考。

2793

稀疏编码和字典学习详解

本文详细介绍了稀疏编码、字典学习,以及他们之间的关系、算法详解、算法实现细节、并给出了一个应用实例和相关python代码

m0_66890670的博客 4106

Java后端开发实战:手把手教你用e签宝API搞定电子合同签署(附完整代码)

本文详细解析了Java后端开发中如何通过e签宝API实现电子合同签署的全流程,包括环境配置、核心架构设计、Token管理、签署流程实现及回调处理等关键环节。通过完整的代码示例和最佳实践,帮助开发者高效集成电子签名服务,提升企业数字化转型效率。

weixin_42662293的博客 527

【编码解码】BSC、BEC通道二进制消息编码解码【含Matlab源码 9927期】

BSC、BEC通道二进制消息编码解码 完整代码,包运行;可提供运行操作视频!适合小白!

订阅付费专栏Matlab(奶茶价版),可赠送奶茶价版付费专栏指定代码1份; 1136

[Python人工智能] 三十六.基于Transformer的商品评论情感分析 (2)keras构建多头自注意力(Transformer)模型

本专栏开始,作者正式研究Python深度学习、神经网络及人工智能相关知识。前一篇文章利用Keras构建深度学习模型并实现了情感分析。这篇文章将介绍Transformer基础知识,并通过Keras构建多头自注意力(Transformer)模型,实现IMDB电影影评数据情感分析。基础性文章,希望对您有所帮助!...

杨秀璋的专栏 4908

【YOLO11改进 - 特征融合】利用Hyper-YOLO 的混合聚合网络(MANet)改进yolo11,提升基础网络的特征提取能力

【YOLO11改进 - 特征融合】利用Hyper-YOLO 的混合聚合网络(MANet)改进yolo11,提升基础网络的特征提取能力

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 903

【编码译码】香农-费诺Shannon-Fano编码译码(含信源 编码模式)Matlab代码

👇 关注我领取海量matlab电子书和数学建模资料。

Matlab_dashi的博客 743

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

【图像处理】图像压缩解密、图像加密解密和图像编码译码【含Matlab源码 9214期】

图像压缩解密、图像加密解密和图像编码译码 完整代码,包运行;可提供运行操作视频!适合小白!

订阅付费专栏Matlab(奶茶价版)或下载付费资源,可赠送奶茶价版付费专栏指定代码1份; 812

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Deep Learning(深度学习)学习系列之(五)

Deep Learning(深度学习)学习笔记整理系列 声明: 1)该Deep Learning的学习系列是整理自网上很大牛和机器学习专家所无私奉献的资料的。具体引用的资料请看参考文献。具体的版本声明也参考原文献。 2)本文仅供学术交流,非商用。所以每一部分具体的参考资料并没有详细对应。如果某部分不小心侵犯了大家的利益,还望海涵,并联系博主删除。 3)本人才疏学浅,整理总结的时候难免出错,还望各位前辈不吝指正,谢谢。 4)阅读本文需要机器学习、计算机视觉、神经网络等等基础(如果没有也没关系了,没有就看看,

Jackery's Special Column 1208

信息论与图像处理:提高图像传输效率的方法

1.背景介绍 图像处理和传输是计算机视觉、人工智能和通信技术等领域中的重要研究方向。随着互联网的普及和人们对高质量图像传输的需求不断增加,图像传输效率的提高成为了一个重要的研究和实际应用问题。信息论是研究信息传输和处理的基本理论之一,它提供了一种量化信息的方法,并给出了一些关键的理论基础,如熵、互信息、熵率等。在这篇文章中,我们将讨论信息论在图像处理和传输中的应用,以及如何利用信息论的原理来提高...

AI天才研究院 1476

字典学习知识点

因此,研究者们开发了各种优化算法来加速字典学习的过程,如K-SVD(K-奇异值分解)算法,它是目前最流行的字典学习算法之一。例如,在图像修复中,字典学习可以帮助重建缺失或损坏的图像区域,通过学习正常图像区域的模式来推断缺失部分的像素值。过完备字典是指字典中的原子(即字典的列)数量多于字典的维度。换句话说,过完备字典的列数多于行数,这使得每个信号或数据点可以以多种不同的方式表示为字典原子的线性组合。:对于每个信号,使用当前的字典找到一组系数,使得信号可以由字典中的原子线性组合而成,并且这些系数尽可能地稀疏。

weixin_43899239的博客 841

FOCUSS-CNDL算法matlab源码:图像处理的强大工具

FOCUSS-CNDL算法matlab源码:图像处理的强大工具 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在图像处理和机器学习领域,FOCUSS-CNDL算法是一种基于稀疏过完备编码的先进算法。本项目的Matlab源码旨在帮助研究人员和学生理解并应用FOCUSS-CNDL算法,进而推动其在图像去噪、特征提取等领域的应用。此开源项目提供了一个易于操作的实验平台,使算...

gitblog_06772的博客 285
上一篇: 【学习图像处理】之实验四——图像编码之LZW编码
下一篇: 【学习机器学习】实验——神经网络
Morphlng
博客等级 码龄8年 1157粉丝 41原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值