?? console_lib.cpp
字號(hào):
/*
*********** change log ***************
*2009 Jan 09: using TD with KNN
*2009 Jan 09: Adding TEST section to system
*2009 Jan 09: fixing bug : "KNearNeighbor>=KNearNeighborMax" to "KNearNeighbor>=KNearNeighborMin"
*2009 Jan 18:Normalizing COG of Scaled down(to eleminating Noise) Training Images
*2009 Jan 18: Using Nave Bayes Classifier instead of KKN and TD
*
*
*
*
*
*
*
*
*
*
*
*
*
*/
#include "ltiException.h"
#include <fstream>
#include <cmath>
#include <unistd.h>
#include <string>
#include <cstdio>
//#include <iostream.h>
//#include <iostream>
#include <ltiJPEGFunctor.h>
#include <ltiBMPFunctor.h>
#include <ltiPNGFunctor.h>
#include <ltiRGBPixel.h>
#include <ltiHTypes.h>
#include <ltiMath.h>
#include <ltiModifier.h>
#include <ltiSplitImageToRGB.h>
#include <ltiSplitImageTorgI.h>
#include <ltiGeometricTransform.h>
#include <ltiPNGFunctor.h>
#include <ltiViewer.h>
#include <ltiFastViewer.h>
#include <ltiKNNClassifier.h>
#include <ltiLispStreamHandler.h>
#include "ltiTimer.h"
#include <ltiGtkServer.h>
#include <iostream>
#include <fstream>
//downsampling
#include <ltiDownsampling.h>
#include <ltiGaussKernels.h>
#include <ltiPoint.h>
//geometric features
#include <ltiContour.h>
#include <ltiRegionGrowing.h>
#include <ltiGeometricFeatures.h>
#include <ltiHiddenMarkovModel.h >
#include <ltiHmmTrainer.h >
//pca
#include <ltipca.h>
#include <ltiL2Distance.h>
#include <ltiGaussian.h>
#include <ltiGaussDist.h >
//#define begin 1
//#define end 20
#define trainSet 70 //70%
#define devSet 15 //15%
#define testSet 15 //15%
int TD_height;
int TD_width;
class Piece
{
public:
int X,Y,Width,Height;
std::string name;
Piece(int x,int y,int w, int h, std::string strName);
Piece();
};
Piece::Piece(int x,int y,int w, int h, std::string strName)
{
Piece::X=x;
Piece::Y=y;
Piece::Width=w;
Piece::Height=h;
Piece::name=strName;
}
Piece::Piece()
{
}
int main(int argc,char *argv[]) {
try {
int Xoffset=0,Yoffset=0;
Piece c[30],a[33],n[10];
bool noSave;
c[0]=Piece(1967,824,300,104,"01_Arak");
c[1]=Piece(1629,823,332,105,"02_Ardebil");
c[2]=Piece(1371,821,253,104,"03_Oroumieh");
c[3]=Piece(1096,820,270,104,"04_Esfehan");
c[4]=Piece(850,818,241,105,"05_Ahvaz");
c[5]=Piece(603,817,243,105,"06_Ilam");
c[6]=Piece(1967,974,300,104,"07_Bojnourd");
c[7]=Piece(1629,973,332,105,"08_BandarAbbas");
c[8]=Piece(1371,971,253,104,"09_Booshehr");
c[9]=Piece(1096,968,270,104,"10_Birjand");
c[10]=Piece(850,967,241,105,"11_Tabriz");
c[11]=Piece(602,966,243,105,"12_Tehran");
c[12]=Piece(1966,1124,300,104,"13_KhorramAbad");
c[13]=Piece(1629,1122,332,105,"14_Rasht");
c[14]=Piece(1371,1120,253,104,"15_Zahedan");
c[15]=Piece(1095,1119,270,104,"16_Zanjan");
c[16]=Piece(850,1116,241,105,"17_Sari");
c[17]=Piece(602,1115,243,105,"18_Semnan");
c[18]=Piece(1965,1271,300,104,"19_Sanandaj");
c[19]=Piece(1629,1269,332,105,"20_ShahreKord");
c[20]=Piece(1369,1268,253,104,"21_Shiraz");
c[21]=Piece(1094,1266,270,104,"22_Ghazvin");
c[22]=Piece(849,1264,241,105,"23_Ghom");
c[23]=Piece(601,1263,243,105,"24_Kerman");
c[24]=Piece(1965,1420,300,104,"25_KermanShah");
c[25]=Piece(1627,1418,332,105,"26_Gorgan");
c[26]=Piece(1369,1416,253,104,"27_Mashhad");
c[27]=Piece(1094,1414,270,104,"28_Hamedan");
c[28]=Piece(848,1413,241,105,"29_Yasuj");
c[29]=Piece(601,1412,243,105,"30_Yazd");
//parameters can be optimized; scalingFactor
lti::loadBMP bmploader;
lti::saveBMP bmpsaver;
lti::channel8 img;
//lti::image img ;
lti::channel8 img2;
lti::image downimg;
lti::viewer view1;
lti::viewer view2;
lti::regionGrowing segmenter; // functor for segmentation
std::string filenameInput,filenameOutput;
//int begin,end,step;
//std::cout<<"Enter beginning: ? ";
//std::cin>>begin;
//std::cout<<"Enter End: ? ";
//std::cin>>end;
//std::cout<<"Downscaling: 1/? ";
//std::cin>>step;
//dimention
//int xDim=330,yDim=110;
int epoch= 200;
int scalingFactor=50;
double minerror=100.0;
int bestfact=-1,bestK=-1,bestthresh=-1,bestPcaDim=-1;
lti::downsampling downsampler; // downsampling functor
lti::downsampling::parameters param; // downsampling parameters
/*
int begin,end;
std::cout<<"Enter begin: ? ";
std::cin>>begin;
std::cout<<"Enter end: ? ";
std::cin>>end;
int maxScale,minScale;
std::cout<<"Enter min ScalingFactor <=14: ? ";
std::cin>>minScale;
std::cout<<"Enter max ScalingFactor >=1: ? ";
std::cin>>maxScale;
*/
int MinThresh,MaxThresh,thresh=240;
// std::cout<<"Enter Min Threshhold >=0: ? ";
// std::cin>>MinThresh;
// std::cout<<"Enter Max Threshhold <=240: ? ";
// std::cin>>MaxThresh;
int KNearNeighbor= 1, KNearNeighborMax= 10,KNearNeighborMin= 1;
//std::cout<<"Enter Min Number of Nearest Neighbors(MinK): ? ";
//std::cin>>KNearNeighborMin;
//std::cout<<"Enter Max Number of Nearest Neighbors(MaxK): ? ";
//std::cin>>KNearNeighborMax;
char buff[40];
sprintf(buff,"871029K%ito%i__NBC-COGnormal.txt",KNearNeighborMin,KNearNeighborMax,thresh);
std::ofstream LOG(buff);
extern int TD_height;
extern int TD_width;
const int width=128;
const int height=128;
const int beginTrain= 0;
const int endTrain=width*height -1;
//const int beginDev= endTrain+1;
//const int endDev= endTrain+((end-begin+1)*devSet)/100;
//const int beginTest= endDev+1;
//const int endTest= end;
// bmploader.load("E_C_R_000001_1_c_18_Semnan.bmp",img);
// lti::point fact=lti::point(10,10);
//
// // a gaussian kernel to use before the downsampling
// lti::gaussKernel2D <lti::channel::value_type> gkernel;
//
// param.setKernel(gkernel); // use the gaussian kernel
// param.factor=fact;
//
// / downsampler.setParameters(param); // use the given parameters
//
// downsampler.apply(img,downimg);
//
// bmpsaver.save("d.bmp",downimg);
// for( thresh=MaxThresh;thresh>=MinThresh && thresh>0;thresh-=10)
//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=4;
double *inDataTrain=new double[(endTrain-beginTrain+1)*256*4];
int *idsDataTrain=new int[(endTrain-beginTrain+1)*256]; // and the respective ids
// double *inDataDev=new double[(endDev-beginDev+1)*30*(xDim*yDim)];
// int *idsDataDev=new int[(endDev-beginDev+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... "<<std::endl;
//LOG<<"******ScalingFactor: "<<scalingFactor<<" ****** xDim: "<<xDim<<" yDim: "<<yDim<<"***"<<std::endl;
//for(int count=beginTrain;count<=endTrain;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<<"Train: Loading File: "<<filenameInput<<" ..."<<std::endl;
//std::endl<<"Loading File: "<<filenameInput<<" ..."<<std::endl;
filenameInput="1.bmp";
lti::vector<lti::rgbPixel> colors;
if( !bmploader.load(filenameInput,img,colors))
{
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);
//***********calculating COG****************//
// 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);
LOG<<"Training"<<std::endl;
indexer=0;
for(int x=0;x<width;x++)
for(int y=0;y<height;y++)
{
int i,j,k=0;
for(j=y-1;j<=y+1;j+=2)
for( i=x-1;i<=x+1;i+=2)
if(i!=x || j!=y)
{
if((j>=0)&& (i>=0) && (i<width) && (j<height))
inDataTrain[indexer*4+k]=img[j][i];
else
inDataTrain[indexer*4+k]=img[y][x];//to avoid disturbing distribution in BC //can be -1 in knn
LOG<<inDataTrain[indexer*4+k]<<" ";
k++;
}
//bmpsaver.save("my.bmp",normalImg);
idsDataTrain[indexer]=img[y][x];
LOG<<" "<<idsDataTrain[indexer]<<" "<<img[y][x]<<std::endl;
indexer++;
}//end looping on image pixels
const trainNum=indexer;
lti::dmatrix inTrain(trainNum,4,inDataTrain); // training vectors
lti::ivector idsTrain(trainNum,idsDataTrain);
/*
indexer=0;
for( count=beginDev;count<=endDev;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<<"Dev: 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];
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -