zoukankan      html  css  js  c++  java
  • 模式识别

    处理特征数据 及 代码


    本文地址: http://blog.csdn.net/caroline_wendy/article/details/26240241


    输入文件: 

    1. 归一化后的特征文件, 第1列是标签, 其余列是特征;

    2. 特征最大值向量文件: 前3列是标准格式, 其余列是最大值;

    输出文件:

    1. 符合SVM训练数据的特征格式;

    2. Mat存储的标准XML文件;


    代码:

    /*
    处理特征数据程序
    By C.L.Wang
    数据格式:
    特征数据: 第1列是标签, 其余列是特征;
    最大值数据: 前3列是标准格式, 其余列是最大值;
    转换为: SVM通用格式, 训练SVM的model; 转换为OpenCV矩阵的存储Mat;
    */
    
    #include <iostream>
    #include <string>
    #include <vector>
    #include <fstream>
    
    #include <opencv.hpp>
    
    /*转换SVM数据格式*/
    
    void transformSvmData (
    	const std::string _inputFileName, /*输入数据文件*/
    	const std::string _outputFileName, /*输出数据文件*/
    	const int _rows, /*行数, 自设*/
    	const int _cols /*列数, 自设*/
    )
    {
    	//const int rows (800); //行数, 自设
    	//const int cols (104); //列数, 自设
    	cv::Mat trainData = cv::Mat(_rows, _cols, CV_64FC1);
    
    	/*读取文件*/
    
    	std::ifstream file_data(_inputFileName);
    	if (file_data.fail()) {
    		std::cerr << "Failed to open the file!" << std::endl;
    		return;
    	}
    	for (int i=0; i<_rows; ++i) {
    		for (int j=0; j<_cols; ++j) {
    			file_data >> trainData.at<double>(i,j);
    		}
    	}
    	file_data.close();
    
    	/*转换SVM格式*/
    
    	std::ofstream svmData(_outputFileName);
    	for (int i=0; i<_rows; i++)
    	{
    		svmData << trainData.at<double>(i, 0) << " ";
    
    		for (int j=1; j<_cols-1; j++) { //少1行
    			svmData << j << ":" << trainData.at<double>(i, j) << " ";
    		}
    
    		svmData << _cols-1 << ":" << 
    			trainData.at<double>(i,_cols-1) << std::endl; //最后一行不加空格
    	}
    	svmData.close();
    
    	return;
    }
    
    /*转换归一化向量*/
    
    void transformNormXML (
    	const std::string _maxFileName,
    	const int _cols /*列数, 自设*/
    	)
    {
    	const int rows = 1;
    	//const int cols = 104; //列数, 自设
    
    	/*读取文件*/
    
    	cv::Mat normMat = cv::Mat(rows, _cols, CV_64FC1);
    	std::ifstream maxData(_maxFileName, std::ifstream::in);
    	if (maxData.fail()) {
    		std::cerr << "Failed to open the file!" << std::endl;
    		return;
    	}
    	for (int i=0; i<rows; ++i) {
    		for(int j=0; j<_cols; ++j){
    			maxData >> normMat.at<double>(i,j);
    		}
    	}
    	maxData.close();
    
    	/*写入XML*/
    
    	cv::FileStorage fileXml("normalization.xml", cv::FileStorage::WRITE);
    	fileXml << "normalization" << normMat; //标签
    	fileXml.release();
    
    	return;
    }
    
    int main() 
    {
    	const std::string input_file_name = "violence_norm_matlab.txt"; /*输入数据文件*/
    	const std::string output_file_name = "violence_norm_svm.txt"; /*输出数据文件*/
    	const int rows = 843; /*输入文件行数, 自设*/
    	const int cols = 102; /*输入文件列数, 自设*/
    	transformSvmData(input_file_name, output_file_name, rows, cols);
    
    	const std::string max_file_name = "violence_max_matlab.txt";
    	transformNormXML(max_file_name, cols+2); //和曾经标准统一
    
    	std::cout << "Program Over! " << std::endl;
    
    	return 0;
    }




  • 相关阅读:
    数组实现栈
    栈应用实例单词逆序
    使用JXMapViewer将地图集成到swing app中
    使用xbee连接地面站和飞控
    QWT编译、配置、使用(Qt Creator)
    Qt跨线程调用错误解析及解决办法
    SVN版本服务器搭建(服务端+客户端)
    opencv配置过程 (cmake,vs2013,qt 5.4)
    基数排序/Go实现
    c/c++ 编译器内存对齐问题
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/5096337.html
Copyright © 2011-2022 走看看