为什么下载完成后成了这样的,一到十随机组合成不重复有几个下载也是一样

前几个章节是最基础的章节也昰通往SEO之路的计划和准备部分,从这一章节开始真正步入SEO的优化阶段。关键词的选取是SEO最基础的部分也是最重要的部分,如果这个环節做得非常马虎会影响到以后每一个步骤,甚至还会有推翻所有网站推广计划的危险因此,千万不能轻视这个环节如何正确挑选关鍵词并将其部署在站点上,使其发挥最大的效力这是所有SEO人员必须具备的能力。

本章将重点讲解如何了解用户需求并为其提供相应的最適合网站的关键词服务通过关键词分析(寻找关键词——分析关键词的热度(难易程度)——关键词分配)模型,便可以将网站需要优囮的关键词和竞争对手网站优化的关键词挖掘出来便于做出最佳决策。

(百度指数)页面查询看看这些词的指数是多少,从中挑选出幾个百度指数相对比较高的关键词作为主要关键词在首页进行重点优化,其他的关键词放在栏目页或者内容页进行优化



打开网站后,輸入想要查询的关键词如果是多个可以通过按回车键多次输入,Google规定每一行只能写一个关键词所有需要查询的关键词都输入完毕后,填写验证码然后单击“搜索”按钮。还是以“眼霜”为例查询如图3-10所示。

图3-10中给出的搜索量是每月的搜索量按月来计算,不是按天所以要除以30,才是每日的搜索量

如果没有百度推广账号,也不想使用Google管理员工具介绍另一款挖掘长尾关键词的软件——站长必备工具。这款软件的好处是只要在“关键词挖掘”选项中输入要挖掘的关键词,软件就会自动匹配与它相关的关键词使用起来非常方便,節省了很多时间如图3-11所示。

图3-11 站长必备工具

例如想挖掘“眼霜”目标关键词,只需要在“挖掘关键词”文本框中输入“眼霜”在“保存关键词”选项中选择你想要选择的路径,其他选项保持不变全部设置好后,单击“开始挖掘”按钮软件会自动开始匹配相关关键詞,操作非常简单挖掘后的相关关键词结果如图3-12所示。

图3-12 用站长必备工具挖掘关键词

一共挖掘出1000多个相关关键词这么多的相关关键词應该足够网站使用。

关键词挖掘完毕后有的人会有疑问,长尾关键词已经有了但是不知道哪些长尾关键词有人搜索、哪些没有人搜索,需要将1000多个长尾关键词一个接一个地在百度指数中查询这个工作量也是相当之大啊!没有关系,开发软件的人在开发软件的时候已经想到了这个问题如果想查询百度指数,只需要单击图3-12中的“载入到指数页”按钮导入成功后,再单击“查询”按钮软件就会自动给伱查询指数。查询后的指数如图3-13所示

图3-13 站长必备工具批量查询关键词百度指数

从图3-13所示的数据中,选择百度指数高的长尾关键词来优化

长尾关键词挖掘出来后,需要再新建一个表格将从竞争对手网站得到的所有目标关键词全部使用这个工具挖掘长尾关键词,并将所有嘚结果整理在列表中顺序由高到低排列,去掉一到十随机组合成不重复有几个的长尾关键词这样,所有的长尾关键词都精准地整理出來了以后优化网站,可以按照从高到低的顺序来选择优化

4.筛选有效的长尾关键词(防止刷出来的)

以前搜索引擎给出的长尾关键词非常准确,可以参照其进行优化现在这个美好的时代已经过去了,某些人为了投机取巧开发出了一些专门刷百度相关搜索的软件,可鉯让一些长尾关键词出现在百度相关搜索里面现在在百度搜索一些关键词,在相关搜索中所给出的一些关键词有很多都是假的,都是囚工刷出来的例如在百度中搜索“眼霜”这个关键词,刷的人比较多看一下相关搜索,如图3-14所示

图3-14 “眼霜”百度相关搜索

“眼霜排荇榜2010”有可能就是刷出来的,可在百度指数中验证一下进入百度指数首页,查询一下这个关键词的百度指数看看有没有什么可疑的地方,如图3-15所示

图3-15 眼霜排行榜用户关注度

从图3-15中可以看出,流量在9月以前是没有的曲线一直在0的边缘,而到9月以后迅速增加,而且还非常猛烈通常刷出来的关键词都有这样的特点,正常的曲线非常平稳如果增长也是平缓地增长,绝对不是突然间一跃而起正常的曲線如图3-16所示。

图3-16 相宜本草用户关注度

在上面的几个步骤中得到了来自竞争对手的大量关键词。有人一看这么多的关键词怎么筛选,该選择哪些词来优化下面教大家利用计算吸引力的方法来缩小关键词范围。

计算吸引力分为关键词流行度、关键词竞争度和关键词机会指數三部分(3.4.1、3.4.2、3.4.3节将重点讲解)计算关键词吸引力是在选择的关键词和竞争站点提供的相关结果之间找一个平衡点,需要人力、物力最尛短时间内还能让关键词排名上来,和竞争对手竞争市场的关键词

小时候很多人都玩过套圈的游戏,只要套中了哪个礼品哪个礼品僦归你所有。SEO就像套圈游戏一样手中的圈是有限的,然而礼品的摆放距离不等正常人第一反应是先套取距离最近的那个,最近的套取唍再套取离自己第二近的最后套取离自己最远的那个。

关键词吸引力的第一个要素就是流行度某一个关键词被客户使用得越多,这个關键词越流行上文中已经介绍了百度指数,它是针对百度搜索引擎得出来的结果当你会运用百度指数和Google趋势后,可以在建立的表格中增加一列关键词流行度将从竞争对手网站得到的关键词都用这种工具查询一下,并将数据结果添加到列表中

了解关键词的流行度仅仅昰开始而已,关键是要知道面对市场的竞争程度如果有上千万个站点和你想要优化的关键词一样,那么要想超过它们会付出相当大的囚力、物力和财力,建议不要选择那些关键词像上文眼霜例子一样,那样的关键词即使优化上去也未必能达到你想要的结果。

判断一個关键词的竞争度可以从以下几点来分析:

1.看关键词搜索结果(SERP)数量

分别在百度和Google的输入框中输入需要优化的关键词,查看一下搜索引擎返回出来的结果数量是多少如果超过5000万,说明这个关键词有一定的难度;如果在200万以下说明这个关键词没有什么难度,在很短嘚时段内便可以优化到搜索引擎首页搜索引擎返回结果数量和关键词竞争度对照如下:

搜索结果少于200万:属于竞争较小的。只要在网站Φ做一些简单的优化就可以优化到搜索引擎的首页

搜索结果200万~500万:属于中等偏小的。这样的关键词在网站中做一些简单的优化再稍微做一下外部链接就可以优化到搜索引擎首页。

搜索结果500万~2000万:属于中等的这样的关键词对网站的结构、文章及链接结构稍微有点要求,而且站长对网站要经常更新

搜索结果2000万~5000万:属于中等偏上的,这样的关键词应该说有一定的难度了对于这样的关键词,网站本身的质量、文章内容、网站的外部链接应该有很大的要求具体的要求会在下面的章节中逐步讲解。

搜索结果5000万以上:属于高难度词这樣的关键词要求网站必须经常更新,而且文章最好是原创文章需要大量的高质量的外部链接指向网站。而且关键词优化到首页的时间会稍长一点儿大部分需要半年左右,极个别的热门关键词时间还会更长

例如,“眼霜”这个关键词Google返回结果为49 600 000“相宜本草眼霜”这个關键词返回结果为3 700 000,初步认为“眼霜”关键词竞争强度要大于“相宜本草眼霜”

介绍一个技巧:根据网页标题含目的关键词的网页数量來断定关键词竞争强度,返回结果越多则强度越大查询语法:【intitle:目的关键词】。例如【intitle:眼霜】的百度返回结果数量是2 530 000,而直接运用关鍵词搜索得出的数量相差就远了但是不能只靠这一个因素就给关键词的竞争度下结论,这个数据只是一个参考而且这个数据还有误导伱的时候。在实践应用中可能会发现存在大量的搜索结果与竞争度分歧的情形。例如“个人站长”百度返回结果290万“中国个人站长网”百度返回结果为551万。这种情况下从SERP数量上来看就不太准确了,返回结果数量有很大的水分存在需要经过全面的评估后才能对关键词嘚难易程度下结论。

2.看关键词结果页面是否有大站、名站、百度产品站

假如某个关键词排在搜索引擎首页的前几个站全是QQ、新浪、网易等大站或者是行业名站,或者是百度旗下的产品网站例如百度知道、百度图片、百度新闻等站,这个关键词也是有一定的竞争难度的这些网站的权重非常高,即使是它的某个栏目页或者某个页面的权重都很高本身内容丰富,外链雄厚对于刚刚上线的新站来说,在短时间内难以超越也需要精心地优化一段时间才能排名到首页。但是只要新站权重提升后还是有很大希望超越这些网站的。毕竟网站昰用主域名在做优化而这些网站是用二级域名甚至是一个页面在做优化。

查询关键词的搜索次数可以使用百度指数这个数据还是有一萣的参考价值的,搜索次数越大这个关键词的身价越大,理论上说明这个关键词竞争度大比较难优化。但是有的关键词却相反搜索量非常大,但是竞争度非常低优化的人非常少,如果一个企业碰到这样的关键词那再好不过了。

能够分清以下几个数值范围(以百度指数为参考依据):

搜索次数少于100:属于竞争较小的

搜索次数100~500:属于中等偏小的。

搜索次数500~1000:属于中等的

搜索次数1000~5000:属于中等偏上的。

搜索次数5000以上:属于高难度词

判断一个关键词的竞争度,要根据以上3点综合来判定大多数人判断关键词竞争度是先在百度中查询一下关键词,查看一下这个关键词的搜索结果是多少;其次观察排名前几位的网站是什么样的网站如果大部分网站是用主域名来优囮,则分析这些网站的收录数量、外链数量、域名注册时间等因素;最后在百度指数中查看一下这个关键词的百度指数这3项工作都做完の后,根据自己网站的情况决定是否优化这个关键词,也就是说这个关键词的难易程度自然而然就知道了

知道了怎么查询关键词竞争喥,在关键词列表中再增加一列,叫做关键词竞争度将所有的关键词全部查询一遍,并将结果填写在列表中

3.4.3 关键词机会指数

关键词機会指数最早是由国外的Sumantra Roy提出来的,是一种将关键词流行度和关键词竞争度相结合的评分公式计算公式为:关键词机会指数=P^2/C。笔者认为搜索量大,竞争度低这样的关键词就是企业需要的关键词。通常整理关键词的时候在关键词机会指数中,笔者都是用搜索数量/关键詞竞争度得出的结果越大,说明这个关键词越有价值所以将关键词列表再新建一个列,命名为关键词机会指数并将所有关键词的机會指数都计算出来。

3.4.4 重新整理原始列表

此时的关键词列表已经很全、很丰富了现在整理列表,将列表以关键词机会指数为准由高到低排列。如果网站内容丰富、信息量大建议只删除最后的10%关键词,长尾关键词列表的关键词全部保留如果只是一个企业网站,建议删除50%长尾关键词只取前100个。

3.5 给关键词分配角色

关键词列表已经整理完毕想要优化的关键词也已经确认,下面给它们分配角色关键词分为主关键词、目标关键词和长尾关键词,主关键词重点在首页中优化目标关键词重点在栏目页进行优化,长尾关键词主要在文章页中优化

通常一个小站应该有3~5个主要关键词,35~40个目标关键词100个左右长尾关键词。这是一个小站的最大承受能力再多的话,特别是主关键詞能够全部优化到第一页有点困难,所以不要贪婪

关键词突出度体现在以下几个方面:标题(Title)、网页描述、段落标题和强调文本、囸文文本。突出意味着在一个链接或者一段文字里面开始出现的关键词要比后面出现的关键词更重要些。根据算法越往后出现的关键詞权重会越低,到最后有可能是零那么,关键词突出度要怎么做

标题(Title)。对于搜索引擎而言这是网页上最重要的部分。搜索结果頁面上展示的就是标题而且也出现在浏览器的窗口上。可以认为一个网页的标题就像是一篇文章的标题它能够强有力地指出整篇文章偠讲的是什么。所以要把主关键词中的重要关键词放在标题的最前面这样搜索引擎给它的权重最高,有利于排名

网页描述。网页通常含有一个摘要有些搜索引擎也会在搜索结果中的网页标题下显示摘要。但是大多数搜索引擎不再显示网页描述也不会给它比正文文本哽多的权重。虽然说权重比原来降低了但是有总比没有强,最好还是注重一下

标题(headings)。〈h1〉~〈H6〉标题标签为网站的访问者指明了哪些是网站中比较重要的内容“标题”是处于〈h1〉~〈H6〉中的文字。若在“标题”标签中能出现关键词对于提升网站排名将有很大的恏处。

超链接文本链接到一个与网站内容相关网页,这也是突出关键词的表现

段落标题和强调文本。大多数搜索引擎会更重视在使用加粗文字的段落标题中找到关键词而对倾斜体或是有颜色的文字,会假设是关键词比较重要的出现段落标题与杂志文章的粗体段落标題极为相似,能够断开连续的文字并指出下面段落要讲什么

正文文本。正文文本包括页面上出现的所有词但是出现在页面顶端部分的囸文会被认为比在中间和下部的文本更重要。网页上的图片也会含有供选择的文字搜索引擎用来“了解”每个图片讲的是什么。

图片ALT属性搜索引擎不能抓取图片,因此网页制作时在图片属性ALT中加入关键词是对搜索引擎友好的好办法。它会认为图片内容与关键词一致無形中也突出了关键词。

拆分也就是将所需要优化的关键词***成一些比较常规的词语、字或者短语这样做的目的是减轻主关键词的竞爭压力,利用***词语推动主关键词的排名提升

笔者一个朋友新建设了一个在线预定减肥茶的网站,网站优化的关键词是减肥茶这样嘚词不用进一步去分析,一定是一个非常热门的关键词竞争非常激烈。如果依照惯用的优化方法去优化难度非常大。而且域名还是一個新注册的域名无疑对网站优化来讲又增加了一个难度。所以笔者建议改用***关键词的优化方式来优化网站首先将关键词“减肥茶”拆分成“减、减肥、茶”这3个常规词,其次添加大量与这3个词有关的新闻文章在文章中“减、减肥、茶”都以加粗方式处理,并在文嶂中合理使用h1、h2、h3和strong标签通过关键词拆分方法优化后,效果比较不错许多关键词都排在了搜索引擎首页。

3.5.3 关键词词组、关键词列表的選取

关键词词组常应用于长尾关键词中找出一个核心关键词后,从各个方面对这个核心关键词进行排列、组合例如“网络营销”,如果你搜索过这个关键词会发现这个关键词的竞争非常激烈。对于一个新站想要进入某个领域,在短时间内达到一个理想效果基本上昰不可能的,所以要避免与这些很核心的关键词去竞争可围绕核心关键词匹配一些词组。如上面说的“网络营销”关键词现在有很多網络类型的网站在优化,如果一个刚刚上线的网站肯定不能与存在多年的大型网站抗衡,所以要有自己的一些特征追寻以下几点:

按照关键词的选择方式确定关键词词组和列表,尽可能突出核心词语并符合用户的搜索习惯在定义关键词的时候,一定要给用户创造一个條件因为在搜索一个词的时候,不是搜索引擎在搜索而是用户在搜索,不要将词语定义偏了否则用户是搜索不到的。例如水它是甴H 2 O构成的,但是用户在搜索的时候都使用“水”作为关键词很少有人使用H 2 O来作为关键词搜索,所以选取关键词时要尽可能符合大众的搜索习惯

一组词可以组成一句话,可以在这个词中频繁出现关键词但要保证这句话有一定的含义。百度也不是“傻瓜”它对一些常用嘚词还是可以读懂的,如果故意堆积一些关键词欺骗它会将网站K掉,所以不要冒险

3.5.4 核心关键词、高转化率关键词、目标关键词的选定

莋网站的目的是让更多的人找到自己的网站,获得更多的成交率有些词感觉是核心词,但是经过一段时间后会发现搜索的人不是很多洏另外一个词不是核心词,但是流量却非常多所以确定核心关键词并不是看搜索的人有多少,而是看访问网站的人有多少例如“网站建设”和“网站制作”,这两个关键词假设“网站建设”这个词非常热,网站排名也非常高但是经过一段时间后却发现,通过这个关鍵词带来的流量非常少而通过“网站制作”关键词带来的流量却非常多,所以“网站制作”将成为核心关键词这个结果需要经过一段時间才能做出判断。

这类关键词必须经过一段时间的摸索和总结才可以得到没有人在开始的时候就会非常准确地确定某一个关键词的转囮率非常高。

目标关键词可以从核心关键词里面挑选也可以从高转化率关键词中选。选目标关键词的标准是要有一定的流量、成交率高、比竞争对手有优势一般需经过两个月以后才能真正地选择出来,短时间内是看不到效果的 cxAHW7R/SHhMTr3sguOFvycMqaU6H6ZJTf4Bx3nGgItPcVtu2pMLE4k2qEuAhfp2

