34 #define _USE_MATH_DEFINES
36 #include <boost/math/special_functions/fpclassify.hpp>
57 MHDBGMSG(__FILE__,__LINE__,__PRETTY_FUNCTION__);
59 MHDBGMSG(__FILE__,__LINE__,__PRETTY_FUNCTION__);
61 MHDBGMSG(__FILE__,__LINE__,__PRETTY_FUNCTION__);
63 MHDBGMSG(__FILE__,__LINE__,__PRETTY_FUNCTION__);
66 MHDBGMSG(__FILE__,__LINE__,__PRETTY_FUNCTION__);
69 MHDBGMSG(__FILE__,__LINE__,__PRETTY_FUNCTION__);
71 MHDBGMSG(__FILE__,__LINE__,__PRETTY_FUNCTION__);
83 #define TRMEAN_MARGIN 3
93 MHDBGMSG(__FILE__,__LINE__,__PRETTY_FUNCTION__);
96 MHDBGMSG(__FILE__,__LINE__,__PRETTY_FUNCTION__);
113 MHDBGMSG(__FILE__,__LINE__,__PRETTY_FUNCTION__);
121 for (
int x=0;x<
XGRID;x++) {
122 for (
int y=0;y<
YGRID;y++) {
148 numFeatures=
static_cast<int>(
particles.size());
168 #define VERSCHIEBUNG 90.0
189 if (flowLine.
GetLen()<2)
continue;
197 double diff=(sollWinkel-istWinkel)*180.0/
M_PI;
202 while (diff>180.0) diff-=360.0;
203 while (diff<-180.0) diff+=360.0;
205 if (
false && rand()%10==3) cout << diff <<
": "
237 for(
unsigned int i = 0; i <
particles.size(); i++) {
256 double diff=sollWinkel-istWinkel;
263 vector<Linie> linien;
266 for(
unsigned int i = 0; i <
particles.size(); i++) {
272 if (flowLine.
GetLen()>1) {
274 linien.push_back(flowLine);
279 cout <<
"age: " << particleAge.
get_mean() << endl;
289 for (
unsigned int i=0;i<linien.size()*10;i++) {
291 int i1=
static_cast<int>(rand()%linien.size());
292 int i2=
static_cast<int>(rand()%linien.size());
299 if (
Linie(linien[i1].GetLinks(),linien[i1].GetOben(),
300 linien[i2].GetLinks(),linien[i2].GetOben()).
GetLen()<100) {
308 cvCircle(img, cvPoint((
int)p[0],(
int)p[1]), 1, CV_RGB(0,0,255), CV_FILLED);
332 cvCircle(img, cvPoint((
int)
kalmanState[0],(
int)kalmanState[1]),
333 4, CV_RGB(0,255,0), CV_FILLED);
345 #define FOCUS_CROSS_LWIDTH 3
366 MHDBGMSG(__FILE__,__LINE__,__PRETTY_FUNCTION__);
368 MHDBGMSG(__FILE__,__LINE__,__PRETTY_FUNCTION__);
373 cvTermCriteria(CV_TERMCRIT_ITER, 10, 1.0),
374 (
numCalls>0)?CV_LKFLOW_PYR_A_READY:0);
378 vector<GCPointer<Particle> > newParticles;
379 for (
unsigned int i=0;i<
particles.size();i++) {
381 if (
particles[i]->Found(curFeatures[i])) {
394 MHDBGMSG(__FILE__,__LINE__,__PRETTY_FUNCTION__);
402 MHDBGMSG(__FILE__,__LINE__,__PRETTY_FUNCTION__);
410 if (!boost::math::isnan(w)) {
411 wVec.push_back(w*180.0/
M_PI);
420 << w*180.0/
M_PI << endl;
424 MHDBGMSG(__FILE__,__LINE__,__PRETTY_FUNCTION__);
426 MHDBGMSG(__FILE__,__LINE__,__PRETTY_FUNCTION__);
427 MHDBGMSG_I(__FILE__,__LINE__,
"wVec.size",static_cast<int>(wVec.size()));
429 for (vector<double>::iterator i=wVec.begin();i!=wVec.end();i++) {
434 sort(wVec.begin(),wVec.end());
436 for (vector<double>::iterator i=wVec.begin();i!=wVec.end();i++) {
443 MHDBGMSG(__FILE__,__LINE__,__PRETTY_FUNCTION__);
458 MHDBGMSG(__FILE__,__LINE__,__PRETTY_FUNCTION__);
484 trapez[0]=cvPoint(
imgSize.width/4,focus.y);
487 trapez[3]=cvPoint(3*
imgSize.width/4,focus.y);
490 cvFillConvexPoly(
mask,
530 int cellSizeX = (int)floor(width/lenX + .5);
531 int cellSizeY = (int)floor(height/lenY + .5);
535 cvPoint(
GetXMin() + (x+1)*cellSizeX,
GetYMin() + (y+1)*cellSizeY),
581 atan2(newVec[1],newVec[0])))>
M_PI/16) {