-
路径匹配之距离归并MD算法简析
简述 距离归并算法(Merge Distance)也是一种计算路径相似度的算法(其实“路径归并”是我自己瞎翻译的,因为没有找到更加官方的中文翻译)。跟DTW,LCSS之类不同,他提出来时间不算长,但是思想也是十分简单的。计算方便理解容易,也是进行路径相似度匹配的不错的思路。 问题描述 MD算法解决的问题是,给定两个序列$(A_1,A_2,A_3,A_4...A_n)$和$(B_1,B_2,B_3,B_4...B_m)$,其中每一个元素可以都可以是一个二维坐标点或者是更高维度的坐标。现在我…
-
路径匹配之最长公共子序列LCSS算法简析
简述 LCSS算法其实就是我们熟悉的LCS算法(Longest Common Subsequence 最长公共子序列),一个非常基础的dp。以前一直以为LCS算法没啥用,完全就是为了应付比赛用的,现在才发现原来LCS算法竟然在路径匹配上也能有很大作用。 问题描述 LCSS算法解决的问题是,给定两个序列$(A_1,A_2,A_3,A_4...A_n)$和$(B_1,B_2,B_3,B_4...B_m)$,其中每一个元素可以都可以是一个二维坐标点或者是更高维度的坐标。现在我们需要分别从序列$…
-
路径匹配之动态时间规整DTW算法简析
简述 DTW算法又叫动态时间规整( Dynamic Time Warping),是一个比较简单的dp算法。常用于不等长的离散的路径点的匹配问题,在孤立词语音识别、手势识别、数据挖掘和信息检索等领域有着很不错的表现。 问题描述 DTW解决的问题是,给定两个序列$(A_1,A_2,A_3,A_4...A_n)$和$(B_1,B_2,B_3,B_4...B_m)$,其中每一个元素可以都是一个二维坐标点或者是更高维度的坐标。我们现在需要求出一个“距离”,使得他能够表示这两个路径的相似度。 很…
-
结合连通块平均分割以及投影矫正的验证码分割算法
在上一节 中记录了基于投影的验证码矫正算法的实现。通过矫正,我们可以比较好的将倾斜的字符归一成较为规整的字符,接下来我们需要对矫正后的字符进行分割。简单的方法大概是投影法了,但是很明显,这样做的可靠性并不够。我们也可以找到整张图的最左端和最右端然后平均分割,但是在字符大小不一样的情况下效果也太好。还有个朴素的方法就是找连通块,但是由于存在字符粘连问题,连通块也不能完全区分字符。那么我这里就结合后两种方法,先进行连通块分割,对于能分割的字符直接进行后续处理,对于不能分割的字符再用平均分割的方法分割…
-
用投影法矫正字符旋转
这是段简单的代码,目的是处理旋转验证码的问题,主要思想就是通过将字符以45°到135°的角度投影下来,得到一系列的投影范围,然后得到这当中投影长度最小的一个角度。这个角度我们就可以简单的把他看成是字符的偏转角。然后用这个角度通过仿射变换得到矫正后的字符。 代码 #coding=utf-8 import cv2,os,sys,Image,math import numpy as np from pylab import * %matplotlib inline def getBinary(…
-
关于WordPress中字体加载慢的问题解决方案
最近发现Wordpress有时候加载的特别慢,于是就想办法找了下原因。之前听网上说是因为wordpress用的是Google的字体库,而且是每次都要加载,导致访问慢的,于是当时装了个Disable Google Fonts的插件,禁用了Google字体,然后装了一个Useso take over Google插件,将字体文件改为360托管的字体库,这样就可以访问快点了。当时的效果的确挺好的,结果最近在使用的时候又发现网站访问慢了,用Chrome查了下资源加载的情况,发现访问useso的字体库的时…
-
利用Python在图片中添加文字
使用OpenCV 在图片中添加文字看上去很简单,但是如果是利用OpenCV来做却很麻烦。OpenCV中并没有使用自定义字体文件的函数,这不仅意味着我们不能使用自己的字体,而且意味着他无法显示中文字符。这还是非常要命的事情。而且他显示出来的文字位置也不太好控制。比如下面的代码,他想做的仅仅是显示数字3: 代码: #coding=utf-8 import cv2 import numpy as np from pylab import * %matplotlib inline font=cv…
-
OpenCV的扩展包opencv_contrib的安装
近日想使用OpenCV里面的诸如SIFT、SURF之类的特征提取算法,结果突然发现OpenCV3.0.0这里并没有书上讲的关于SIFT的函数。查了半天才知道,原来有大量的函数并不在OpenCV的稳定发布版本里,而是在OpenCV_contrib这个扩展包里面。搞了半天才把这玩意搞定(自己傻),下面记录下安装的过程,方便日后的安装。 下载 opencv_contrib包独立于opencv的主体,发布在他的github上。直接在这里下载适合的版本即可。 安装 这个玩意的安装其实不难,照着…
-
机器学习中分类准确率的评估方法
对机器学习的分类结果进行分析是一个很重要的过程,之前一直忽略了这一个过程,一直到使用了Scikit-learn之后才发现有一堆不懂的名词需要学习。下面主要解释下混淆矩阵、准确率、召回率、f1-score等概念。这些概念其实也是模式识别和信息检索里面经常碰到的东西。 混淆矩阵(Confusion Matrix) 混淆矩阵其实很好理解,就是把预测值和实际值写在同一个矩阵里。假设总共需要分为两类,那么混淆矩阵就是2x2的大小。每一行就是每一类的实际值,每一列就代表的是每一类的预测值。具体含义见下…
-
Scikit-learn包基本使用
Scikit-learn的包是机器学习使用的最全也是实用的包,封装了许多机器学习算法,包括各种分类、回归、聚类、降维、模型选择、预处理等许多方面的内容,提供了相当于黑盒的接口,非常适合初学者使用。 在朋友的推荐下发现了Kaggle这个网站,这里面有很多的机器学习的数据和基本的题目,通过这些练习可以比较好的掌握机器学习的算法。因此就在这当中拿了Titanic号遇难人员的预测做了个实验。其实做法十分简单,权当熟悉框架了。 题目要求 题目给定了Titannic号上人员的信息(包括阶层、姓名、性…