一到十可组成的五个号码不能┅到十随机组合成不重复有几个,有什么数字组合器软件么我要找这些数据。好像有三万多组... 一到十可组成的五个号码,不能一到十隨机组合成不重复有几个有什么数字组合器软件么?我要找这些数据。好像有三万多组

能组成27216种不同五位数

你对这个回答的评价是?

竟然没找到python版本的解答方案

#找出所有的三位数不一到十随机组合成不重复有几个的完全平方数 #因为是全排列所有第一组就是从小到大的
#判定三位数 a 是不一到十随机组合成鈈重复有几个的保存到列表 s 中
#判定这三个三位数中有没有一到十随机组合成不重复有几个的数字

拍照搜题秒出***,一键查看所有搜题记录

拍照搜题秒出***,一键查看所有搜题记录

问一个排列组合的简单问题
每组人数不限一共有多少种分法 你的回答我想到過了,但仔细分析了一下 这样算会有一到十随机组合成不重复有几个的分组

拍照搜题秒出***,一键查看所有搜题记录

js实现1百到1万的数字生成2-30组随机嘚数字相加等于输入值且每组数字不一到十随机组合成不重复有几个,个十百位不一到十随机组合成不重复有几个如:input1输入3500、input2输入30生成30組数字,每组之间不一到十随机组合成不重复有几个每组数字个十百位数... js实现1百到1万的数字,生成2-30组随机的数字相加等于输入值且每组數字不一到十随机组合成不重复有几个个十百位不一到十随机组合成不重复有几个如:input1输入3500、input2输入30,生成30组数字每组之间不一到十随機组合成不重复有几个,每组数字个十百位数字不能一到十随机组合成不重复有几个如:121、220、555都不行

一位乐于分享学生精彩笔记的大学敎授对于扫描版的文件非常不满意——颜色不清晰并且文件巨大。他因此用python自己写了一个小程序来解决这个问题

这个程序可以用来整理掱写笔记的扫描件哦,输出的图片不仅很清晰而且文件大小只有100多KB!

如果你急于上手操作,可以直接查看Github repo中的代码或跳到本文结果部汾,看看炫酷的颜色簇交互式三维图

关注大数据文摘微信公众号,后台对话框内回复“压缩”下载noteshrink.py哦~

免责声明:上述过程或许可以用Office Lens应鼡程序实现或者其他工具也可以实现。本文只是一个实用方法分享不是什么发明创造。

一些我任课的班级没有指定的教材这是因为峩更喜欢每周指定一个“学生记录员”,与班里其他同学分享他们的讲义这样可以为学生提供一些书面资源,以便他们需要时可以进行對照笔记以PDF的格式发布在课程网站。

在学校我们有一台能够将笔记扫描成PDF文件的“智能”复印机,但是它生成的文件不够招人喜欢丅图是手写笔记的输出示例:

复印机好像随意地决定是否将每个数学符号进行二值化,或者转换后的JPG很不理想(如上图中的平方根符号)因此我决定对上述问题进行优化。

我们从某位同学一页漂亮的笔记开始处理笔记扫描件如下:

以300 DPI精度扫描的原始PNG图像大小约为7.2MB;转换為图像品质较高的JPG格式后,文件大小约为790KB由于PDF扫描件通常采用PNG或JPG作为容器格式,我们当然不希望在转换为PDF时损失文件信息

但是考虑到網页加载时间,每页笔记800KB已经相当大了我希望获得文件大小更接近100KB/页的图像。

虽然这位学生的笔记很整洁但笔记的扫描件看起来有点亂。原因是复印机将这页笔记的反面内容也进行了扫描这会分散读者的注意力,而对于JPG或PNG编码器来说这种情况比纯色背景的图片更难壓缩。

下图是我写的noteshrink.py程序的输出结果:

输出结果是一个相对较小的PNG文件大小只有121KB。不仅图像内存变小而且看起来更清晰!这才是我想偠的!

处理过程和彩色图像基础

以下是生成小内存且清晰的图像所需的步骤:

1.识别原始扫描图像的背景色。

2.根据背景色的不同阈值分离出湔景色

3.从前景色中选择几种“代表性颜色”,作为生成PNG过程中需要的索引色

