📄 hogmain.cpp
字号:
ofstream integralBin5outFile("integralbin5Max.txt");
if(!integralBin5outFile)
cerr << "Oops! Unable to save integralbin5Max data!"<<endl;
else
{
for(int i=0;i!=DETECT_HEIGHT;++i)
{
for(int j=0;j!=DETECT_WIDTH;++j)
integralBin5outFile<<integralBin5Max[i][j]<<" ";
integralBin5outFile<<endl;
}
}
//output bin6 integral
ofstream integralBin6outFile("integralbin6Max.txt");
if(!integralBin6outFile)
cerr << "Oops! Unable to save integralbin6Max data!"<<endl;
else
{
for(int i=0;i!=DETECT_HEIGHT;++i)
{
for(int j=0;j!=DETECT_WIDTH;++j)
integralBin6outFile<<integralBin6Max[i][j]<<" ";
integralBin6outFile<<endl;
}
}
//output bin7 integral
ofstream integralBin7outFile("integralbin7Max.txt");
if(!integralBin7outFile)
cerr << "Oops! Unable to save integralbin7Max data!"<<endl;
else
{
for(int i=0;i!=DETECT_HEIGHT;++i)
{
for(int j=0;j!=DETECT_WIDTH;++j)
integralBin7outFile<<integralBin7Max[i][j]<<" ";
integralBin7outFile<<endl;
}
}
//output bin8 integral
ofstream integralBin8outFile("integralbin8Max.txt");
if(!integralBin8outFile)
cerr << "Oops! Unable to save integralbin8Max data!"<<endl;
else
{
for(int i=0;i!=DETECT_HEIGHT;++i)
{
for(int j=0;j!=DETECT_WIDTH;++j)
integralBin8outFile<<integralBin8Max[i][j]<<" ";
integralBin8outFile<<endl;
}
}
//output bin9 integral
ofstream integralBin9outFile("integralbin9Max.txt");
if(!integralBin9outFile)
cerr << "Oops! Unable to save integralbin9Max data!"<<endl;
else
{
for(int i=0;i!=DETECT_HEIGHT;++i)
{
for(int j=0;j!=DETECT_WIDTH;++j)
integralBin9outFile<<integralBin9Max[i][j]<<" ";
integralBin9outFile<<endl;
}
}
//caculate the blocks and the corresponing normalization result
//for the size model,width:lenghth=1:l we choose 12*12 pixels
// 16*16 pixels,24*24 pixels,32*32pixels,64*64pixles,and the correspoing
// overlap pixels is the 3,4,6,8,8pixels,and the size model,length:width=2:1 and 1:2,we choose 24*12 pixels
//16*32 ,24*48,32×64 and reverse
// caculate the 12*12 pixels,16*16,24*24
/* 1------2-----3
| | |
| 1 | 2 | ------>cell
4------5-----6-------------------->block
| | |
| 3 | 4 |
7------8-----9
*/
Point2D pos1;
Point2D pos2;
Point2D pos3;
Point2D pos4;
Point2D pos5;
Point2D pos6;
Point2D pos7;
Point2D pos8;
Point2D pos9;
float sumMagBlock=0.0;
const double U=0.1; //coefficient
vector<float> binvec;
vector<vector<float> > BlockFeature;
float cell1_bin1Mag=0.0,cell1_bin2Mag=0.0,cell1_bin3Mag=0.0,cell1_bin4Mag=0.0;
float cell1_bin5Mag=0.0,cell1_bin6Mag=0.0,cell1_bin7Mag=0.0,cell1_bin8Mag=0.0,cell1_bin9Mag=0.0;
float cell2_bin1Mag=0.0,cell2_bin2Mag=0.0,cell2_bin3Mag=0.0,cell2_bin4Mag=0.0;
float cell2_bin5Mag=0.0,cell2_bin6Mag=0.0,cell2_bin7Mag=0.0,cell2_bin8Mag=0.0,cell2_bin9Mag=0.0;
float cell3_bin1Mag=0.0,cell3_bin2Mag=0.0,cell3_bin3Mag=0.0,cell3_bin4Mag=0.0;
float cell3_bin5Mag=0.0,cell3_bin6Mag=0.0,cell3_bin7Mag=0.0,cell3_bin8Mag=0.0,cell3_bin9Mag=0.0;
float cell4_bin1Mag=0.0,cell4_bin2Mag=0.0,cell4_bin3Mag=0.0,cell4_bin4Mag=0.0;
float cell4_bin5Mag=0.0,cell4_bin6Mag=0.0,cell4_bin7Mag=0.0,cell4_bin8Mag=0.0,cell4_bin9Mag=0.0;
// int step[5]={3,4,6,8,16}; //each stride
int heightStep[13]={3,4,6,8,16,6,8,12,16,3,4,6,8};//height stride
int widthStep[13]={3,4,6,8,16,3,4,6,8,6,8,12,16}; //width stride
int blockersPerHeight=0;
int blockersPerWidth=0;
for(int t=0;t!=13;++t)
{
blockersPerHeight=(DETECT_HEIGHT-4*heightStep[t])/heightStep[t]+1;
// cout<<blockersPerHeight<<endl;
blockersPerWidth=(DETECT_WIDTH-4*widthStep[t])/widthStep[t]+1;
// cout<<blockersPerWidth<<endl;
for(int iL=0;iL!=blockersPerHeight;++iL)
{
for(int iW=0;iW!=blockersPerWidth;++iW)
{
pos1.x=iL*heightStep[t],pos1.y=iW*widthStep[t];
pos2.x=iL*heightStep[t],pos2.y=iW*widthStep[t]+2*widthStep[t]-1;
pos3.x=iL*heightStep[t],pos3.y=iW*widthStep[t]+4*widthStep[t]-1;
pos4.x=iL*heightStep[t]+2*heightStep[t]-1,pos4.y=iW*widthStep[t];
pos5.x=iL*heightStep[t]+2*heightStep[t]-1,pos5.y=iW*widthStep[t]+2*widthStep[t]-1;
pos6.x=iL*heightStep[t]+2*heightStep[t]-1,pos6.y=iW*widthStep[t]+4*widthStep[t]-1;
pos7.x=iL*heightStep[t]+4*heightStep[t]-1,pos7.y=iW*widthStep[t];
pos8.x=iL*heightStep[t]+4*heightStep[t]-1,pos8.y=iW*widthStep[t]+2*widthStep[t]-1;
pos9.x=iL*heightStep[t]+4*heightStep[t]-1,pos9.y=iW*widthStep[t]+4*widthStep[t]-1;
/* cout<<pos1.x<<","<<pos1.y<<endl;
cout<<pos2.x<<","<<pos2.y<<endl;
cout<<pos3.x<<","<<pos3.y<<endl;
cout<<pos4.x<<","<<pos4.y<<endl;
cout<<pos5.x<<","<<pos5.y<<endl;
cout<<pos6.x<<","<<pos6.y<<endl;
cout<<pos7.x<<","<<pos7.y<<endl;
cout<<pos8.x<<","<<pos8.y<<endl;
cout<<pos9.x<<","<<pos9.y<<endl;
cout<<endl;*/
//caculate the block magnitude
sumMagBlock=integralIIMagMax[pos9.x][pos9.y]+integralIIMagMax[pos1.x][pos1.y]-integralIIMagMax[pos3.x][pos3.y]-integralIIMagMax[pos7.x][pos7.y];
//caculate the histogram of gradient oriented the cell1
cell1_bin1Mag=integralBin1Max[pos5.x][pos5.y]+integralBin1Max[pos1.x][pos1.y]-integralBin1Max[pos2.x][pos2.y]-integralBin1Max[pos4.x][pos4.y];
cell1_bin2Mag=integralBin2Max[pos5.x][pos5.y]+integralBin2Max[pos1.x][pos1.y]-integralBin2Max[pos2.x][pos2.y]-integralBin2Max[pos4.x][pos4.y];
cell1_bin3Mag=integralBin3Max[pos5.x][pos5.y]+integralBin3Max[pos1.x][pos1.y]-integralBin3Max[pos2.x][pos2.y]-integralBin3Max[pos4.x][pos4.y];
cell1_bin4Mag=integralBin4Max[pos5.x][pos5.y]+integralBin4Max[pos1.x][pos1.y]-integralBin4Max[pos2.x][pos2.y]-integralBin4Max[pos4.x][pos4.y];
cell1_bin5Mag=integralBin5Max[pos5.x][pos5.y]+integralBin5Max[pos1.x][pos1.y]-integralBin5Max[pos2.x][pos2.y]-integralBin5Max[pos4.x][pos4.y];
cell1_bin6Mag=integralBin6Max[pos5.x][pos5.y]+integralBin6Max[pos1.x][pos1.y]-integralBin6Max[pos2.x][pos2.y]-integralBin6Max[pos4.x][pos4.y];
cell1_bin7Mag=integralBin7Max[pos5.x][pos5.y]+integralBin7Max[pos1.x][pos1.y]-integralBin7Max[pos2.x][pos2.y]-integralBin7Max[pos4.x][pos4.y];
cell1_bin8Mag=integralBin8Max[pos5.x][pos5.y]+integralBin8Max[pos1.x][pos1.y]-integralBin8Max[pos2.x][pos2.y]-integralBin8Max[pos4.x][pos4.y];
cell1_bin9Mag=integralBin9Max[pos5.x][pos5.y]+integralBin9Max[pos1.x][pos1.y]-integralBin9Max[pos2.x][pos2.y]-integralBin9Max[pos4.x][pos4.y];
binvec.push_back((cell1_bin1Mag+U)/(sumMagBlock+U));
binvec.push_back((cell1_bin2Mag+U)/(sumMagBlock+U));
binvec.push_back((cell1_bin3Mag+U)/(sumMagBlock+U));
binvec.push_back((cell1_bin4Mag+U)/(sumMagBlock+U));
binvec.push_back((cell1_bin5Mag+U)/(sumMagBlock+U));
binvec.push_back((cell1_bin6Mag+U)/(sumMagBlock+U));
binvec.push_back((cell1_bin7Mag+U)/(sumMagBlock+U));
binvec.push_back((cell1_bin8Mag+U)/(sumMagBlock+U));
binvec.push_back((cell1_bin9Mag+U)/(sumMagBlock+U));
//caculate the histogram of gradient oriented the cell2
cell2_bin1Mag=integralBin1Max[pos6.x][pos6.y]+integralBin1Max[pos2.x][pos2.y]-integralBin1Max[pos3.x][pos3.y]-integralBin1Max[pos5.x][pos5.y];
cell2_bin2Mag=integralBin2Max[pos6.x][pos6.y]+integralBin2Max[pos2.x][pos2.y]-integralBin2Max[pos3.x][pos3.y]-integralBin2Max[pos5.x][pos5.y];
cell2_bin3Mag=integralBin3Max[pos6.x][pos6.y]+integralBin3Max[pos2.x][pos2.y]-integralBin3Max[pos3.x][pos3.y]-integralBin3Max[pos5.x][pos5.y];
cell2_bin4Mag=integralBin4Max[pos6.x][pos6.y]+integralBin4Max[pos2.x][pos2.y]-integralBin4Max[pos3.x][pos3.y]-integralBin4Max[pos5.x][pos5.y];
cell2_bin5Mag=integralBin5Max[pos6.x][pos6.y]+integralBin5Max[pos2.x][pos2.y]-integralBin5Max[pos3.x][pos3.y]-integralBin5Max[pos5.x][pos5.y];
cell2_bin6Mag=integralBin6Max[pos6.x][pos6.y]+integralBin6Max[pos2.x][pos2.y]-integralBin6Max[pos3.x][pos3.y]-integralBin6Max[pos5.x][pos5.y];
cell2_bin7Mag=integralBin7Max[pos6.x][pos6.y]+integralBin7Max[pos2.x][pos2.y]-integralBin7Max[pos3.x][pos3.y]-integralBin7Max[pos5.x][pos5.y];
cell2_bin8Mag=integralBin8Max[pos6.x][pos6.y]+integralBin8Max[pos2.x][pos2.y]-integralBin8Max[pos3.x][pos3.y]-integralBin8Max[pos5.x][pos5.y];
cell2_bin9Mag=integralBin9Max[pos6.x][pos6.y]+integralBin9Max[pos2.x][pos2.y]-integralBin9Max[pos3.x][pos3.y]-integralBin9Max[pos5.x][pos5.y];
binvec.push_back((cell2_bin1Mag+U)/(sumMagBlock+U));
binvec.push_back((cell2_bin2Mag+U)/(sumMagBlock+U));
binvec.push_back((cell2_bin3Mag+U)/(sumMagBlock+U));
binvec.push_back((cell2_bin4Mag+U)/(sumMagBlock+U));
binvec.push_back((cell2_bin5Mag+U)/(sumMagBlock+U));
binvec.push_back((cell2_bin6Mag+U)/(sumMagBlock+U));
binvec.push_back((cell2_bin7Mag+U)/(sumMagBlock+U));
binvec.push_back((cell2_bin8Mag+U)/(sumMagBlock+U));
binvec.push_back((cell2_bin9Mag+U)/(sumMagBlock+U));
//caculate the histogram of gradient oriented the cell3
cell3_bin1Mag=integralBin1Max[pos8.x][pos8.y]+integralBin1Max[pos4.x][pos4.y]-integralBin1Max[pos5.x][pos5.y]-integralBin1Max[pos7.x][pos7.y];
cell3_bin2Mag=integralBin2Max[pos8.x][pos8.y]+integralBin2Max[pos4.x][pos4.y]-integralBin2Max[pos5.x][pos5.y]-integralBin2Max[pos7.x][pos7.y];
cell3_bin3Mag=integralBin3Max[pos8.x][pos8.y]+integralBin3Max[pos4.x][pos4.y]-integralBin3Max[pos5.x][pos5.y]-integralBin3Max[pos7.x][pos7.y];
cell3_bin4Mag=integralBin4Max[pos8.x][pos8.y]+integralBin4Max[pos4.x][pos4.y]-integralBin4Max[pos5.x][pos5.y]-integralBin4Max[pos7.x][pos7.y];
cell3_bin5Mag=integralBin5Max[pos8.x][pos8.y]+integralBin5Max[pos4.x][pos4.y]-integralBin5Max[pos5.x][pos5.y]-integralBin5Max[pos7.x][pos7.y];
cell3_bin6Mag=integralBin6Max[pos8.x][pos8.y]+integralBin6Max[pos4.x][pos4.y]-integralBin6Max[pos5.x][pos5.y]-integralBin6Max[pos7.x][pos7.y];
cell3_bin7Mag=integralBin7Max[pos8.x][pos8.y]+integralBin7Max[pos4.x][pos4.y]-integralBin7Max[pos5.x][pos5.y]-integralBin7Max[pos7.x][pos7.y];
cell3_bin8Mag=integralBin8Max[pos8.x][pos8.y]+integralBin8Max[pos4.x][pos4.y]-integralBin8Max[pos5.x][pos5.y]-integralBin8Max[pos7.x][pos7.y];
cell3_bin9Mag=integralBin9Max[pos8.x][pos8.y]+integralBin9Max[pos4.x][pos4.y]-integralBin9Max[pos5.x][pos5.y]-integralBin9Max[pos7.x][pos7.y];
binvec.push_back((cell3_bin1Mag+U)/(sumMagBlock+U));
binvec.push_back((cell3_bin2Mag+U)/(sumMagBlock+U));
binvec.push_back((cell3_bin3Mag+U)/(sumMagBlock+U));
binvec.push_back((cell3_bin4Mag+U)/(sumMagBlock+U));
binvec.push_back((cell3_bin5Mag+U)/(sumMagBlock+U));
binvec.push_back((cell3_bin6Mag+U)/(sumMagBlock+U));
binvec.push_back((cell3_bin7Mag+U)/(sumMagBlock+U));
binvec.push_back((cell3_bin8Mag+U)/(sumMagBlock+U));
binvec.push_back((cell3_bin9Mag+U)/(sumMagBlock+U));
//caculate the histogram of gradient oriented the cell4
cell4_bin1Mag=integralBin1Max[pos9.x][pos9.y]+integralBin1Max[pos5.x][pos5.y]-integralBin1Max[pos6.x][pos6.y]-integralBin1Max[pos8.x][pos8.y];
cell4_bin2Mag=integralBin2Max[pos9.x][pos9.y]+integralBin2Max[pos5.x][pos5.y]-integralBin2Max[pos6.x][pos6.y]-integralBin2Max[pos8.x][pos8.y];
cell4_bin3Mag=integralBin3Max[pos9.x][pos9.y]+integralBin3Max[pos5.x][pos5.y]-integralBin3Max[pos6.x][pos6.y]-integralBin3Max[pos8.x][pos8.y];
cell4_bin4Mag=integralBin4Max[pos9.x][pos9.y]+integralBin4Max[pos5.x][pos5.y]-integralBin4Max[pos6.x][pos6.y]-integralBin4Max[pos8.x][pos8.y];
cell4_bin5Mag=integralBin5Max[pos9.x][pos9.y]+integralBin5Max[pos5.x][pos5.y]-integralBin5Max[pos6.x][pos6.y]-integralBin5Max[pos8.x][pos8.y];
cell4_bin6Mag=integralBin6Max[pos9.x][pos9.y]+integralBin6Max[pos5.x][pos5.y]-integralBin6Max[pos6.x][pos6.y]-integralBin6Max[pos8.x][pos8.y];
cell4_bin7Mag=integralBin7Max[pos9.x][pos9.y]+integralBin7Max[pos5.x][pos5.y]-integralBin7Max[pos6.x][pos6.y]-integralBin7Max[pos8.x][pos8.y];
cell4_bin8Mag=integralBin8Max[pos9.x][pos9.y]+integralBin8Max[pos5.x][pos5.y]-integralBin8Max[pos6.x][pos6.y]-integralBin8Max[pos8.x][pos8.y];
cell4_bin9Mag=integralBin9Max[pos9.x][pos9.y]+integralBin9Max[pos5.x][pos5.y]-integralBin9Max[pos6.x][pos6.y]-integralBin9Max[pos8.x][pos8.y];
binvec.push_back((cell4_bin1Mag+U)/(sumMagBlock+U));
binvec.push_back((cell4_bin2Mag+U)/(sumMagBlock+U));
binvec.push_back((cell4_bin3Mag+U)/(sumMagBlock+U));
binvec.push_back((cell4_bin4Mag+U)/(sumMagBlock+U));
binvec.push_back((cell4_bin5Mag+U)/(sumMagBlock+U));
binvec.push_back((cell4_bin6Mag+U)/(sumMagBlock+U));
binvec.push_back((cell4_bin7Mag+U)/(sumMagBlock+U));
binvec.push_back((cell4_bin8Mag+U)/(sumMagBlock+U));
binvec.push_back((cell4_bin9Mag+U)/(sumMagBlock+U));
BlockFeature.push_back(binvec);
float sum=0;
// cout<<sumMagBlock<<endl;
for(int i=0;i!=binvec.size();++i)
sum+=binvec[i];
cout<<sum<<endl;
binvec.clear();
}
}
}
//destroy the window
cvDestroyWindow("win");
// cvRelease()
// system("pause");
}
void Caculate(int bin,int binarr[][DETECT_WIDTH],float arr[][DETECT_WIDTH],float mag[][DETECT_WIDTH])
{
float s[DETECT_HEIGHT][DETECT_WIDTH]={0.0};
float temp[DETECT_HEIGHT][DETECT_WIDTH]={0.0};
for(int j=0;j!=DETECT_WIDTH;++j)
{
arr[-1][j]=0;
}
for(int i=0;i!=DETECT_HEIGHT;++i)
{
for(int j=0;j!=DETECT_WIDTH;++j)
{
temp[i][j]=mag[i][j];
if(bin!=binarr[i][j])
temp[i][j]=0;
if(j==0)
{
s[i][j]=temp[i][j];
}
else
s[i][j]=s[i][j-1]+temp[i][j];
arr[i][j]=arr[i-1][j]+s[i][j];
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -