⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 processcontrol.cpp

📁 使用KernelBDA实现三维模型相关反馈的算法注:1、使用本系统必须在本地计算机上安装matlab 2、算法使用的三维模型特征向量是从PSB模型库中自动提取的DESIRE三维模型特征向量 3、本
💻 CPP
字号:
#include "StdAfx.h"
#include ".\processcontrol.h"

int allclassobjectmembers[MAXCLASSNUM][MAXOBJECTNUM];
int numofoneclass[MAXCLASSNUM];
double originfeaturematrix[OBJECTSNUMBER][FEATURELENGTH];
double kernelfeaturematrix[OBJECTSNUMBER][OBJECTSNUMBER];
int positiveobjects[OBJECTSNUMBER];
int negativeobjects[OBJECTSNUMBER];
int pandnobjects[OBJECTSNUMBER];
int pandnnum;
int positivenum,negativenum;
int round;
double ** trans;
double ** newfeaturematrix;
//////////////////////////////////////////////////////////////////////////
//全局性的变量都写在这里
//////////////////////////////////////////////////////////////////////////


CProcessControl::CProcessControl(void)
{
	file0.open("result1.txt");
	file1.open("result2.txt");
	file2.open("result3.txt");
}

CProcessControl::~CProcessControl(void)
{
	file0.close();
	file1.close();
	file2.close();
}

bool CProcessControl::readalllabelsfromfile(CString infilepath)
{
	using namespace std;
	ifstream listfile(infilepath);
	string tempstr;
	CString ctempstr;
	int serial = 0;
	int classnum = 0;
	int postion = 0;

	getline(listfile,tempstr);
	while (getline(listfile,tempstr))
	{
		ctempstr = tempstr.c_str();
		if (ctempstr.Find(" ") > 0)
		{
            numofoneclass[classnum] = postion;
			classnum++;
			postion = 0;
			continue;
		}
        allclassobjectmembers[classnum][postion] = serial;
		postion++;
		serial++;

	}
	numofoneclass[classnum] = postion;
	listfile.close();

	//ofstream tempfile("test.txt");
	//int i,j;
	//int sum = 0;
	//for (i=0;i<90;i++)
	//{
	//	tempfile<<" begin"<<numofoneclass[i]<<endl;
 //       sum += numofoneclass[i];
	//	for (j=0;j<numofoneclass[i];j++)
	//	{
	//		tempfile<<allclassobjectmembers[i][j]<<endl;

	//	}
	//}
	//tempfile<<sum<<endl;
	//tempfile.close();

	return true;
}

bool CProcessControl::readallfeaturesfromfile(CString infilepath)
{
	using namespace std;
	ifstream listfile(infilepath);
	string tempstr;
	CString Ctempstr,tfeature;
	int serial,pos,i;
	for(serial=0;serial<OBJECTSNUMBER;serial++)
	{
		getline(listfile,tempstr);
		Ctempstr = tempstr.c_str();
		for (i = 0; i < FEATURELENGTH; i++)
		{
			pos = Ctempstr.Find(" ");
			tfeature = Ctempstr.Left(pos);
			originfeaturematrix[serial][i] = atof(tfeature);
			Ctempstr.Delete(0,pos+1);

		}

	}
	listfile.close();

 //   ofstream tempfile("test.txt");
	//int j;
	//for (i=0;i<OBJECTSNUMBER;i++)
	//{
	//	for (j=0;j<300;j++)
	//	{
	//		tempfile<<originfeaturematrix[i][j]<<" ";
	//	}
	//	tempfile<<endl;
	//}

	return true;
}

bool CProcessControl::firstcomputedistance(int currentobject)
{
	using namespace std;
    int i,j;
	double distancetemp;
	for (i=0;i<OBJECTSNUMBER;i++)
	{
		distancetemp = 0;
		for (j=0;j<FEATURELENGTH;j++)
		{
			distancetemp += (originfeaturematrix[i][j] - originfeaturematrix[currentobject][j])*(originfeaturematrix[i][j] - originfeaturematrix[currentobject][j]);
		}
		distancetrans[i] = distancetemp;
	}

 //   ofstream tempfile("test.txt");
	//for (i=0;i<OBJECTSNUMBER;i++)
	//{
	//	tempfile<<distancetrans[i]<<endl;
	//}
 //   tempfile.close();

	return true;
}

