• Struck 跟踪算法(二)



    以下開始读详细源代码

    config.h文件

    /* 
     * Struck: Structured Output Tracking with Kernels
     * 
     * Code to accompany the paper:
     *   Struck: Structured Output Tracking with Kernels
     *   Sam Hare, Amir Saffari, Philip H. S. Torr
     *   International Conference on Computer Vision (ICCV), 2011
     * 
     * Copyright (C) 2011 Sam Hare, Oxford Brookes University, Oxford, UK
     * 
     * This file is part of Struck.
     * 
     * Struck is free software: you can redistribute it and/or modify
     * it under the terms of the GNU General Public License as published by
     * the Free Software Foundation, either version 3 of the License, or
     * (at your option) any later version.
     * 
     * Struck is distributed in the hope that it will be useful,
     * but WITHOUT ANY WARRANTY; without even the implied warranty of
     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     * GNU General Public License for more details.
     * 
     * You should have received a copy of the GNU General Public License
     * along with Struck.  If not, see <http://www.gnu.org/licenses/>.
     * 
     */
    
    #ifndef CONFIG_H
    #define CONFIG_H
    
    #include <vector>
    #include <string>
    #include <ostream>
    
    #define VERBOSE (0)
    
    class Config
    {
    public:
    	Config() { SetDefaults(); }
    	Config(const std::string& path);
    //选择提取特征的方式  Haar特征,Raw特征,Histogram特征
    	enum FeatureType
    	{
    		kFeatureTypeHaar,
    		kFeatureTypeRaw,
    		kFeatureTypeHistogram
    	};
    //SVM四种核函数
    	enum KernelType
    	{
    		kKernelTypeLinear,
    		kKernelTypeGaussian,
    		kKernelTypeIntersection,
    		kKernelTypeChi2
    	};
    
    	struct FeatureKernelPair
    	{
    		FeatureType feature;
    		KernelType kernel;
    		std::vector<double> params;
    	};
    	
    	bool							quietMode;
    	bool							debugMode;
    	
    	std::string						sequenceBasePath; //图像序列路径
    	std::string						sequenceName;//图像序列目录名
    	std::string						resultsPath; //结果路径
    	
    	int								frameWidth;//图像宽度
    	int								frameHeight;//图像高度
    	
    	int								seed;
    	int								searchRadius; //搜索半径
    	double							svmC;
    	int								svmBudgetSize; //svm大小
    	std::vector<FeatureKernelPair>	features;
    	
    	friend std::ostream& operator<< (std::ostream& out, const Config& conf);
    	
    private:
    	void SetDefaults();
    	static std::string FeatureName(FeatureType f);
    	static std::string KernelName(KernelType k);
    };
    
    #endif


    /* 
     * Struck: Structured Output Tracking with Kernels
     * 
     * Code to accompany the paper:
     *   Struck: Structured Output Tracking with Kernels
     *   Sam Hare, Amir Saffari, Philip H. S. Torr
     *   International Conference on Computer Vision (ICCV), 2011
     * 
     * Copyright (C) 2011 Sam Hare, Oxford Brookes University, Oxford, UK
     * 
     * This file is part of Struck.
     * 
     * Struck is free software: you can redistribute it and/or modify
     * it under the terms of the GNU General Public License as published by
     * the Free Software Foundation, either version 3 of the License, or
     * (at your option) any later version.
     * 
     * Struck is distributed in the hope that it will be useful,
     * but WITHOUT ANY WARRANTY; without even the implied warranty of
     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     * GNU General Public License for more details.
     * 
     * You should have received a copy of the GNU General Public License
     * along with Struck.  If not, see <http://www.gnu.org/licenses/>.
     * 
     */
    
    #include "Config.h"
    
    #include <fstream>
    #include <iostream>
    #include <sstream>
    
    using namespace std;
    
    Config::Config(const std::string& path)
    {
    	SetDefaults();
    	
    	ifstream f(path.c_str());
    	if (!f)
    	{
    		cout << "error: could not load config file: " << path << endl;
    		return;
    	}
    	
    	string line, name, tmp;
    	while (getline(f, line))
    	{
    		istringstream iss(line);
    		iss >> name >> tmp;
    		
    		// skip invalid lines and comments
    		if (iss.fail() || tmp != "=" || name[0] == '#') continue;
    		
    		if      (name == "seed") iss >> seed;
    		else if (name == "quietMode") iss >> quietMode;
    		else if (name == "debugMode") iss >> debugMode;
    		else if (name == "sequenceBasePath") iss >> sequenceBasePath;
    		else if (name == "sequenceName") iss >> sequenceName;
    		else if (name == "resultsPath") iss >> resultsPath;
    		else if (name == "frameWidth") iss >> frameWidth;
    		else if (name == "frameHeight") iss >> frameHeight;
    		else if (name == "seed") iss >> seed;
    		else if (name == "searchRadius") iss >> searchRadius;
    		else if (name == "svmC") iss >> svmC;
    		else if (name == "svmBudgetSize") iss >> svmBudgetSize;
    		else if (name == "feature")
    		{
    			string featureName, kernelName;
    			double param;
    			iss >> featureName >> kernelName >> param;
    			
    			FeatureKernelPair fkp;
    			
    			if      (featureName == FeatureName(kFeatureTypeHaar)) fkp.feature = kFeatureTypeHaar;
    			else if (featureName == FeatureName(kFeatureTypeRaw)) fkp.feature = kFeatureTypeRaw;
    			else if (featureName == FeatureName(kFeatureTypeHistogram)) fkp.feature = kFeatureTypeHistogram;
    			else
    			{
    				cout << "error: unrecognised feature: " << featureName << endl;
    				continue;
    			}
    			
    			if      (kernelName == KernelName(kKernelTypeLinear)) fkp.kernel = kKernelTypeLinear;
    			else if (kernelName == KernelName(kKernelTypeIntersection)) fkp.kernel = kKernelTypeIntersection;
    			else if (kernelName == KernelName(kKernelTypeChi2)) fkp.kernel = kKernelTypeChi2;
    			else if (kernelName == KernelName(kKernelTypeGaussian))
    			{
    				if (iss.fail())
    				{
    					cout << "error: gaussian kernel requires a parameter (sigma)" << endl;
    					continue;
    				}
    				fkp.kernel = kKernelTypeGaussian;
    				fkp.params.push_back(param);
    			}
    			else
    			{
    				cout << "error: unrecognised kernel: " << kernelName << endl;
    				continue;
    			}
    			
    			features.push_back(fkp);
    		}
    	}
    }
    //默认參数设置
    void Config::SetDefaults()
    {
    
    	quietMode = false;
    	debugMode = false;
    	
    	sequenceBasePath = "";
    	sequenceName = "";
    	resultsPath = "";
    	
    	frameWidth = 320;
    	frameHeight = 240;
    	
    	seed = 0;
    	searchRadius = 30;
    	svmC = 1.0;
    	svmBudgetSize = 0;
    	
    	features.clear();
    }
    
    std::string Config::FeatureName(FeatureType f)
    {
    	switch (f)
    	{
    	case kFeatureTypeRaw:
    		return "raw";
    	case kFeatureTypeHaar:
    		return "haar";
    	case kFeatureTypeHistogram:
    		return "histogram";
    	default:
    		return "";
    	}
    }
    
    std::string Config::KernelName(KernelType k)
    {
    	switch (k)
    	{
    	case kKernelTypeLinear:
    		return "linear";
    	case kKernelTypeGaussian:
    		return "gaussian";
    	case kKernelTypeIntersection:
    		return "intersection";
    	case kKernelTypeChi2:
    		return "chi2";
    	default:
    		return "";
    	}
    }
    
    ostream& operator<< (ostream& out, const Config& conf)
    {
    	out << "config:" << endl;
    	out << "  quietMode          = " << conf.quietMode << endl;
    	out << "  debugMode          = " << conf.debugMode << endl;
    	out << "  sequenceBasePath   = " << conf.sequenceBasePath << endl;
    	out << "  sequenceName       = " << conf.sequenceName << endl;
    	out << "  resultsPath        = " << conf.resultsPath << endl;
    	out << "  frameWidth         = " << conf.frameWidth << endl;
    	out << "  frameHeight        = " << conf.frameHeight << endl;
    	out << "  seed               = " << conf.seed << endl;
    	out << "  searchRadius       = " << conf.searchRadius << endl;
    	out << "  svmC               = " << conf.svmC << endl;
    	out << "  svmBudgetSize      = " << conf.svmBudgetSize << endl;
    	
    	for (int i = 0; i < (int)conf.features.size(); ++i)
    	{
    		out << "  feature " << i << endl;
    		out << "    feature: " << Config::FeatureName(conf.features[i].feature) << endl;
    		out << "    kernel:  " << Config::KernelName(conf.features[i].kernel) <<endl;
    		if (conf.features[i].params.size() > 0)
    		{
    			out << "    params: ";
    			for (int j = 0; j < (int)conf.features[i].params.size(); ++j)
    			{
    				out << " " << conf.features[i].params[j];
    			}
    			out << endl;
    		}
    	}
    	
    	return out;
    }

    以上是初始化文件源代码

    兴许、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

  • 相关阅读:
    C#中利用iTextSharp开发二维码防伪标签(1)
    delphi 数据库中Connection与Query连接数量问题思考
    cPanel 安装方法
    招商行用卡人工服务方式
    软链接的创建和查看
    zencart低版本由php5.2.17升级PHP5.3环境下错误及解决方案
    EXCEL应用:高级筛选里的条件或和与的条件怎么写 例:不包含,包含等
    array_walk与array_map 的不同 array_filter
    zen cart global $db 这噶哒
    hdu 5655 CA Loves Stick
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/8428499.html
Copyright © 2020-2023  润新知