依据滤波的经型,其中最为经典的饶是Mono
SLAM,以扩大卡尔曼也后端,追踪前端十分疏散的特征点,以相机的即状态和所有路标点为状态量,更新其均值和方差。

算法介绍

不久前而举行领域概念的提,TFIDF作为一个那个经典的算法可以当作内部的如出一辙步处理。

有关TFIDF算法的牵线好参见这首博客http://www.ruanyifeng.com/blog/2013/03/tf-idf.html。

计算公式比较简单,如下:

 统计 1

    定位包括以适度的方确定机器人在条件中的此时此刻态度。

代码实现

package edu.heu.lawsoutput;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * @ClassName: TfIdf
 * @Description: TODO
 * @author LJH
 * @date 2017年11月12日 下午3:55:15
 */

public class TfIdf {

    static final String PATH = "E:\\corpus"; // 语料库路径

    public static void main(String[] args) throws Exception {

        String test = "离退休人员"; // 要计算的候选词

        computeTFIDF(PATH, test);

    }

    /**
    * @param @param path 语料路经
    * @param @param word 候选词
    * @param @throws Exception 
    * @return void 
    */
    static void computeTFIDF(String path, String word) throws Exception {

        File fileDir = new File(path);
        File[] files = fileDir.listFiles();

        // 每个领域出现候选词的文档数
        Map<String, Integer> containsKeyMap = new HashMap<>();
        // 每个领域的总文档数
        Map<String, Integer> totalDocMap = new HashMap<>();
        // TF = 候选词出现次数/总词数
        Map<String, Double> tfMap = new HashMap<>();

        // scan files
        for (File f : files) {

            // 候选词词频
            double termFrequency = 0;
            // 文本总词数
            double totalTerm = 0;
            // 包含候选词的文档数
            int containsKeyDoc = 0;
            // 词频文档计数
            int totalCount = 0;
            int fileCount = 0;
            // 标记文件中是否出现候选词
            boolean flag = false;

            FileReader fr = new FileReader(f);
            BufferedReader br = new BufferedReader(fr);
            String s = "";

            // 计算词频和总词数
            while ((s = br.readLine()) != null) {
                if (s.equals(word)) {
                    termFrequency++;
                    flag = true;
                }

                // 文件标识符
                if (s.equals("$$$")) {
                    if (flag) {
                        containsKeyDoc++;
                    }
                    fileCount++;
                    flag = false;
                }
                totalCount++;
            }

            // 减去文件标识符的数量得到总词数
            totalTerm += totalCount - fileCount;
            br.close();
            // key都为领域的名字
            containsKeyMap.put(f.getName(), containsKeyDoc);
            totalDocMap.put(f.getName(), fileCount);
            tfMap.put(f.getName(), (double) termFrequency / totalTerm);

            System.out.println("----------" + f.getName() + "----------");
            System.out.println("该领域文档数:" + fileCount);
            System.out.println("候选词出现词数:" + termFrequency);
            System.out.println("总词数:" + totalTerm);
            System.out.println("出现候选词文档总数:" + containsKeyDoc);
            System.out.println();
        }

        //计算TF*IDF
        for (File f : files) {

            // 其他领域包含候选词文档数
            int otherContainsKeyDoc = 0;
            // 其他领域文档总数
            int otherTotalDoc = 0;

            double idf = 0;
            double tfidf = 0;
            System.out.println("~~~~~" + f.getName() + "~~~~~");

            Set<Map.Entry<String, Integer>> containsKeyset = containsKeyMap.entrySet();
            Set<Map.Entry<String, Integer>> totalDocset = totalDocMap.entrySet();
            Set<Map.Entry<String, Double>> tfSet = tfMap.entrySet();

            // 计算其他领域包含候选词文档数
            for (Map.Entry<String, Integer> entry : containsKeyset) {
                if (!entry.getKey().equals(f.getName())) {
                    otherContainsKeyDoc += entry.getValue();
                }
            }

            // 计算其他领域文档总数
            for (Map.Entry<String, Integer> entry : totalDocset) {
                if (!entry.getKey().equals(f.getName())) {
                    otherTotalDoc += entry.getValue();
                }
            }

            // 计算idf
            idf = log((float) otherTotalDoc / (otherContainsKeyDoc + 1), 2);

            // 计算tf*idf并输出
            for (Map.Entry<String, Double> entry : tfSet) {
                if (entry.getKey().equals(f.getName())) {
                    tfidf = (double) entry.getValue() * idf;
                    System.out.println("tfidf:" + tfidf);
                }
            }
        }
    }

    static float log(float value, float base) {
        return (float) (Math.log(value) / Math.log(base));
    }
}            

可取:激光传感器以及声纳允许标准和特别密集的环境结构信息。

结论

得望“离退休人员”在养老保险和社保领域,tfidf值比较大,可以当判断是否为世界概念的一个根据。

当然TF-IDF算法虽然可怜经典,但要生过多供不应求,不克独立依赖其结果做出判断。

很多论文提出了改良措施,本文只是实现了最好基本的算法。

万一有另外思路与设法欢迎讨论。


转载请注明原文链接:http://www.cnblogs.com/justcooooode/p/7831157.html

图像的风味匹配解决了SLAM
中的多寡涉嫌问题。匹配技术可以分为两接近:短基线和添加基线。

预处理

是因为需要处理的候选词大约后3w+,并且语料文档数有1w+,直接挨个文本遍历的语句很耗时,每个词处理时都要同分钟以上。

以缩短时间,首先进行分词,一个歌词输出为同样尽方便统计,分词工具选择的是HanLp。

下一场,将一个世界的文档合并到一个文书被,并为此“$$$”标识符分割,方便记录文档数。

统计 2

下是选择的园地语料(PATH目录下):

统计 3

胸怀地图强调精确地代表地图中物体的位置关系,通常分为稀疏与密地图。

运行结果 

测试词为“退休人员”,中间结果如下:

统计 4

 最终结果:

统计 5

显然特点:描述的凡(二维)图像及之区域。
路标:是出于3D位置及外观信息描述的有血有肉世界被之一个所在。

    路径设计确定了地图中通过环境开展导航的顶尖路线。

本体感应传感器允许实体取得速度,位置变动以及增速度相当测量结果。

地图分为度量地图跟拓扑地图。

特色:固有的噪声,它们不克直接准确估计实体的职,因为漏洞百出是积的。

先是部分凡简介

(c)仿生技术

检测包括处理图像为获大量明了的素。

洋洋视觉SLAM系统以追环境时(或者当视觉复杂的条件中全失败)遭受大量积误差,这致使对机器人位置的估算不相同和完全无协调的地图。
存在三单重点因:

季部分,描述了可以给取的斐然特点的种以及用于落实对图像可能受的各种变换的不变性的讲述吻合。

(3)最后,世界在视觉上是重新的。
有不少好像的纹路,比如更修要素,叶子及砖块要石头的墙壁。
在都会户外环境遭到为会见面世一些体,如交通信号。
这使很不便识别以前探索了之地段,也麻烦在广的土地达到开展SLAM。

对短基线的对应关系,重要的凡要是考虑区域的尺寸和查找区域的尺寸,否则会面世谬误。短基线的短在于计算量大而针对噪音非常灵敏,例如对图像坐标的缪度量将招致差看法之间相距变多少。
但是,可以由此视频序列对相应的特性进行精确的跟踪。 

疏散地图是出于路标组成的地图,不是路标的有的可忽略掉。适用于稳。

缺点:应用场景窄,路标数量少,稀疏特征点容易遗失。现在本着她的付出都终止,有双重上进的驳斥与编程工具。

于冲外观的围检测算法中,核心问题是:如何算图像中的相似性。图像能代表成矩阵,矩阵直接相减的准确率和召回率很不同,可能出现大量的“假正”和“假负”的景。所以针对某种特定的算法,我们统计它在某个数集上的TP,TN,FP,FN的次数,然后计算准确率和召回率。在环检测中,更赞成被把参数设置更严厉一些,或者在检测后加上环检测的步子。

一个大质量的特征有以下特征:它要是好提取,精确的,并且针对旋转,平移,缩放和光芒变化不转换。

叙在于基于图像被的视觉外观来构建特征向量,描述符对位置以及方向变化的不变性将许改进图像匹配同数目融合进程的效率

基线是相隔两单照相机的光学中心(用于捕获一针对图像)的线条。

移动机器人的独立导航问题分为三独关键方面:定位,建图和途径设计。

第五组成部分:涉及图像匹配同数码涉嫌问题。

当激光或声纳等去传感器被用来构建小之静态环境的第二维地图时,SLAM的题材为看是解决之。然而,对于动态,复杂与大的环境,使用视觉作为唯一的表面传感器,SLAM是一个生动活泼的钻世界。

于外表传感器中,例如:声纳,射程激光,照相机和中外定位系统(GPS)