bool CProcessControl::labelretrieval(int currentclass)
{
	using namespace std;
	int i,j;
	int tempmin = 0;
	double tempdistance;
	for (i=0;i<RETURNBACKNUM;i++)
	{
		tempdistance = DOUBLEMAX;
		for (j=0;j<OBJECTSNUMBER;j++)
		{
			//if (distancetrans[j] < 0)continue;
			if (distancetrans[j] < tempdistance)
			{
				tempdistance = distancetrans[j];
				tempmin = j;
			}
               
		}
		distancetrans[tempmin] = DOUBLEMAX;
        nearestobjects[i] = tempmin;

	}

	//ofstream tempfile("test.txt");
	//for (i=0;i<RETURNBACKNUM;i++)
	//{
	//	tempfile<<nearestobjects[i]<<endl;
	//}
	//tempfile.close();

	pandnnum = 0;
	positivenum = 0;
	negativenum = 0;


	for (i=0;i<RETURNBACKNUM;i++)
	{
        //判断是否被标注过
		//for (j=0;j<pandnnum;j++)
		//{
		//	if(pandnobjects[j] == nearestobjects[i])break;
		//}
		//if(j<pandnnum)continue;
		//不判断标注了,直接学习,看看效果如何!!!!


		//else
		//{
		//	for (j=0;j<negativenum;j++)
		//	{
		//		if(negativeobjects[j] == nearestobjects[i])break;
		//	}
		//	if(j<negativenum)continue;
		//}

		for (j=0;j<numofoneclass[currentclass];j++)
		{
			if (allclassobjectmembers[currentclass][j] == nearestobjects[i])break;
			
		}
		if (j<numofoneclass[currentclass])
		{
			positiveobjects[positivenum] = nearestobjects[i];
			//pandnobjects[pandnnum] = nearestobjects[i];
			positivenum++;
			//pandnnum++;
		}
		else
		{
			//pandnobjects[pandnnum] = nearestobjects[i];
			negativeobjects[negativenum] = nearestobjects[i];
			negativenum++;
			//pandnnum++;
		}
	}

	pandnnum = positivenum + negativenum;
	for (i=0;i<positivenum;i++)
	{
		pandnobjects[i] = positiveobjects[i];
		
	}
	j=0;
	for (;i<pandnnum;i++)
	{
		pandnobjects[i] = negativeobjects[j];
		j++;
	}

	//ofstream tempfile("test.txt");
 //   for (i=0;i<pandnnum;i++)
 //   {
	//	tempfile<<pandnobjects[i]<<endl;
 //   }
	//tempfile<<endl;
	//for (i=0;i<positivenum;i++)
	//{
	//	tempfile<<positiveobjects[i]<<endl;
	//}
	//tempfile<<endl;
	//for (i=0;i<negativenum;i++)
	//{
	//	tempfile<<negativeobjects[i]<<endl;
	//}


	return true;
}

bool CProcessControl::newcomputedistance(int currentobject)
{
	using namespace std;
	int i,j;
	double distancetemp;
	for (i=0;i<OBJECTSNUMBER;i++)
	{
		distancetemp = 0;
		for (j=0;j<pandnnum;j++)
		{
			distancetemp += (newfeaturematrix[i][j] - newfeaturematrix[currentobject][j])*(newfeaturematrix[i][j] - newfeaturematrix[currentobject][j]);
		}
		distancetrans[i] = distancetemp;

		if (round == 0)
		{
			file0<<distancetemp<<endl;
		}
		else if (round ==1)
		{
			file1<<distancetemp<<endl;
		}
		else if (round == 2)
		{
			file2<<distancetemp<<endl;
		}
	}

	//using namespace std;
 //   ofstream tempfile("test.txt");
	//for (i=0;i<OBJECTSNUMBER;i++)
	//{
	//	tempfile<<distancetrans[i]<<endl;
	//}

	for (i=0;i<OBJECTSNUMBER;i++)
	{
		delete[] newfeaturematrix[i];
	}
	delete[] newfeaturematrix;
	return true;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -