导航:首页 > 源码编译 > matlab压缩算法效率比较

matlab压缩算法效率比较

发布时间:2025-04-11 16:50:30

① MATLAB程序优化(2)——循环的替代

本文针对 MATLAB 程序优化中的循环替代策略进行探讨,适合对 MATLAB 有一定了解的开发者,旨在提升程序运行效率。首先,MATLAB 是一种针对矢量和矩阵运算设计的矩阵语言,因此,优化程序时可以考虑使用向量化算法,将 for 和 while 循环转换为等效的矩阵运算,从而提升性能。然而,对于初学者来说,优先熟悉 MATLAB 的各种函数和基本操作更为重要,实现功能后,再逐步关注性能优化。

MATLAB 是“矩阵实验室”的缩写,其优势在于高效处理矩阵和向量运算,但循环处理是其相对薄弱的环节。减少循环使用可以显着提升程序执行速度。此外,直接使用 MATLAB 的内置函数而非手动编写循环,通常能获得更好的性能。

解决循环问题时,可以考虑使用函数指针,如使用 `func = @sin` 替代 `func = 'sin'`,这可以避免每次循环时 MATLAB 需要搜索函数路径的问题。同时,选择适用于实数的函数版本,例如 `reallog()`, `realpow()`, `realsqrt()` 等,能进一步提高程序效率。

针对循环优化,还有多个实用技巧可供参考。例如,在必须使用多重循环时,根据循环次数调整内外层循环的顺序,可以显着提升程序速度。使用 `any()`, `size()`, `find()`, `cumsum()`, `sum()` 等函数代替循环操作,或利用 `bsxfun()`, `arrayfun()`, `cellfun()`, `spfun()`, `structfun()` 等内置函数,简化代码结构,提高执行效率。

另外,高级输入输出操作,如 `load()` 和 `save()`,通常比低级操作 `fread()` 和 `fwrite()` 更快。针对矩阵元素与列均值的偏差计算,MATLAB R2016b 及更高版本提供了更高效的内置方法,简化了操作步骤。

对于识别和优化程序中资源占用较多的部分,可以利用 MATLAB 内置的性能分析工具。使用 `tic` 和 `toc` 方法可以获取程序运行时间,了解运行时受计算机负载影响的“wall clock”时间。通过不断压缩计时范围,可以定位程序执行最慢的位置。此外,MATLAB 的代码分析器功能强大,通过 `profile on` 和 `profile viewer` 命令,可以生成详细的性能分析报告,包括函数名、调用次数、CPU 使用时间等信息,帮助开发者进行代码优化。

总结,优化 MATLAB 程序时,应根据具体情况选择合适的策略,如向量化、函数指针、选择高效函数、优化循环结构等,并利用 MATLAB 的性能分析工具辅助定位和解决性能瓶颈。通过这些方法,可以显着提升 MATLAB 程序的运行效率。

② 大哥您好,我是上次向您求助怎样用分形进行图像压缩的,我是做这个毕设的。。。

A METHOD OF IMAGE COMPRESSION BASED ON FRACTAL DIMENTION

WUZiwen
(Department of computer science, Fujian Teachers UniversityFuzhou 350007)

WUPenghuiZHENGBaoyu
(Nanjing University of Post and CommunicationNanjing 210003)

AbstractIn this paper, we put forward a new method of image compression based on fractal dimension and combined DCT with fractal encoding. Experiments show that compared to basic automatic fractal coding approach, the new method can get higher compression ratio、higher PSNR and quicker computation speed.
Key wordsFractalFractal dimensionIFS DCT

1引言

在计算机图形学领域中关于曲线和曲面的研究已相对成熟,人们先后提出了象B样条曲线/曲面、Bezier曲线/曲面等既有坚实理论基础又有实用价值的图形、图象处理方法.然而,这些几何模型在处理大自然为数众多的景象,如海岸线、地貌、 云、树木等方面时,却显得不尽人意,乃至无能为力,这主要的原因是因为计算几何学研究的是“规则”的几何形体,或近似几何形体.法国数学家Benoit B. Mandelbort 以不规则图形为研究对象,于一九七五年提出了分形几何的概念,创立了分形几何学理论.他提出了用分形维数这一度量概念来描述自然现象的不规则程度.而图象的最终目的是供人去观察的,考虑到人的视觉系统的固有特性,比如对某些频率分量比对其他的敏感些,因此,对不敏感部分可以粗略编码,重构的解码图象也不会有接受不了的质量损失,所以在编码系统中考虑到人的视觉特性将有利于提高压缩比.基于分割的图象编码就是这样一种技术,它根据视觉特征,使用一些分割方法把图象分成若干类区域,对不同类的区域采用不同的编码策略.本文采用基于分形维数的方法进行图象分割,把图象分成具有明显分形特征和分形特征相对不明显的两类区域,对具有明显分形特征的区域使用基于迭代函数系统(IFS)的分形图象压缩编码方法,而分形特征相对不明显的区域施以DCT压缩编码.这种基于视觉特性的分形维数分割的图象压缩方法可以获得相当高的压缩比.