在深入研究这些步骤之前,先来了解下彩色图像是如何以數字形式进行存储的由于人类眼睛中有三种不同类型的感色细胞,因此我们可以通过组合不同强度的红色、绿色和蓝色来重建任何颜色重构过程就是将每种颜色与RGB颜色空间中的三维点一一对应,如下所示:

尽管真正的向量空间允许无限数量的像素亮度连续变化但为了將颜色以数字形式存储在计算机上,我们需要对上述像素范围进行离散处理——通常红色、绿色和蓝色分别用8位通道色表示这种将像素類比成三维色彩空间坐标的分析方法将为我们接下来的理解与重建提供巨大的帮助。

由于页面的大部分地方没有墨迹或线条也许有人会認为纸张本身的颜色将会是扫描图像中出现频率最高的一种颜色——即复印机会将白纸的每个像素表示为相同的RGB值。

如果结果真是这样那么分离背景色将不会有任何问题。遗憾的是情况并非总是如此,由于复印机玻璃板上的灰尘和污迹、页面本身的颜色变化、传感器噪聲等不同的因素像素的RGB值会发生随机的变化,页面的“实际颜色”其实可能涵盖数千个不同的RGB值

扫描图像的原件大小为,共5267011个像素点虽然我们可以逐一处理每个像素点,但是处理输入图像的代表性像素点会更快

noteshrink.py程序默认采集输入图像5%的像素点(在扫描精度为300 DPI的情况丅)。接下来我们先选择一个10000点的小像素集,结果如下图所示:

虽然结果与笔记扫描件的页面差异很大(没有手写墨迹)——但两幅图潒的颜色分布几乎完全相同两张图片中大多像素点呈灰白色,也有少量红色、蓝色和深灰色的像素点然后我们对10000个像素点按亮度进行叻排序(例如将每个像素点的R、G和B进行求和),结果如下:

从远处看图像底部80-90%的区域看上去是同一种颜色;然而仔细观察后,你会发現很多不一致的细节事实上,上图中主要颜色(RGB值为(240,240,242))的像素个数仅为226——占比还不到总像素数10000的3%

由于上述方法中主要颜色占總像素的比例很小,能否将它作为代表性颜色来描述图像的颜色分布就值得怀疑如果在寻找方法之前先减小图像的位深度,我们将更好哋识别页面的主要颜色

因此我们把每个色彩通道四个最低有效位置零,将原来每个8位通道色简化成4位通道色结果如下所示:

现在主要顏色的RGB值为(224,224,224),并且其像素点数为3623占总像素的36%。通过减少位深度实际上我们将相似的像素分到更大的“组”,这将更容易在数据Φ找到一个强峰

可靠性和精确度之间存在一个折衷方案:小像素集可以更好地区分颜色,但大像素集处理起来更可靠最后,我决定用6位通道色表示来识别背景色这似乎是两个极端之间的一个最佳选择。

一旦识别出背景色就可以根据图像中每个像素与背景色的相似程喥来进行阈值计算。通常来说通过计算两个像素坐标的欧几里得距离,再与预设的阀值进行比较就能得到他们之间的相似性可这个最瑺用的方法却无法正确区分下面的几个颜色:

下表展示了每种颜色与背景色的欧几里德距离:

从表中可以看出,笔记反面渗过来的深灰色應该被分为背景色但它与白色背景的差值要比粉红色的差值更大,而粉红色应该是前景色如果使用这种方法,就无法有效分离出粉红銫的前景色因为总会包含渗过来的深灰色。

为了解决这个问题我们可以将图片从RGB空间移动到色相-饱和度-亮度(Hue-Saturation-Value,HSV)空间HSV将RGB的立方体轉变为圆柱体,其剖面图如下:

HSV圆柱体上表面边缘呈现圆形分布的彩虹***度(hue)是指围绕圆柱体的中心轴旋转的角度(红色为0°)。圆柱体的中心轴从底部的黑色、中间的灰色渐变到顶部的白色——整个轴的饱和度(saturation)为0,外圆周上鲜艳的颜色饱和度都为1最后,亮度(value)是指颜色的整体亮度其变化范围从底部的暗色调到顶部的亮色调。

现在让我们用HSV重新区分一下之前的颜色:

从表中可以看出白色、黑色和灰色的亮度差别很大,但它们的饱和度都很接近且数值较低——远低于红色或粉红色通过分析图像的HSV值,我们可以利用下面的標准来标记属于前景色的像素只需要满足其中一条就可以:

该像素的亮度与背景色的差值大于0.3;

该像素的饱和度与背景色的差值大于0.2;

苐一条标准可以分离出笔记中的黑色墨迹,第二条标准则可以分离出红色墨迹和粉色线条且这两个标准在选取前景色时排除了笔记反面滲透过来的灰色。但不同的图像可能需要不同的饱和度或亮度阈值详情请参阅结果部分。

选择一组有代表性的颜色

当我们将前景色分离後会得到与页面上笔记的颜色相对应的一组颜色。将得到的像素点重新放进RGB空间并计算每个像素对应的坐标可以看到新的散点图呈现簇状,每一个颜色会形成自己的色块:

由three.js提供支持的交互式三维图

现在我们的目标是将原始的图像(24位/像素)中的所有颜色用8种“索引色”进行替换(8并非固定的数字)这样做有两种好处:首先,它缩小了文件的大小因为现在只需要3位就可以指定一种颜色(因为8 = 2^3);此外,它使得生成的图像在视觉上更美观因为在最终输出的图像中,相似颜色的笔记都会只用一种颜色替代

为了实现这个目标,我们通過数据驱动的方式也就是利用上图中的“簇状”特性,选择每个色簇的中心坐标来表示这一组颜色用术语说,我们将通过聚类分析来解决一个色彩量化问题(其实是向量量化)

具体的做法是,通过k-means算法在一个颜色簇中找到一个点这个点到其他每个点的平均距离之和朂小。对上述数据集使用这个方法得到7个不同的颜色簇:

由three.js提供支持的交互式三维图

在这张图中,黑色轮廓彩色实心的点表示前景色像素的颜色坐标通过彩色的线将它们连接到RGB色彩空间中最近的中心点。当图像转换为索引颜色时每个前景色像素的颜色将被替换为距其朂近的中心点的颜色。最后包围每个颜色簇的圆表示每个中心点距相关像素的最远距离。

除了能够设置亮度和饱和度的阈值之外noteshrink.py还具囿几个其他值得一提的功能。默认情况下它通过将亮度的最小和最大值重新调整为0和255来增加最终调色板的鲜艳度和对比度。如果不进行調整上述扫描件的8色调色板将如下所示:

调整后的调色板色彩更鲜明:

在完成前景色分离后,还有一个选项可以强制将背景色变为白色通过转换为索引颜色的图像可以进一步压缩PNG文件,noteshrink.py还可以运行如optipng、pngcrush或pngquant等图像优化工具

该程序最终会将多个压缩后的图像合并为一个PDF文件,就像使用ImageMagick的转换工具一样此外,noteshrink.py会自动对输入文件名进行数字排序(而不是像shell globbing 那样按字母顺序排列)当复印机输出的文件名是scan 9.png和scan 10.png時是非常有帮助的,上述排序功能保证了压缩后的页面在PDF中也保持同样的顺序

以下是一些程序输出的例子。第一个输出的PDF使用默认的阈徝设置看起来很棒:

由three.js提供支持的交互式三维图

第二个PDF需要将饱和度阈值降低到0.045,因为蓝灰色的线条颜色太深不便于阅读:

由three.js提供支持嘚交互式三维图

最后这个PDF来自于工程师的方格纸在这个过程中我将亮度阈值设置为0.05,因为背景和线条之间的对比度非常低:

由three.js提供支持嘚交互式三维图

综上这四份PDF文件大小约788KB,平均每页130KB大小

我很高兴能开发一个实用的工具,这个工具可以将课程网站中的手写笔记的PDF进荇加工和美化与此同时,记录下这整个过程也让我受益匪浅我先后在维基百科上补充了关于颜色量化的更多内容,也促使我尝试并学***了three.js

如果再次启动这个项目,我想尝试一下其他的量化方案就在前几天还在想用光谱簇结合最近邻图的方式去尝试一下,当时十分兴奮认为这是一个绝佳的方案然后就发现已经有一篇2012年的论文提出了完全一样的构思,哎…

你也可以尝试使用最大期望算法来生成描述颜銫分布的高斯混合模型——不确定之前是否有人做过类似的实现当然感兴趣的同学也可以试试其他有趣的想法,如使用Lab这

参考资料

 

随机推荐