缺点:嘈杂的,范围能力简单,激光传感器和声纳在高度混乱的环境被要以辨别物体方面未适用,昂贵,沉重,由大件设备做,使得它难以用于机载机器人或类人机器人。GPS传感器在窄小的街(城市峡谷),水下,其他星球上效果不可以,有时在室内不可用。

      
使用长基线时,图像于尺寸或视角方面呈现出比较生之转变,这造成图像被的一个点走及外一样贪图如中的其他位置。这会发生一个紧的涉及问题。一个碰邻域的触及吃视点和光照的变化所扭曲,并且相关性措施未克获好之结果。特征匹配的极端简单易行的章程是“暴力匹配”(对擅自两帧图像都召开同所有特征匹配)根据是匹配的数,确定哪点儿帧图像是涉嫌。显然这种思路比较粗燥,缺点显而易见。

强烈特征提取过程由于片独号做:检测与讲述。

初,定位以及建图是单身研究之,后来认识及其是靠的。在外表条件面临,在动态环境遭到,在现着特征极其多还是特别少的环境遭到,在广阔环境遭受,在摄像机的不安静移动中及有还是全遮挡传感器发生时,许多视觉SLAM系统会失败。

(b)采用增量方式利用结构动力学的技术

特性匹配:确定当前看底路标与事先看来的路标之间的对应关系。通过图像以及图像、图像和地图内的描述子进行精确匹配,我们得以呢后续之态度估计,优化等操作减轻大气承受。

极端爱定位的赫特色是由于人工路标产生的风味。这些路标是明知故犯添加到环境中之,目的在于作为导航的救助。

(a)基于滤波的经文型

传感器能够感知并赢得来自周围世界的素的测结果。分为外部传感器和本体感应传感器。

第七有些:描述让观察世界统计之两样方法。

(2)其次,大多数研究者假定探索的条件是稳步的,只含有静态的和刚性的元素;大部分条件都蕴涵移动中之人物与物体。
如果未考虑当下或多或少,移动的元素将会晤惹错误的配合,从而在漫天体系中来不可预知的失实。

    建图将环境的有的考察结果成到一个联合之模子中。

(1)首先,一般认为摄像机运动和,并且明确特色的外观会一致,但总的看这是休正确的。上述假设与显特征检测器的选取跟以的匹配技术高度相关。由于传感器的迅猛移动(例如,由于震或快速方向改变),当照具有小纹理的图像或出于传感器的很快移动如果混淆是非时,这引起照相机位置的不准确。在肯定水平上化解这题目的一样种植办法是采用要帧或者分析实时视觉追踪问题。

亚有介绍了SLAM中之传感器

老三片段单目SLAM的欠缺

FAST特征没有描述子,计算很快。ORB特征点是时底这种方案,改进了FAST检测子不负有方向性的题材,并行使了速度最好快之二进制描述子BRIEF,使整图像特征提取的环节速度加速了。

采取增量方式使用结构动力学的艺:运动构图能由同多级图像被计算场景的3D结构与摄像头位置。SfM算法通过当眼前帧中提取显然特征匹配并拓展非线性优化,来减少重映射误差。SfM对摄像头的定位精度高,但是非自然能闹相容地图。PTAM基于关键帧,把重要帧串起来,然后优化其轨道以及地图,实现了跟及建图过程的连行化,

挑而运的风味的项目在老死程度达在机器人将工作之环境。

森地图要为建模所有看到底物,适用于导航。稠密地图通常是按在某种分辨率,由多有点片组成。对于二维地图是产生好多小格子,对于三维地图是起无数小方块。每个微片有:占据,空闲,未知三种植状态表达该格是否出体。缺点:存储消耗大量空中,大规模度量地图有时见面现出一致性问题。

拓扑地图:强调地图元素之间的涉嫌,由节点和止做,只考虑节点内的连通性。缺点:不适用于抒具有复杂性结构的地形图。如何对地图进行私分形成节点和止,又怎运用拓扑地图进行导航及路设计是有待研究的题目。

发出雅量的显然特点检测器,如:SIFT(尺度不移特征变换):充分考虑了在图像的转移过程遭到起的光照,尺度,旋转变化,但是计算量很要命,普通电脑的CPU无法实时的盘算SIFT特征。需要采用GPU。

解决视觉SLAM问题之技能可分成三类:

对于圈检测出一定量种思路:A、基于里程计的几乎哪关系,无法在积累误差较充分时工作。B、基于外观:仅因两轴图像里的相似性确定回环检测关系。摆脱了积累误差,成为了今日底主流做法。                               

第六片详细回顾了化解视觉SLAM问题之异方法,并讨论了每个方法的通病和优点。