2分形维数
分形的本质是“自相似”.分形表示无规则、非规整现象,但绝不是绝对的无规则,而是具有自相似性.实际的自然景物一般不具严格的自相似性,而通常具有统计意义上的自相似性,Pentland 证明了自然界的大多数表面是空间各向同性的分形,且这些表面所映射成的灰度强度分布场也具有分形特征.这样,我们可以通过对表面的图象数据分析得出自然界存在的物体的分形特性.
分形维数是分数维,是对分形的一种描述和量度.即是对“不规整”的、支离破碎的片断集合的定量描述.
分数维的产生,拓宽了数学维数的领域.以往用整数维的传统方法难以测定和描述的某些自然界的景物,可以用分数维来定量描述.当然,自然界千姿百态,并非一切复杂的自然现象都可以用分数维这一个尺度来量度,正如一切自然现象绝不可能都是分形结构一样,但是,由于分形维数直观上与物体表面的粗糙程度相吻合,而自然界中的不同纹理粗糙度有很大的差别,因此,分形维数可以作为区别不同图象区域的分形特性的有效参数,从而可依据分形维数将图象区域分类,进而对不同类别的图象区域采用不同的压缩编码方案.

3图象中分数维的提取
维数在数学上可用多种方法来定义.Hausdorff利用集的复盖来定义测度的思想,定义了以他名字命名的测度和维数,尽管Hausdorff维数对任何集都有定义,然而这种维数在理论上的意义远大于实际应用,对于一个分形集合,计算其Hausdorff 维数一般是相当困难的.实际上我们最为常用的分数维定义有自相似维、Holomogrov容量维、盒子维等.
虽然一个真实空间中的分形表面映射到图象的灰值表示的过程从数学上说还没有完全解决,但是图象的灰值表面最终总可以用相关于分形表面法线上及入射光之间角度的一个函数表示,所以,美国的A.P.Pentland假定,如果一个物体的表面是分形的,则由它产生的图象灰度表面也具有分形的性质,反之亦然.因此,我们可以从灰值图象中提取分数维.
本文采用盒子维的方法从图象中提取分数维——分形维数.盒子维是迄今在各学科领域中应用得最为广泛的一种维数.这主要是因为它非常容易由计算机求得.
盒子维方法是把二维平面中的方格推广到小立方体时得到的.令N(r)表示边长为r×r×r的包含所要估计的图象区域的最少立方体个数,在这里可以把灰值图象想象成一个在三维空间中的分形曲面.所要估计的图象区域的分数维D将由下式决定:
N(r)*rD=C
其中C为常数,两边同取对数有:
logN(r)=-Dlogr+logC
设某个图象区域的面积为A,r×r为一个单位面积,r可变大小,令

其中Ii(i=1,2,3,4)表示相应点的灰值大小,int表示取整.n(r)即是包含该单位面积上灰度所要的r×r×r的立方体个数.
区域A中的每个单位面积,均做同样的计算,可以得到n1(r),n2(r),…,求其均值,以E(n(r))表示,则有:

现在改变r的大小,可以求出相应的各个N(r),再用线性回归等求出logN(r)相对于logr的斜率,也就是该图象区域的分数维——盒子维.
我们在对图象提取盒子维时,一般是按图象分块进行的,即设定一个窗口,尺寸大小一般选成8×8或16×16等,提取的是窗口区域的分数维,窗口的移动是从左到右,从上而下,每次移动的步长取窗口的边长.

4基本的自动分形图象压缩算法

由Jacquin于1990年提出的基于迭代函数系统(IFS)的分块分形图象压缩算法首先实现了基本的自动分形图象编码方法.编码时,首先将原始图象分割成互不重叠的小方块Range块(调节小方块的大小可改变压缩比及重建图象的质量),分形编码的过程就是在同一图象内找到能够最佳匹配每一个Range块的大一些的方块Domain块,Domain块与Range块的尺度比称为尺度压缩因子,一般说来,Range块小,则压缩比小,但重建图象的信噪比高,Range块大,则相反.匹配的过程包括几何变换和灰度变换.
对原始图象分割的每一Range 块,求出它的最佳匹配块,记录Domain块的起始位置代码、灰度变换系数以及几何对称变换矩阵的序号,即得到所求的压缩编码.
解码时,以任一图象为初始图象,根据所有记录的每一Range块所对应的Domain 块的起始位置代码、灰度变换系数以及几何对称变换矩阵的序号,作相应的映射,迭代收敛的结果即为重建图象.〔5〕

