潍坊网站建设解决方案新余 网站建站 设计 公司

当前位置: 首页 > news >正文

潍坊网站建设解决方案,新余 网站建站 设计 公司,《网站开发实例》pdf下载,wordpress更改文件上传目录一、图片压缩算法 有损算法#xff1a; JPEG#xff0c;我们最为常用的算法。他是通过离散余弦变换#xff0c;对图片质量尽量小的时候进行有损压缩#xff0c;该算法对高中波特率下效果很好#xff0c;但是对低波特率下#xff0c;就会出现方格之类的#xff0c;比如1…一、图片压缩算法 有损算法 JPEG我们最为常用的算法。他是通过离散余弦变换对图片质量尽量小的时候进行有损压缩该算法对高中波特率下效果很好但是对低波特率下就会出现方格之类的比如100多MB的MPEG电影会发现稍微一暗就很多格子。为了解决这个问题提出了JPEG2000标准。 JPEG2000使用了小波变换算法自称压缩率比JPEG高30%同时对局部支持不压缩。同时支持先轮廓、模糊逐步清晰的编码PNG,GIF和JPEG均支持interlace编码,但是目前推广比较差还没看到支持的浏览器。该算法压缩速度比较慢也是限制其发展的原因。 混合 Webpgoogle在推的一种压缩算法初衷是用于视频压缩。算法原理是预测编码只有在发生变化转折时插入新的数据。同时支持有损和无损压缩。压缩率号称比JPEG高40%但是计算开销也达到8倍。 TIFF标记型支持多个图层每个图层可以是JPEG有损的也可以是PNG等无损的。 无损压缩 仅仅是对数据进行重复数据的短码方式的压缩。PNG和GIF本质没啥区别GIF早期本分算法被专利了所以发展了PNG但是PNG支持更多的颜色如果是PNG8基本跟GIF一样了。透明度的支持PNG8和GIF只支持布尔透明度PNG16,32支持8位也就是256级的透明程度。理论上PNG24不支持透明但是目前还是发现有些库支持部分不支持。PNG2424位色彩也成为真色彩相当1600W颜色已经是人眼能分辨的最高级了。 不压缩 矢量图缩放或者放大都不会影响其平滑度不是所有的字体都是TrueType之类的矢量图的。 BMPbitmap每个像素8bit从下往上扫描。 二、数字图像处理 详细信息请看我的资源 三、图像压缩原理 1 图像可压缩的原因 一张原始图像(1920x1080)如果每个像素32bit表示RGBA那么图像需要的内存大小 1920x1080x4 8294400 Byte大约8M。这我们是万万不能接受的。如果这样1G硬盘才存100多张图片伤不起啊视频也一样如果视频是1920x108030fps 1小时。那不压缩大概需要的内存 8Mx30x60*60 864000M都800多G了疯了吧 所以说我们需要图像压缩。 常见图像、视频、音频数据中存在的冗余类型如下 1.1 空间冗余 一幅图像表面上各采样点的颜色之间往往存在着空间连贯性比如下图两只老鼠的颜色背后的墙灰色的地板颜色都一样。这些颜色相同的块就可以压缩。 比如说第一行像素基本都一样假设亮度值Y是这么存的 [105 105 105…….105]如果共100个像素那需要1Byte*100。 最简单的压缩[105, 100]表示接下来100个像素的亮度都是105那么只要2个字节就能表示整行数据了岂不是压缩了
1.2 时间冗余 这种冗余主要针对视频。 运动图像视频一般为位于一时间轴区间的一组连续画面其中的相邻帧往往包含相同的背景和移动物体只不过移动物体所在的空间位置略有不同所以后一帧的数据与前一帧的数据有许多共同的地方这种共同性是由于相邻帧记录了相邻时刻的同一场景画面所以称为时间冗余。 1.3 视觉冗余 人类的视觉系统由于受生理特性的限制对于图像场的注意是非均匀的人对细微的颜色差异感觉不明显。 例如人类视觉的一般分辨能力为26灰度等级而一般的图像的量化采用的是28灰度等级即存在视觉冗余。 人类的视觉觉对某些信号反映不太敏感使得压缩后再还原有允许范围的变化人也感觉不出来。 2 图像压缩编码举例 2.1 行程编码RLE 这是最好理解的一种编码了。 现实中有许多这样的图像在一幅图像中具有许多颜色相同的图块。在这些图块中许多行上都具有相同的颜色或者在一行上有许多连续的像素都具有相同的颜色值。在这种情况下就不需要存储每一个像素的颜色值而仅仅存储一个像素的颜色值以及具有相同颜色的像素数目就可以或者存储像素的颜色值以及具有相同颜色值的行数。 这种压缩编码称为行程编码(run length encodingRLE)具有相同颜色并且是连续的像素数目称为行程长度。 例如,字符串AAABCDDDDDDDDBBBBB 利用RLE原理可以压缩为3ABC8D5B RLE编码简单直观编码/解码速度快 因此许多图形和视频文件如.BMP .TIFF及AVI等格式文件的压缩均采用此方法. 由于一幅图像中有许多颜色相同的图块用一整数对存储一个像素的颜色值及相同颜色像素的数目长度。例如 G L//G为颜色值L为长度值 编码时采用从左到右从上到下的排列每当遇到一串相同数据时就用该数据及重复次数代替原来的数据串。 举例如下的18*7的像素假设只有灰度值1字节 000000003333333333 222222222226666666 111111111111111111 111111555555555555 888888888888888888 555555555555553333 222222222222222222 仅仅需要11对数据表示。 (0,8) (3,10) (2,11) (6,7) (1,18) (1,6) (5,12) (8,18) (5,14) (3,4) (2,18) 2.2 哈夫曼编码Huffman) 由于图像中表示颜色的数据出现的概率不同对于出现频率高的赋编予较短字长的码对出现频率小的编于较长字长的码从而减少总的代码量但不减少总的信息量。
计算字符串中每个字符的频率 按照字符出现的频率进行排序组成一个队列 Q ,出现频率最低的在前面出现频率高的在后面。把这些字符作为叶子节点开始构建一颗哈夫曼树,哈夫曼树又称为最优二叉树是一种带权路径长度最短的二叉树。 对字符进行编码 因此各个字母的编码分别为 ABCD111000101 在没有经过哈夫曼编码之前字符串“BCAADDDCCACACAC”的二进制为 10000100100001101000001010000010100010001000100010001000100001101000011010000010100001101000001010000110100000101000011也就是占了 120 比特 编码之后为 1000111110110110100110110110占了 28 比特。 2.3 DCT编码 2.3.1 基本概念 离散余弦变换Discrete Cosine Transform, DCT 离散余弦变换与离散傅里叶变换密切相关。它是可分离的线性变换也就是说该二维变换等效于先沿一个维度执行一维 DCT然后在另一维度中执行一维 DCT。 离散余弦变换DCT的基函数 离散余弦变换DCT中的基函数是用于表示图像或信号的正交函数集。每个基函数代表一个特定频率模式这些模式可以用来重建原始信号。在二维DCT中基函数是两个一维DCT基函数的乘积分别对应于行和列方向。 在应用到图像压缩如JPEG格式时低频基函数通常携带了图像的主要信息而高频基函数则负责捕捉图像中的细小变化。由于人类视觉系统对高频细节不那么敏感所以在编码过程中高频成分常常被量化为更低精度从而实现数据压缩。
2.3.2 变换压缩原理框图
G : 输入源图像 G’ :解码后的图像 U 二维正交变换 U’ : 二维正交逆变换 function [I2,mask] reconstructImage(I,n) % Reconstruct the image from n of the DCT coefficients in each 8-by-8 % block. Select the n coefficients with the largest variance across the % image. Second output argument is the 8-by-8 DCT coefficient mask. % Compute 8-by-8 block DCTs. f (block) dct2(block.data); A blockproc(I,[8 8],f); % Compute DCT coefficient variances and decide % which to keep. B im2col(A,[8 8],distinct); vars var(B); [~,idx] sort(vars,descend); keep idx(1:n); % Zero out the DCT coefficients we are not keeping. B2 zeros(size(B)); B2(:,keep) B(:,keep); % Reconstruct image using 8-by-8 block inverse % DCTs. C col2im(B2,[8 8],size(I),distinct); finv (block) idct2(block.data); I2 blockproc(C,[8 8],finv); mask false(8,8); mask(keep) true; end