精华内容
下载资源
问答
  • 2021版高考语文轮复习第3板块语言文字运用13扩展语句压缩2压缩课件
  • 2020高考语文二轮复习板块语言文字运用4压缩课件
  • 2021届高考语文轮复习第部分语言文字运用专题五扩展语句和压缩第二讲压缩练习含解析
  • 2018年高三语文轮总复习语言文字应用压缩第02课典型例题含解析
  • 2018年高三语文轮总复习语言文字应用压缩第04课新题含解析
  • 2018年高三语文轮总复习语言文字应用压缩第05课模拟考试含解析
  • 2018年高三语文轮总复习语言文字应用压缩第01课考纲解读含解析
  • 2018年高三语文轮总复习语言文字应用压缩第03课解题锦囊含解析
  • 2021届高考语文轮复习第部分语言文字运用专题五扩展语句和压缩讲扩展语句练习含解析
  • 2019版高考语文轮复习第三部分语言文字运用专题六语与句式3.6.1扩展语句压缩练习
  • 2021版高考语文轮复习第3板块语言文字运用13扩展语句压缩1扩展语句课件
  • 全国通用2021版高考语文轮复习第1板块语言文字运用专题2语言文字运用主观题考点2扩展语句压缩课时跟踪检测含解析
  • 浙江专用2018版高考语文大二轮复习与增分策略第章语言文字运用专题三精准掌握压缩题的要点
  • 可以支持单页图片识别、打开个文件夹图片批量识别(后期正计划个文件夹内的多个文件夹分组识别,没需求就没做) PDF文件文字识别怎么弄,现将PDF拆成图片,做了个功能批量PDF拆成图片后批量导入图片再识别 ...

    软件不需要安装,直接双击打开就可以用,废话不多说直接上图好了,方便说明问题

    前段时间有人跟我讲说要批量图片(批量名片识别、批量照片识别等)识别,然后就下来研究了一下

    可以支持单页图片识别、打开一个文件夹图片批量识别(后期正计划一个文件夹内的多个文件夹分组识别,没需求就没做)

    PDF文件文字识别怎么弄,现将PDF拆成图片,做了个功能批量PDF拆成图片后批量导入图片再识别

    开发语言C#、基于Net4.5框架做的,软件支持win7以上系统,苹果的文字识别就先暂时不开发

    说说有哪些功能吧

    第一、支持语言:中英文、法语、俄语、葡萄牙、俄语、德语、韩语、日语这些需要更多的还可以加;

    第二、PDF拆图:可以将多个PDF拆成图,分组存放指定文件夹、便于按文件夹批量导入图片等;

    第三、图片压缩:图片太大影响识别,所以我们做了一个图片压缩的工具,可以将图片的范围控制在可识别范围;

               PS:建议图片在4M的范围内,像素也不易过高4096X4096太高了就不支持了

    第四、一键复制:可以将识别出来的文字一键复制出来,方便粘贴到指定位置;

    第五、一键导出:可以将文字导出至记事本txt保存起来,为什么不是word,比较难控制格式哈不在这上面多花精力了

    第六、识别过程中可中途暂停,没有写继续,用的时候发现错误了,就再来一遍,或者把识别的删掉,从没识别的开始

     

    速度嘛2-3秒一页,看图片大小,软件识别需要联网使用,基于人工智能文字识别做的,也有单机版本的准确率不是很高

    有些国际友人问:有没有英语翻译版本的哈,英文的需要自己翻译,或者找个你自己找个翻译我跟你对应翻译上去

    欢迎大家下方提出好的功能和建议,我再来完善完善 

    百度网盘链接:https://pan.baidu.com/s/1zIzGB55PO9h5_xECs4U5YQ  提取码:fvjc 

    土豪下载链接:https://download.csdn.net/download/bbyn1314/11229917

    展开全文
  • ToolWiz Photos,款颠覆你对安卓市场上修图产品认知的APP,几乎囊括了PS的核心功能,好用到根本停不下来。 200多种精美拼图,300多种专业相框,4000多个特色贴纸,150万张壁纸,125种专业滤镜,磨皮祛痘、智能...
    <?php
    $string = "ToolWiz Photos,一款颠覆你对安卓市场上修图产品认知的APP,几乎囊括了PS的核心功能,好用到根本停不下来。
    
    200多种精美拼图,300多种专业相框,4000多个特色贴纸,150万张壁纸,125种专业滤镜,磨皮祛痘、智能美妆、音乐相册、画中画相机、双重曝光、镜像、移轴和镜头模糊、强力去雾、逆光增强、水下增强、多彩滤镜、油画、水粉、素描,写生、毛玻璃、蜡笔、工笔画,甚至包括GAT5效果的美图,足迹的电影模式,ToolWiz Photos一个都不少。
    
    如果您是专业的摄影爱好者,PS里有的直方图、图章、修复、图层融合、抠图、魔法棒、选区、锐化、模糊、去色、反色、黑白、去雾、调色、色相调节、饱和度调节、明度调节、曲线、亮度调节、对比度调节、自然饱和度调节、涂鸦、自动白平衡、色温调节、色调分离,ToolWiz Photos也全部都有,甚至,我们还增加了极坐标、鱼眼、暗角、镜像、文字贴图、万花筒等多种功能。
    
    ===为什么理理更出众====以下为华丽分割线===
    
    【专业的的图像编辑功能】多种专业化工具,让你在手机上也能体验PS级别的修图快感。
    
    【大神级别的滤镜效果】 一百多款专业滤镜震撼来袭,海内外专业设计师鼎力打造,呈现超专业级别的大片特效,重塑你对手机美图软件的认知。
    
    【百分百点赞率的超酷特效】火焰、极坐标、鱼眼、动漫、素描、油画、光效,一大波特效整装待发,随时为您的照片打造出轰动朋友圈的引爆点。
    
    【支持离线测颜值】超强的人脸定位算法,不用上传图片,不用担心隐私被偷看,支持人脸离线识别的相册产品,一键甄别你的颜值水平。
    
    【平行世界里难分真实与幻境】镜像功能可将图片迅速翻转,横向与纵向镜面对称,创造惊人视觉冲击。
    
    【创造360度超现实地心世界】选择不同角度为图像制作极坐标效果。站在宇宙的另一端,俯瞰这个球形世界。
    
    【蒙版让你妙手生花】 图片蒙版功能。擦出你想要的特效,释放你的作图才华。
    
    【把你的故事唱成一首歌】音乐相册让你创作属于自己的MV,用音乐说出你的故事。多款精美的情景模板、海量优美旋律,为你定制属于自己的记忆。
    
    【让照片拥有小情绪】 理理设计师为你们精心设计、手绘海量个性贴纸相框,还收罗了Hello Kitty、哆啦A梦等动漫大咖。嗨翻你的图片!
    
    【相册整理功能】摩天轮式多维分类器,让你轻松整理数千张照片毫无压力。相册廋身功能采用WEBP等强力无损压缩引擎,智能分析照片中的相似作品。
    
    【隐私相册让您高枕无忧】理理的隐私相册功能采用了256位加固算法,强力保护您的私密照片,将您的不安妥帖收藏。伪密码帮您躲过任何人的检查。入侵者自动拍照功能,让你知道知道是谁动了你的奶酪。
    
    Toolwiz Photos支持视频和GIF动图播放,提供照片备注,可以按照时间、地点、标签等自由排列,支持照片回收站,支支持幻灯片,支持夜间模式,支持标签化搜索功能,操作行云流水无卡顿。
    
    你的相册能集图片编辑,美颜,特效,添加电影字幕于一体吗?拼图、涂鸦、相框、贴纸、马赛克、加标签、智能搜索、加密、裁剪、旋转、移动、复制、分享、设置壁纸,ToolWiz Photos都能做到!
    
    还有什么设计师没想到到的功能吗?快来反馈给我们吧。给我们的团队写邮件(sima@btows.com)提出您的意见和建议。理理一定继续挥舞小皮鞭,督促设计师妹妹们在未来的版本中尽快实现您的想法。
    ------------------";
    $key = array("国家级","世界级","最高级","最佳","最大","第一","唯一","首个","首选","最好","最大","精确","顶级","最高","最低","最","最具","最便宜","最新","最先进","最大程度",
        "最新技术","最先进科学","国家级产品","填补国内空白","绝对","独家","首家","最新","最先进","第一品牌","金牌","名牌","优秀","最先","顶级","独家","全网销量第一","全球首发","全国首家",
        "全网首发","世界领先","顶级工艺","最新科学","最新技术","最先进加工工艺","最时尚","极品","顶级","顶尖","终极","最受欢迎","王牌","销量冠军","第一(NO.1)","极致","永久","王牌","掌门人",
        "领袖品牌","独一无二","独家","绝无仅有","前无古人","史无前例","万能");
    $new_str = str_replace($key,"yangcloud",$string);//将原评论里所有在禁词数组里的词语替换为“yangcloud”
    
    $count = strpos($new_str,"yangcloud");//判断yangcloud出现的位置,有则返回位置,无则返回false
    echo $new_str;
    echo $count;
    展开全文
  • 电子地图一把抓V1.0 Google Earth非完美版及无损压缩版 解决了电子地图一把抓原版的下列问题: ● 抓Google Earth卫图时导致地球旋转,无法正确抓图的问题 ● 抓非卫图地图时,在道路边界及文字附近出现噪点问题。...
  • 后缀树常用来查找某一段文字中是否出现过(多个)模式串,通过对目标文字段预处理建立后缀树实现。(如果你不明白,参考本blog有一个 字符串模式匹配总结的文章,里面有一篇参考文章将后缀树)。也可以参考如下文章...

    《编程珠玑》在第15章“珍珠字符串”一节,给出了一个非常漂亮的实现 - 基于目标字符串的后缀数组的实现。

    后缀数组类似于后缀树,但是又有所不同。
    后缀树常用来查找某一段文字中是否出现过(多个)模式串,通过对目标文字段预处理建立后缀树实现。(如果你不明白,参考本blog有一个 字符串模式匹配总结的文章,里面有一篇参考文章将后缀树)。
    也可以参考如下文章。
    后缀树学习 - [ACM]
    http://kinslovertec.blogbus.com/logs/43784965.html 

    (等等,有个疑问,前缀树是什么? 哦,前缀树就是自动机了。字符串多模式匹配中的AC自动机就是一例)

    后缀数组举例 如下目标字符串: banana 其长度为6,则后缀数组的长度为6,分别是以b开头的字串(长度为6),以a开头的字串(长度为5),以n开头的字串(长度为4)。。。最后一个是以a开头的字串(长度为1)。
    后缀[0] banana
    后缀[1] anana
    后缀[2] nana
    后缀[3] ana
    后缀[4] na
    后缀[5] a

    回到正题,查找一段文字中最长的重复字串。(注意:这不同于算法设计课中常讲的两个字符串的最长公共子序列问题(LCS),LCS问题的最长公共字串可以不是连续的)
    最朴素的算法是,让后缀数组之间两两比较,找出最长的公共字串(注意,这里的最长的公共字串必须是以首字符参与匹配的,如果首字母都不匹配,那么长度为0,eg后缀[0]和后缀[1]之间的首字母不匹配,则两者的最长公共字串长度为0.。),但是时间复杂度为O(n^2).


    该思想基于以下两个信息:
    1)如果存在一个最长的重复字串,那么两个字串均是来自文本串不同的后缀,但这两个后缀有相同的前缀!(这个前缀也就是重复字串了)
    2)既然最终结果的后缀肯定拥有相同的前缀,那么我就没有必要让全部后缀之间两两比较,而仅仅比较具有相同的前缀的后缀即可!这可以大大的减少比较的次数,提高效率。

    所以,算法的流程是,先将后缀数组字母排序,然后顺次比较(避免了两两比较)即可。
    后缀[0] a
    后缀[1] ana
    后缀[2] anana
    后缀[3] banana
    后缀[4] na
    后缀[5] nana

    最终的比较结果是 后缀[1] 和 后缀[2] 之间存在最长公共字串 ana。

    后记:
    已经多次领教了从后往前寻找算法的优势,EG BM字符串匹配算法,Sunday算法等。这又是一例!

    编程珠玑的最后习题部分给出了另外一个问题,如何找到两个不同的字符串中的最长连续字串?
    编程珠玑同样利用后缀数组给出了解答,不过答案我看不太明白。

    还有一道,如何找到出现次数超过M次的最长连续字串。(M>=2, 当M==2时,就相当于找最长重复字串)
    答案是
    当M=2时,最长重复字串问题,我们使用的函数是 comlen(a[i], a[i+1]);
    当M>2时,我们就需要使用 comlen(a[i], a[i+M-1]);
    eg M=3时, 仍按照上面的例子,求出的最长字串为 "a“,长度为1; 因为a[i] 和 a[i+M-1]的最长重复字串肯定在a[i+1]~a[i+M-2]之间也重复了,也就是至少重复了M次。
    本例中 a[0] 和 a[2]的重复字串 "a" 在a[1]中也重复了。
    后缀[0] a
    后缀[1] ana
    后缀[2] anana
    后缀[3] banana
    后缀[4] na
    后缀[5] nana

    (注意:该问题等价于找一个字符串中的最长回文串)
    (该地址给出了一个利用后缀数的解答:http://blog.csdn.net/g9yuayon/archive/2008/06/21/2574781.aspx
    该作者的主要思路就是:分别把一个字符串建立一个后缀树,然后把字符串的对应的倒序字符串再建立一个后缀树,把两个后缀树合并为一个后缀树。判断对应的节点的公共最长前缀。(也就是是找两个结点的最近的祖先结点,祖先结点对应的字符串长度即是回文串的半径!)
    建立后缀树的常用技巧是在后缀之后添加结束符。这样可以压缩存储后缀树。如果对两个不同的后缀树的结束符不一样,就可以合并两个不同的后缀树。

    广义的后缀树是两个后缀树的直接合并(两个树采用相同的结束符)。这些知识在上面的链接里面都有。

    后缀数组和后缀树有何联系?
    后缀数和Trie树有何联系?
    其实后缀数组本身用处不大,经过排序后用处就大了,比如可以解决上面提到的查找出现超多M次的最长字串问题。
    把后缀数组代表的字符串按照压缩存储为trie数,就得到了后缀树!

    如果将一个词典典存储为Trie树,那么可以快速的查找某个指定的单词是否在词典中。
    如果将一系列单词(比如一篇文章中的所有单词)存储为Trie树,那么可以快速的查找某个指定的单词是否在文章中出现过!进一步可以查找出现过多少次!(通过统计其属于其得叶子节点数)
    Trie树可用来查找任意字串是否在

    展开全文
  • 无损压缩经典算法

    万次阅读 多人点赞 2016-10-25 22:54:04
    @前言总结经典的文件压缩算法原理,主要包括:哈夫曼压缩算法及其延伸,LZ77算法及其演变算法,LZ78算法及其演变算法,几何编码算法Arithmetic Coding。内容部分摘录翻译自港大‘多媒体...举个例子:个1080p分辨率

    @前言

    总结经典的文件压缩算法原理,主要包括:哈夫曼压缩算法及其延伸,LZ77算法及其演变算法,LZ78算法及其演变算法,几何编码算法Arithmetic Coding。


    1.进行文件压缩的必要性

    像图片、声音、视频这些类型的多媒体数据要比文本数据占用多得多的内存空间,尤其是视频文件,文件传输时占用带宽大,存储又占用大量的硬盘空间。

    举个例子:一个1080p分辨率格式下90分钟的无压缩视频要多大?

    1帧大小 = 1920 x 1080 x 3 = 6220800 bytes (1920x1080是每一帧的像素数,3指的是每个像素红绿蓝三个通道各占一个字节0~256)

    ***每秒大小 = 6220800 x 25 = 155.52MB!***(假设帧率为每秒25帧,很小了!)

    每分钟大小 = 155.52MB x 60 = 9.3312GB!

    90分钟:大约839.81GB

    存储高清视频的蓝光光碟容量不过只有大约50GB,所以视频如果不压缩根本没法存储,更不用说互相传送了。

    2.简单黑白图像的压缩

    假设黑白图像的数据如下图,黑色像素用1编码,白色图像用0编码:

    这里写图片描述

    黑白图像的尺寸为16x8 = 128,因此需要128bits来表示它。

    如果我们从0开始算起,只保存一些列0和1的个数,那么上面的图像信息可以表示为:

    21 6 9 1 5 2 8 1 3 2 1 1 8 1 2 2 2 1 8 6 21

    其中最大的数字是21,所以可以统一使用5bits(2^5=32)来表示每一个数字,那么现在的存储空间变为5x21=105bits,节省了23bits。

    3.字符串行程编码

    和上面黑白图像压缩一样的道理,这里压缩一段字符串:RRRRRGGGBBBBBRRRRGB

    压缩的结果为:5R3G5B4R1G1B

    这种方法叫做行程编码run-ength encoding(RLE),应用于像BMP,TIFF格式的图像文件中。

    但这种压缩编码方式很有局限性,我们无法继续用相同的方法进一步压缩压缩后的数据,比如上面的压缩结果无法继续用这种方法压缩,这种压缩基于数据的重复性。

    4.信息的可压缩性-信息量和信息熵

    信息量

    数据的压缩水平和数据的信息量有关,信息量越大自然数据量越大越难以压缩。数据的信息量如何来衡量呢?

    例子:假设有一个64位的字符串,64个数字,其中63个0,另一个是1,1可能出现在任意位置,也就是在某个位置的概率为1/64。现在从左往右读取知道找到1。(注意下表是找到1之前的概率,当找到1之后,之后的符号确定不可能再出现1了,因此P(bi=1)变为0,P(bi=0)变为1)

    对于在位置i的符号bi,bi为0或者为1的概率分布如下:
    这里写图片描述

    事实上,一个符号的概率越大,那么它包含的信息就越小,也就是信息量和符号出现的概率成反比,信息量的定义为:
    h ( x ) = l o g 2 1 p ( x ) h(x)=log_2\frac{1}{p(x)} h(x)=log2p(x)1

    计算对应的符号信息量表:
    这里写图片描述

    信息量计算:如果1位于第4个位置:000100…0,则总的信息量为:

    Sum = 0.0227 + 0.023 + 0.0235 + 5.9307 = 6

    通用公式:

    ∑ n = 1 i h ( b n ) = ( ∑ m = 66 − i 64 l o g 2 m m − 1 + l o g 2 1 1 / ( 65 − 1 ) ) = l o g 2 ( ( ∏ m = 66 − i 64 m m − 1 ) ( 65 − i ) ) = 6 \sum_{n=1}^ih(b_n)=(\sum_{m=66-i}^{64}log_2\frac{m}{m-1} +log_2\frac{1}{1/(65-1)}) = log_2((\prod_{m=66-i}^{64}\frac{m}{m-1}) (65-i)) = 6 n=1ih(bn)=(m=66i64log2m1m+log21/(651)1)=log2((m=66i64m1m)(65i))=6

    每个字符信息量的和表示了整个字符串的信息量,这里至少需要6位来表示这个字符串,要保存的是公式中的索引(0~63)。

    信息熵

    数据的压缩实际是用更短的数据来表示反复出现的数据实现压缩,因此数据重复率越高或者可预测性越强可压缩性就越高,不同数据可压缩的程度不一样,信息熵是用来衡量数据可压缩的程度的一个参数,计算信息最短的长度的期望,关于信息熵:http://www.ruanyifeng.com/blog/2014/09/information-entropy.html

    上面能精确计算信息量是因为我们知道了字符串的具体结构,对于未知的信息我们只能根据概率计算其信息量的期望,计算公式为:

    H ( X ) = ∑ i P ( x i ) h ( x i ) H(X) = \sum_{i}P(x_i)h(x_i) H(X)=iP(xi)h(xi)

    最差的情况是当所有符号的概率都相同,概率均匀分布,此时信息熵为最大值,因为对于一个子串,根本无法预测下一个符号。

    5.对编码算法的要求

    1. 通过编码后的编码必须可以准确解码,编码必须确定地对应一种原码;
    2. 编码算法得到的编码要容易解码,可以很容易的找到信息的末尾,可以在线解码,可以直接对编码进行解码而不用知道完整的编码信息;
    3. 编码必须是压缩的,否则失去了编码的意义;

    6.哈夫曼编码

    哈夫曼编码是David A. Huffman于1952年发明的一种满足上面对编码算法要求的一种编码算法。

    举一个例子:知道一段字符串全部由a,b,c,d,e五个字母组成,已知了每个字母出现的频率:

    a(0.25),b(0.25),c(0.2),d(0.15),e(0.15)

    【如果不考虑编码算法,使用定长的编码来区别五个字母,不利用频率这些信息,那么五个字母每个字母需要用3bits表示(22=4,23=8).】

    哈夫曼算法是利用频率信息构造一棵二叉树,频率高的离根节点近(编码长度短),频率低的离根节点远(编码长度长),手动构造方法是先将字母按照频率从小到大排序,然后不断选择当前还没有父节点的节点中权值最小的两个,构造新的父节点,父节点的值为这两个节点值的和,直到构造成一棵二叉树,上面的例子构造的Y一棵哈弗曼树如下(由于构造过程中叶子节点的值以及新节点的值可能会相同,所以哈弗曼树的结构不唯一):

    这里写图片描述

    对构造的哈弗曼二叉树进行编码,左边为0,右边为1,就得到一个编码的哈弗曼树,从而对字符串进行编码。

    哈夫曼算法C++实现,使用线性数组存储节点的方式实现,输入上面每个字母的权值可以得到哈弗曼树结构:

    #include <iostream>
    using namespace std;
    
    #define n 5         // 字符个数(叶子个数)
    #define m 2*(n)-1   // 总节点数:1+2+4+8+...+n
    
    typedef struct{
        double weight;   // 节点权重
        int lchild;      // 左子树
        int rchild;      // 右子树
        int parent;      // 父节点
    }HTNODE;
    
    typedef HTNODE HuffmanT[m];  // 一棵线性结构存储的哈弗曼树
        
    /**
     * 哈弗曼树初始化
     */
    void InitHT(HuffmanT T)
    {
        for(int i=0; i<m; i++)
        {
            T[i].lchild=-1;
            T[i].rchild=-1;
            T[i].parent=-1;
        }
        // 依次输入每个节点的权重
        for(int i=0; i<n; i++)
            std::cin>>T[i].weight;
    }
    
    /**
     * 找出还没有父节点的节点中权值最小的两个,p1和p2是要选出的权值最小的两个节点的下标,n1是新父节点的下标
     */
    void SelectMin(HuffmanT T, int n1, int &p1, int &p2)
    {
        int i, j;
        // 先任意找两个没有父节点的节点
        for(i=0; i<n1; i++)
            if(T[i].parent==-1)
            {
                p1=i;
                break;
            }
        for(j=i+1; j<n1;j++)
            if(T[j].parent==-1)
            {
                p2=j;
                break;
            }
        // 搜索替换成权值最小的节点
        for(i=0; i<n1; i++)
            if((T[p1].weight>T[i].weight) && (T[i].parent==-1) && (p2!=i))
                p1=i;
        for(i=0; i<n1; i++)
            if((T[p2].weight>T[i].weight) && (T[i].parent==-1) && (p1!=i))
                p2=i;
        
    }
    /**
     * 构造哈弗曼树
     */
    void CreatHT(HuffmanT T)
    {
        int i, p1, p2;
        InitHT(T);
        // 非叶子节点
        for(i=n; i<m; i++)
        {
            // 找出还没有父节点的节点中权值最小的两个
            SelectMin(T, i, p1, p2);
            T[p1].parent=T[p2].parent=i;
            T[i].lchild=p1;
            T[i].rchild=p2;
            T[i].weight=T[p1].weight+T[p2].weight;
        }
    }
    
    /**
     * 打印哈弗曼树
     */
    void printHT(HuffmanT T)
    {
        for(int i=0; i<m; i++)
        {
            std::cout<<T[i].weight<<'\t'<<T[i].parent<<'\t'<<T[i].rchild<<'\t'<<T[i].lchild<<std::endl;
        }
    }
    
    /**
     * 前台测试
     */
    int main(){
        HuffmanT T;
        CreatHT(T);
        printHT(T);
        return 0;
    }
    

    缩减的哈夫曼算法

    哈夫曼编码的缩减实质是对编码字符分组继续进行子分组内编码。先将所有字符按照出现的概率排序,将概率相近的字符作为一个整体参与上一级的编码,这样上一级的编码数量大大减少,分组内继续进行内部哈夫曼编码,同时在上一级中本组的编码作为组内编码的一个固定的前缀。

    这里写图片描述

    Shift Coding

    和缩减的思想类似,将字符按照频率8个一组分块,每到下一块在前面加111进行区分后继续进行3bit的编码。

    这里写图片描述

    7.Lempel-Ziv压缩算法

    LZ算法及其衍生变形算法是压缩算法的一个系列。LZ77和LZ78算法分别在1977年和1978年被创造出来。虽然他们名字差不多,但是算法方法完全不同。这一系列算法主要适用于字母数量有限的信息,比如文字、源码等。流行的GIF和PNG格式的图像,使用颜色数量有限的颜色空间,其压缩就采用了两种算法的灵活变形应用。

    LZ77:

    推荐阅读文章:

    LZ77压缩算法编码原理详解(结合图片和简单代码)

    LZ77算法原理及实现

    LZ77算法的思想是在编码解码过程中,使用之前刚结束编解码的部分数据的位置索引来代替当前要编解码的数据,压缩的实现靠的是之前编解码结束的部分数据和当前数据的重复性。

    算法中几个重要的对象概念:

    LAB(look-ahead-buffer):将要编码的固定长度的数据缓冲;

    SB(search-buffer):刚过去的固定长度的数据缓冲,搜索缓冲区,也就是临时的数据字典,要从这里面搜索重复数据获得压缩索引;

    Cursor:一个指针,指的是SB和LAB缓冲之间的边界处

    **Token(p,l,c)**编码的结果:

    • p: 第一个数字指的是SB中开始匹配的位置,注意是从Cursor往前倒着数,从1开始数
    • l: 第二个数字指的是匹配成功的字符个数;
    • c: 第三个指的是LAB中匹配结束的下一个字符;

    ***注意:***在匹配时是搜索字典中最长的匹配,且当前的LAB区域如果继续匹配也继续搜索(比如匹配到SB的最后一个字符后下一个到LAB的第一个字符仍然匹配则继续,直到不匹配或匹配数达到了LAB的长度限制则停止。如果在SB中一个都不匹配则不继续搜索,排除LAB第一个字符自身无尽循环匹配的情况)。

    示例:

    字符串“aacaacabcabaaac”的一个LZ77编码示例,其中缓冲长度分别为:LAB=4,SB=6

    这里写图片描述

    LZ77的变形

    ***LZR:***就是SB搜索缓冲的长度不固定了,算法输出的token位长度也是可变的。

    ***LZH:***算法的输出结果又进行了哈夫曼编压缩。

    ***DEFLATE:***当前最流行的基于LZ77的压缩算法,是很多通用的Unix压缩项目‘gzip’的一部分。

    LZ78:

    算法是将编码过程中之前编码过的所有字符作为了一个索引字典,之前的每一次编码是一个字典元素,之后的编码如果包含之前字典的元素则用该元素的索引代替实现压缩(注意是从之前的字典元素中找那个匹配最长的字典元素),同时记录不匹配的那个字符。可以想到,不断更新的字典中最长的字典元素很可能会越来越长且每次长一个字符。

    ***示例:***对字符串“abacbabaccbabbaca“进行LZ78编码。
    这里写图片描述

    LZ78的变形算法

    上面说到LZ78的最长的字典元素只会越来越长不受限制,那么就要使用变长的bit空间来保存字典索引,当前字典的需要保存索引的空间大小为$log2 (i)$ bits, $i$为目前字典中最长字典元素的长度。

    LZC

    算法给字典元素的长度设置一个最大值,如果匹配的结果超出最大值时就选择上一个相对较短的匹配的字典元素,防止字典元素变得太长。如果编码压缩率受限制变得太小,就清空之前的字典,比如重新开始压缩算法。

    LZW

    和LZ78不同的是,算法开始不是空的字典,一开始就把可能的所有单一字符作为最开始的字典,另外不是和LZ78那样记录字典索引和不匹配字符,而是只记录匹配的字典索引(不可能出现不匹配的情况,至少匹配一个字符了)。

    ***示例:***对字符串“abacbabaccbabbaca”进行LZW编码:
    这里写图片描述

    算术编码

    算数编码是考虑到解决哈夫曼编码的一个限制:对于信息的编码,要对每一个字符都要使用一个几个二进制的bit数区别表示,收到整体的影响,平均每个字符可能都要用不少的bit数空间来表示。
    算术编码是将编码的消息表示成实数0和1之间的一个间隔,消息越长,编码表示它的间隔就越小,形成结合越来越紧密的编码,同时需要表示的二进制位数就越多,导致算数编码的最大问题就是计算机的精度问题,精度有限,正常情况下无法进行大量数据的编码,事实上只能编码很短的数据。后来有了其他的先进方法才使算术编码得到应用,具体参考算数编码文章链接。

    推荐阅读:算术编码

    展开全文
  • 文字识别()--传统方案综述

    万次阅读 多人点赞 2019-02-17 12:48:15
    文字识别是计算机视觉研究领域的分支之,归属于...计算机文字识别,俗称光学字符识别,英文全称是Optical Character Recognition(简称OCR),它是利用光学技术和计算机技术印在或写在纸上的文字读取出来,并转...
  • 数据压缩的本质

    千次阅读 2019-03-31 03:05:21
    先来个小例子:有一段文字“我我我我我我有点喜欢喜欢喜欢喜欢lxlxlxlxlxlxlx”一共14个汉字加上14个字符,现在采用某种压缩算法,将其压缩为这样一种形式“6个我1个有点4个喜欢7个lx”一共9个汉字加上6个字符(包括...
  • gzip压缩算法

    万次阅读 2012-07-27 22:50:48
    gzip,zlib,以及图形格式png,使用的是同压缩算法deflate。我们通过对gzip源码的分析来对deflate压缩算法做个详细的说明: 第,gzip压缩算法基本原理的说明。 第二,gzip压缩算法实现方法的说明。 第三,...
  • 当然很多哥们估计也在这方面费劲心思,往往都是采用google提供好的BitmapFactory,但是效果不太理想,如果觉得还行那请你3M的图片压缩到300K或者更小试试看看效果,这里考大家个经常问到的面试题:一张 422x644 ...
  • JPEG压缩原理详解

    千次阅读 多人点赞 2019-03-25 15:36:17
    图片压缩有多重要,可能很多人可能并没有个直观上的认识,举个例子,一张800X800大小的普通图片,如果未经压缩,大概在1.7MB左右,这个体积如果存放文本文件的话足够保存部92万字的鸿篇巨著《红楼梦》,现如今...
  • 数据压缩算法—2无损压缩算法

    千次阅读 2018-12-12 20:55:43
    它是文本中出现频率比较多的单词或词汇组合做成个对应的字典列表,并用特殊代码来表示这个单词或词汇。例如:   有字典列表:   00=Chinese   01=People   02=China   源文本:I am a Chinese people,...
  • Python3.6实现图片文字识别和PDF转WORD图片文字提取- - 需求来源 - -- - 代码实现 - -PDF转WORD- - 需求来源 - -- - 代码实现 - -窗口实现- - 使用PyQt5创建 - -- - 使用tkinter 创建 - -最终实现- - 实现说明 - -- ...
  • JPEG系列三 JPEG图像压缩

    万次阅读 多人点赞 2017-01-08 16:12:38
    本文介绍JPEG图片压缩算法,主要介绍了图片分割、余弦变换、量化、行程编码、哈夫曼编码,最后是个JPEG压缩图片实例分析。
  • JPEG压缩算法

    千次阅读 多人点赞 2017-09-13 17:17:19
    图片压缩有多重要,可能很多人可能并没有个直观上的认识,举个例子,一张800X800大小的普通图片,如果未经压缩,大概在1.7MB左右,这个体积如果存放文本文件的话足够保存部92万字的鸿篇巨著《红楼梦》,现如今...
  • 常见的文本压缩算法

    万次阅读 2017-08-15 14:32:18
    文本压缩是根据一定的方法对大量数据进行编码处理以达到信息压缩存储的过程,被压缩的数据应该能够通过解码恢复到以前的状态,而不会发生信息丢失的现象。2.文本压缩的分类 3.算法描述3.1.Huffman编码1.原理简介 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 60,501
精华内容 24,200
关键字:

如何把一段文字压缩