5基于分形维数的图象压缩编码

Mandelbrot 曾定义:若一个集合的Hausdorff维数严格地大于它的拓扑维数,那么该集合就称为分形集.Hausdorff维是一种分数维,当然,从今天看这种定义有不令人满意的地方,它排除一些明显应当是分形的集合.但是,把Hausdorff维数严格大于拓扑维数作为分形集的充分条件,则是没有争辨的.当我们在同一图象的不同区域求得分数维以后,就可以基于此进行分类.有时可能在某些区域得到的分数维会低于相应的拓扑维等.这在物理上是不可能成立的,它说明了分形的模型在这些处是不合适的,而此处一般是多类物质的交界处,即图象的边缘分界处.本文对把图象表面看作三维空间的曲面,对相应的灰值图象进行分块提取分形维数——盒子维,当盒子维严格大于拓扑维数3时,则认为这些图象块具有较典型的分形特征,采用基于分形的图象压缩编码,即采用基于迭代函数系统(IFS)的分块图象压缩编码,尽可能提高压缩比.而对盒子维小于或等于拓扑维数3的图象块,则认为这些块的分形特征不明显或不具有分形特征,即分形模型在这类块是不合适的,因而采用DCT变换压缩编码方案,以保证图象的压缩质量.编码部分具体步骤如下:
* 将原图象分割成16×16大小的方块,用上面介绍的方法计算每个方块的分形维数.
* 经实验表明,设定阀值t = 3,将每一个方块的分形维数与t相比较,若严格大则认为该块具备较明显的分形特征,适合采用基于分形的图象压缩方法,采用前面介绍的基本分形图象压缩算法,并将其标志为1.否则就认为该块所具备的分形特征不明显,在这里我们采用基于DCT(离散余弦变换)的JPEG压缩方法,即将图象方块经过DCT变换,再量化,最后进行无失真的熵编码(这里我们采用Huffman编码),并将其标志为0.
* 经过图象方块的分类,得到原图象的方块分类标志位图,连同得到的IFS代码、JPEG压缩代码合成最后的压缩数据流.
解码部分的具体步骤如下:
任意给定一幅图象,根据方块分类标志位图,对标志为1的方块,用相应的IFS 代码进行迭代得到最终的收敛块,将之覆盖原图象的相应块.对标志为0的方块,用相应的JPEG压缩代码经过JPEG解压缩算法进行解码,得到的解码块覆盖原图象的相应块.

6实验结果

表1实验结果的比较

编码方法 压缩比 峰值信噪比
PSNR(db) 运算时间(h)
基本的自动分形
图象压缩方法 20.51 27.4 2.5
基于分形维数的
图象压缩方法 45.36 29.7 0.8

* 福建省自然科学基金资助项目.吴子文,副教授,主要研究方向为计算几何和计算机辅助设计等.吴鹏晖,硕士研究生,研究方向为数字信号处理及传输技术、多媒体信息处理技术等.郑宝玉,教授、博士生导师,主要研究方向为数字信号处理及传输技术、多媒体信息处理技术等.

作者单位:吴子文福建师范大学计算机科学系福州 350007
吴鹏晖郑宝玉南京邮电学院信息工程系南京 210003

参考文献

〔1〕Barnsley.M F.Hurd I.P. Fractal image compression.Wellesley:AK Peters,1992
〔2〕Jacquin A E.Fractal image coding based on a theory of iterated contractive image transformations.In:Proc SPIE's Visual Communications and Image Processing,1990
〔3〕曾文曲等.分形理论与分形的计算机模拟.沈阳.东北大学出版社.1993
〔4〕王东生等.混沌、分形及其应用.合肥.中国科学技术大学出版社.1995
〔5〕吴子文等.一种双二次插值与IFS相结合的图象压缩新方法.小型微型计算机系统.1998,4

③ matlab压缩图片大小-matlab如何将图像缩放到指定像素大小的函数

怎么用matlab把压缩成tiff

1.用matlab实现图像压缩时,如何将图片仿真

图像压缩是当今信息时代迫切需求的一门图像处理技术,它极大的减少了图像的数据量,为图像的存储,传输提供了方便。

小波变换,是一种广泛用于图像压缩的方法。它能让图像按不同的分辨率分析。

根据Mallat算法的思想,图像能分解成一个轮廓信号(低频子图)和水平,垂直,对角线三个方向上的细节信号(高频子图)。而轮廓信号又可以进一步分解。

而图像的主要能量部分是低频部分,而且人眼视觉系统对低频部分更为敏感,所以可以对低频部分采用较低压缩比;对高频部分采用较大压缩比来进行压缩。本文提出的是一种结合小波变换,DCT变换和矢量量化的压缩方法。

根据人眼的视觉特性,首先对图像进行小波分解,然后,对低频分量进行压缩比不大的DCT变换;对不同方向不同分辨率的高频分量进行不同码字大小的矢量量化编码,然后对反变换和解码后的系数进行小波重构。矢量量化过程中的码书设计采用的是LBG算法。

这样,根据对图像质量的不同要求,我们可以改变小波分解的层数,来得到不同压缩比的图像。本篇论文只对小波分解一层和两层后压缩进行了仿真和分析,表明该方案结合了各种压缩方法的优点,在满足图像质量的同时能得到较大的压缩比。

目前,在包装装潢设计中常用的图形处理软件有Pho-toshop,CorelDraw,AutoCAD等。但是这些软件中很少涉及到对图像进行压缩处理,以满足图像进行传输和储存的需要。

基于这一点考虑,在此尝试着用MATLAB编程来处理包装装潢图像的压缩,实现包装与计算机的紧密结合。1MATLABMATLAB是MathWorks公司推出的一套高性能的数值计算和可视化软件,它集数值分析、矩阵运算、信号处理和图像显示于一体,它附带的小波分析工具箱功能强大,可以完成小波分析的绝大部分工作。

MATLAB工具箱的出现避免了程序设计中的重复性劳动,缩短了开发周期,降低了成本,因而受到工科院校师生和研究人员的青睐。在介绍利用MATLAB小波工具压缩图像的文献中,总是将真彩色RGB图像转换为灰度级索引图像进行处理.经过这种处理以后,图像的存储数据能得到一定的压缩,但由压缩后的数据难以恢复成理想的彩色图像。

文中用MATLAB中有关函数处理图像压缩,而且由压缩后的数据可以还原出图像.实验结果表明,还原出的图像效果是理想的。文中主要以lena图像的处理为例,对它进行二进小波多层分解后,将低频和高频近似的系数矩阵作相应的处理,来研究用MATLAB中的小波工具箱压缩图像的方法。

2图像压缩方法在实际应用中,首先需要从图像文件中读取图像数据.MATLAB使用imreed()函数完这一任务.例如,在电脑D盘中有一彩色图像文件,则可由下述语句读取:X=imread(′D:picl.′);MATLAB图像处理工具箱支持4种基本图像类型:索引图像、灰度图像、二进制图像和RGB图像.MATLAB直接从图像文件中读取的图像为RGB图像.它存储在三维数组中。这个三维数组有3个面,依次对应子红(Red)、绿(Green)、蓝(Blue)3种颜色,而面中的数据则分别是这3种颜色的强度值,面中的元素对应于图像中的像素点。

索引图像数据包括图像矩阵X与颜色图数组map,其中颜色图map是按图像中颜色值进行排序后的数组。对于每个像素,图像矩阵X包含一个值,这个值就是颜色图数组map中的索引。

颜色图map为m*3双精度矩阵,各行分别指定红、绿、蓝(R、G、B)单色值,map=〔RGB〕,R、C、B为值域为〔0,1〕的实数值,m为索引图像包含的像素个数.然后可根据情况采用不同的小波函数,进行索引图像的分解压缩。这里对上面产生的索引图像X用dbl小波进行2层分解。

〔c,l〕=wavedec2(X,2,′dbl′)。在这里,一个索引图像作小波分解后,可得到一系列不同分辨率的子图像,不同分辨率的子图像对应的频率是不相同的.高分辨率(即高频细节)子图像上大部分点的数值接近于0,越是高频这种现象越明显.对一个图像来说,表现一个图像最主要的部分是低频(即近似)部分。

多层小波分解的所有成分系数均保存在向量c中,低频近似与高频细节的系数需从向量C中提取。MATLAB分别使用appcoet2()和detcoef2()函数来完成这一工作。

这种方法是对低频和高频部分进行处理,因而提取低频和高频近似系数。cAl=appcoef2(c,1,′dbl,′1);cH1=detcoef2(′h′,c,1,1);cDl=detcoef2(′d′,c,l,1);cVl=detcoef2(′v′,c,l,1)。

matlab实现离散余弦变换压缩(JPEG压缩原理)JPEG图像压缩算法:输入图像被分成8*8或16*16的小块,然后对每一小块进行二维DCT(离散余弦变换)变换,变换后的系数量化、编码并传输;JPEG文件解码量化了的DCT系数,对每一块计算二维逆DCT变换,最后把结果块拼接成一个完整的图像。在DCT变换后舍弃那些不严重影响图像重构的接近0的系数。

DCT变换的特点是变换后图像大部分能量集中在左上角,因为左上放映原图像低频部分数据,右下反映原图像高频部分数据。而图像的能量通常集中在低频部分。

实例程序:functionJpegI=imread('D:MATLAB7 oolboximagesimdemos');%该图片在安装matlab的目录中找,原图为灰度图象。

2.使用MATLAB图像压缩怎么做

I=imread('');%输入图像

I=im2double(I);%数据类型转换

T=dctmtx(8);%计算二维离散DCT矩阵

dct=@(x)T*x*T'%设置函数句柄

B=blkproc(I,[88],dct);%图像块处理

mask=[11110000%掩膜

11100000

11000000

10000000

00000000

00000000

00000000

00000000];

B2=blkproc(B,[88],@(x)mask.*x);%图像块处理

invdct=@(x)T'*x*T;%设置函数句柄

I2=blkproc(B2,[88],invdct);%图像块处理

imshow(I),figure,imshow(I2)%显示原始图像和压缩重构图像

3.用matlab把11张tif图片做成一个连续动画

使用如下代码方式可以达到你想要的效果。

clear;

clc;

fori=2:50

c=strcat('a',num2str(i));%这里可以根据自己图片名字儿作相应的修改

c=strcat(c,'.bmp');

I=imread(c);

%I=rgb2gray(I)

figure(1);

imshow(I);

end

图片的保存方式如:,这样可以实现你的汽车动画。如果想要使用你的汽车图片做的话,请把汽车图片发给我,我帮你看看。

如何用MATLAB进行图像压缩

I=imread('');%输入图像

I=im2double(I);%数据类型转换

T=dctmtx(8);%计算二维离散DCT矩阵

dct=@(x)T*x*T'%设置函数句柄

B=blkproc(I,[88],dct);%图像块处理

mask=[11110000%掩膜

11100000

11000000

10000000

00000000

00000000

00000000

00000000];

B2=blkproc(B,[88],@(x)mask.*x);%图像块处理

invdct=@(x)T'*x*T;%设置函数句柄

I2=blkproc(B2,[88],invdct);%图像块处理

imshow(I),figure,imshow(I2)%显示原始图像和压缩重构图像

matlab如何将图像缩放到指定像素大小的函数

1、首先打开电脑,然后在电脑中找到并打开matlab软件主界面,如图所示。

2、然后在编辑器界面下,找到并单击运行程序,如图所示。

3、点击运行程序后,绘制一元

函数图像

,如图所示。

4、然后编辑程序,绘制一元多次函数,效果如图所示。

5、最后根据自己需要进行编辑程序,这里绘制

分段函数

,效果如图所示,就完成了。

④ matlab 图像压缩问题

通常进行小波压缩重构后的图像是与原图像相同尺寸的,除非你将其它高频系数都删去不用。压缩后的图像如果是xcomp的话,直接用size就行了吧。
据我所知xcomp应该不是重构后的图像,只是去噪后的图像,还得进行重构才能得到真正重构的图像。

那可能是我孤陋寡闻了,不过要评价是否被压缩了不是看图像的大小变了没有,而是看压缩后的图像占多少空间,即所占字节数,与原图所占空间相比,这样可以算出被压缩了多少了

那这样的话我看你要修改一下你的参数了,比如thr等应该是阈值吧。如果他里边的数据都成片的相同,应该说已经阈值分割了呀。那我就不太了解了。

阅读全文

与matlab压缩算法效率比较相关的资料

热点内容
起点app什么时候上线的 浏览:741
绿盾加密的文件 浏览:878
phpmd56 浏览:701
java父路径 浏览:192
事业单位云服务器 浏览:947
公考app是什么 浏览:263
md5如何对文件加密 浏览:865
android开机启动过程 浏览:106
ic加密卡去掉密码可以正常用吗 浏览:1
一个网站如何共用多台服务器 浏览:447
如何访问学校服务器文件 浏览:36
如何检查打印服务器 浏览:297
oppo手机如何特殊加密 浏览:329
北漂程序员的爱情 浏览:468
iPhone钱包app怎么打开银联二维码 浏览:763
mac运行linux程序 浏览:309
phpmysqli选择数据库 浏览:132
美萍客户管理软件加密 浏览:215
linux环境下c编程指南第2版 浏览:222
爱番番是个什么app 浏览:340