?? console_lib.cpp
字號:
bmpsaver.save("y.bmp",img2);
// free(inDataDev);
// free(idsDataDev);
/*
/////////// TESTING //////////////////////////
minerror=100.0;
scalingFactor=bestfact;
KNearNeighbor=bestK;
// for( scalingFactor=minScale;scalingFactor<=maxScale && scalingFactor>0;scalingFactor+=1)
// for( scalingFactor=minScale;scalingFactor<=maxScale && scalingFactor>0;scalingFactor+=1)
{
lti::point fact=lti::point(scalingFactor,scalingFactor);
// a gaussian kernel to use before the downsampling
lti::gaussKernel2D <lti::channel::value_type> gkernel(scalingFactor,scalingFactor*10);
param.setKernel(gkernel); // use the gaussian kernel
param.factor=fact;
downsampler.setParameters(param); // use the given parameters
const int step=scalingFactor;
int xDim= (330%scalingFactor==0?330/scalingFactor:330/scalingFactor+1);
int yDim= (110%scalingFactor==0?110/scalingFactor:110/scalingFactor+1);
const int featureNum=xDim*yDim;
double *inDataTrain=new double[(endTrain-beginTrain+1)*30*(xDim*yDim)];
int *idsDataTrain=new int[(endTrain-beginTrain+1)*30]; // and the respective ids
double *inDataTest =new double[(endTest-beginTest+1)*30*(xDim*yDim)];
int *idsDataTest =new int[(endTest-beginTest+1)*30]; // and the respective ids
int indexer=0;
int r,g,b;
int COGy,COGx,xOffset,yOffset;
int newCOGx=xDim/2;
int newCOGy=yDim/2;
LOG<<std::cout<<"Start Reading Images for TESTING... "<<std::endl;
for(int count=beginTrain;count<=endTrain;count++)
{
char buff[16];
if(count<10)
sprintf(buff,"00000%i",count);
else if(count<100)
else if(count<1000)
sprintf(buff,"000%i",count);
for(int cIndex=0 ;cIndex<30;cIndex++)
{
filenameInput="";
filenameOutput="r";
filenameInput.append(buff);
filenameInput.append("_");
filenameInput.append(c[cIndex].name);
filenameInput.append(".bmp");
std::cout<<std::endl<<"Train: Loading File: "<<filenameInput<<" ..."<<std::endl;
//std::endl<<"Loading File: "<<filenameInput<<" ..."<<std::endl;
if( !bmploader.load(filenameInput,img))
{
std::cout<<std::endl<<"****Non Existing File: "<<filenameInput<<" ..."<<std::endl;
continue;
}
else
{
lti::channel8 mask,downmask;
segmenter.apply(img,mask); // get a mask to differentiate background
// and object.
char buffnum[16];
sprintf(buffnum,"000%i",scalingFactor);
filenameOutput.append(buffnum);
filenameOutput.append(filenameInput);
std::cout<<"Downsampling..."<<std::endl;
downsampler.apply(mask,downmask);
//view1.show(downmask);
//int t;
//std::cin>>t;
//bmpsaver.save("my.bmp",downmask);
lti::areaPoints ap;
ap.getFromMask(downmask);
lti::dvector dv;
//due to the source code it needs to define the outer boundary to assume all points for calculations
lti::geometricFeatures::parameters param;
param.boundaryDefinition= lti::geometricFeatures::parameters::eBoundaryDefinition::OuterBoundary;
lti::geometricFeatures gf(param);
gf.apply(ap,dv);
COGy=int(dv.at(3));
COGx=int(dv.at(2));
//Calculated above before
// int oldCOGx=xDim/2;
// int oldCOGy=yDim/2;
xOffset=newCOGx-COGx;
yOffset=newCOGy-COGy;
lti::channel8 normalImg=lti::channel8(yDim,xDim,(lti::ubyte)0);
int i,j;
for(j=0;j<yDim;j++)
for( i=0;i<xDim;i++)
{
if((j+yOffset>=0)&& (i+xOffset>=0) && (i+xOffset<xDim) && (j+yOffset<yDim))
normalImg[j+yOffset][i+xOffset]=downmask[j][i];
}
//bmpsaver.save("my.bmp",normalImg);
std::cout<<"Adding read image to the input vector..."<<std::endl;
for(j=0;j<yDim;j++)
for(i=0;i<xDim;i++)
{
inDataTrain[indexer*(yDim*xDim)+ j*xDim+i]=normalImg[j][i];
}
idsDataTrain[indexer]=cIndex;
indexer++;
}
}//end looping on city names
}//end for looping on image numbers
const trainNum=indexer;
lti::dmatrix inTrain(trainNum,xDim*yDim,inDataTrain); // training vectors
lti::ivector idsTrain(trainNum,idsDataTrain);
indexer=0;
for( count=beginTest;count<=endTest;count++)
{
char buff[16];
if(count<10)
sprintf(buff,"00000%i",count);
else if(count<100)
sprintf(buff,"0000%i",count);
else if(count<1000)
sprintf(buff,"000%i",count);
for(int cIndex=0 ;cIndex<30;cIndex++)
{
filenameInput="";
filenameOutput="r";
filenameInput.append(buff);
filenameInput.append("_");
filenameInput.append(c[cIndex].name);
filenameInput.append(".bmp");
std::cout<<std::endl<<"Test: Loading File: "<<filenameInput<<" ..."<<std::endl;
if( !bmploader.load(filenameInput,img))
{
//LOG<<std::endl<<"****Non Existing File: "<<filenameInput<<" ..."<<std::endl;
std::cout<<std::endl<<"****Non Existing File: "<<filenameInput<<" ..."<<std::endl;
continue;
}
else
{
lti::channel8 mask,downmask;
segmenter.apply(img,mask); // get a mask to differentiate background
// and object.
char buffnum[16];
sprintf(buffnum,"000%i",scalingFactor);
filenameOutput.append(buffnum);
filenameOutput.append(filenameInput);
// bmpsaver.save(filenameOutput,mask);
std::cout<<"Downsampling..."<<std::endl;
downsampler.apply(mask,downmask);
lti::areaPoints ap;
ap.getFromMask(downmask);
lti::dvector dv;
//due to the source code it needs to define the outer boundary to assume all points for calculations
lti::geometricFeatures::parameters param;
param.boundaryDefinition= lti::geometricFeatures::parameters::eBoundaryDefinition::OuterBoundary;
lti::geometricFeatures gf(param);
gf.apply(ap,dv);
COGy=int(dv.at(3));
COGx=int(dv.at(2));
//Calculated above before
// int oldCOGx=xDim/2;
// int oldCOGy=yDim/2;
xOffset=newCOGx-COGx;
yOffset=newCOGy-COGy;
lti::channel8 normalImg=lti::channel8(yDim,xDim,(lti::ubyte)0);
int i,j;
for(j=0;j<yDim;j++)
for( i=0;i<xDim;i++)
{
if((j+yOffset>=0)&& (i+xOffset>=0) && (i+xOffset<xDim) && (j+yOffset<yDim))
normalImg[j+yOffset][i+xOffset]=downmask[j][i];
}
//bmpsaver.save("my.bmp",normalImg);
std::cout<<"Adding read image to the input vector..."<<std::endl;
for(j=0;j<yDim;j++)
for(i=0;i<xDim;i++)
{
inDataTest[indexer*(yDim*xDim)+ j*xDim+i]=normalImg[j][i];
}
idsDataTest[indexer]=cIndex;
indexer++;
}
}//end looping on city names
}//end for looping on image numbers
const int TestNum=indexer;
lti::dmatrix inTest(TestNum,xDim*yDim,inDataTest); // training vectors
lti::ivector idsTest(TestNum,idsDataTest);
const int ClassNum=30;
lti::dvector mean[ClassNum];
lti::dvector var[ClassNum];
lti::dvector covar[ClassNum];
//lti::dmatrix covar[ClassNum];
for(int cNum=0;cNum<ClassNum;cNum++)
{
for(int fNum=0;fNum<featureNum;fNum++)
{
mean[cNum].resize(featureNum,0);
//claaculate expectation
mean[cNum][fNum]=0;
for(int tNum=cNum;tNum<trainNum;tNum+=ClassNum)
mean[cNum][fNum]+=inTrain[tNum][fNum];
mean[cNum][fNum]/=(trainNum/ClassNum);
}
//calculate Variance
covar[cNum].resize(featureNum,0);
//for(int tNum=cNum;tNum<trainNum;tNum+=ClassNum)
// for(int m=0;m<featureNum;m++)
// for(int n=0;n<featureNum;n++)
// covar[cNum][m][n]+=((inTrain[tNum][m]-mean[cNum][m])*(inTrain[tNum][n]-mean[cNum][n]));
for(int m=0;m<featureNum;m++)
{
for(int tNum=cNum;tNum<trainNum;tNum+=ClassNum)
covar[cNum][m]+=((inTrain[tNum][m]-mean[cNum][m])*(inTrain[tNum][m]-mean[cNum][m]));
covar[cNum][m]/=(trainNum/ClassNum);
}
//for(int m=0;m<featureNum;m++)
// for(int n=0;n<featureNum;n++)
// covar[cNum][m][n]/=(trainNum/ClassNum);
}
lti::classifier::outputVector outv(ClassNum); // here we will get some
std::cout <<std::endl<< "Dev Results: "<< std::endl;
int i,id;
int error=0;
for (i=0;i<inTest.rows();++i)
{
for(int cNum=0;cNum<ClassNum;cNum++)
{
double temp=1;
double p=1;
//lti::dvector m=mean[cNum];
//lti::dvector c=covar[cNum];
//lti::gaussian<double> g=lti::gaussian<double>(mean[cNum],covar[cNum]);
for(int m=0;m<featureNum;m++)
{
lti::gaussian<double> g=lti::gaussian<double>(mean[cNum][m],covar[cNum][m]);
g.apply(inTest.getRow(i).at(m),p);
temp*=p;
}
outv.setValueByPosition(cNum,temp);
}
//outv.getId(outv.getWinnerUnit(),id);
id=outv.maxPosition();
LOG<< "Input : "<<beginTest+i/30<<"_"<<c[i%30].name<<"\tOutput: "<<c[id].name;
if (id != idsTest.at(i))
{
error++;
LOG<< " - should be: " << c[idsTest.at(i)].name;
}
// LOG<< std::endl<<"Resized Image : "<<std::endl;
// for(int j=0;j<yDim*xDim;j++)
// {
// if(j%xDim==0)LOG<<"\r\n";
// LOG<< inTest[i][j] ;
// }
LOG<< std::endl<<std::endl;
}
LOG<<"******ScalingFactor: "<<scalingFactor<<" ****** xDim: "<<xDim<<" yDim: "<<yDim<<"***"<<std::endl;
LOG<<std::endl<<"Error Percent :"<<(((double)error)*100)/i<< std::endl;
std::cout<<std::endl<<"Error Percent :"<<(((double)error)*100)/i<< std::endl;
if(minerror>=(((double)error)*100)/i)
{
minerror=(((double)error)*100)/i;
bestfact=scalingFactor;
bestthresh=thresh;
bestK=KNearNeighbor;
}
LOG<<"----------------------------\nTesting******Min Error : "<<minerror<<" Scaling Factor: "<<bestfact<<" ***xDim: "<<xDim<<" yDim: "<<yDim<<"*** Best K: "<<bestK<<std::endl;
std::cout<<"----------------------------\nTesting******Min Error : "<<minerror<<" Scaling Factor: "<<bestfact<<" ***xDim: "<<xDim<<" yDim: "<<yDim<<"*** Best K: "<<bestK<<std::endl;
free(idsDataTrain);
free(inDataTrain);
free(inDataTest);
free(idsDataTest);
}//end for looping on scaling factor
*/
// view2.show(img2);
//int q;
// std::cin>>q;
bmpsaver.save("d.bmp",img2);
std::cout << "Finished!" << std::endl;
LOG<< "Finished!" << std::endl;
LOG<<"----------------------------\nFinal******Min Error : "<<minerror<<" Scaling Factor: "<<bestfact<<" Best K: "<<bestK<<std::endl;
std::cout<<"----------------------------\nFinal******Min Error : "<<minerror<<" Scaling Factor: "<<bestfact<<" Best K: "<<bestK<<std::endl;
LOG.close();
free(idsDataTrain);
free(inDataTrain);
}
}
} catch (lti::exception& exp) {
std::cout << "An LTI::EXCEPTION was thrown: ";
std::cout << exp.what() << std::endl;
}
catch (std::exception& exp) {
std::cout << "std::exception was thrown: ";
std::cout << exp.what() << std::endl;
}
catch (...) {
std::cout << "Unknown exception thrown!" << std::endl;
}
return 0;
} // main
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -