Mat CmSaliencyRC::GetSR(CMat &img3f) { Size sz(64, 64); Mat img1f[2], sr1f, cmplxSrc2f, cmplxDst2f; cvtColor(img3f, img1f[1], CV_BGR2GRAY); resize(img1f[1], img1f[0], sz, 0, 0, CV_INTER_AREA); img1f[1] = Mat::zeros(sz, CV_32F); merge(img1f, 2, cmplxSrc2f); dft(cmplxSrc2f, cmplxDst2f); AbsAngle(cmplxDst2f, img1f[0], img1f[1]); log(img1f[0], img1f[0]); blur(img1f[0], sr1f, Size(3, 3)); sr1f = img1f[0] - sr1f; exp(sr1f, sr1f); GetCmplx(sr1f, img1f[1], cmplxDst2f); dft(cmplxDst2f, cmplxSrc2f, DFT_INVERSE | DFT_SCALE); split(cmplxSrc2f, img1f); pow(img1f[0], 2, img1f[0]); pow(img1f[1], 2, img1f[1]); img1f[0] += img1f[1]; GaussianBlur(img1f[0], img1f[0], Size(3, 3), 0); normalize(img1f[0], img1f[0], 0, 1, NORM_MINMAX); resize(img1f[0], img1f[1], img3f.size(), 0, 0, INTER_CUBIC); return img1f[1]; }
//컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴 //Procedure TouchedGround //Author Paul. //Date Wed 11 Sep 1996 // //Description // //Inputs // //Returns // //------------------------------------------------------------------------------ Bool Collide::TouchedGround( AirStrucPtr ac, ANGLES newpitch,ANGLES newroll, Collide::Pos& pos, SLong groundlevel, Bool isCrashed ) { ac->fly.pModel->GroundHeight = groundlevel; //RJS 15Apr99 //DEADCODE CSB 14/03/00 if(ac->fly.numinsag) //DEADCODE CSB 14/03/00 { //DEADCODE CSB 14/03/00 if(ac->World.Y < groundlevel + ac->classtype->deckshunt) //DEADCODE CSB 14/03/00 { //DEADCODE CSB 14/03/00 SWord maxang = ac->pitch; //DEADCODE CSB 14/03/00 pos = Collide::NOSE_TOUCH; //DEADCODE CSB 14/03/00 if(-SWord(ac->pitch) > maxang) //DEADCODE CSB 14/03/00 { //DEADCODE CSB 14/03/00 maxang = -SWord(ac->pitch); //DEADCODE CSB 14/03/00 pos = Collide::TAIL_TOUCH; //DEADCODE CSB 14/03/00 } //DEADCODE CSB 14/03/00 if(SWord(ac->roll) > maxang) //DEADCODE CSB 14/03/00 { //DEADCODE CSB 14/03/00 maxang = SWord(ac->roll); //DEADCODE CSB 14/03/00 pos = Collide::RIGHT_WING_TOUCH; //DEADCODE CSB 14/03/00 } //DEADCODE CSB 14/03/00 if(-SWord(ac->roll) > maxang) //DEADCODE CSB 14/03/00 { //DEADCODE CSB 14/03/00 maxang = -SWord(ac->roll); //DEADCODE CSB 14/03/00 pos = Collide::LEFT_WING_TOUCH; //DEADCODE CSB 14/03/00 } //DEADCODE CSB 14/03/00 return(TRUE); //DEADCODE CSB 14/03/00 } //DEADCODE CSB 14/03/00 else //DEADCODE CSB 14/03/00 { //DEADCODE CSB 14/03/00 pos = Collide::NOTTOUCHED; //DEADCODE CSB 14/03/00 return(FALSE); //DEADCODE CSB 14/03/00 } //DEADCODE CSB 14/03/00 } Bool retval = FALSE; SWord pitchdelta, rolldelta; COORDS3D coords; COORDS3D offset; COORDS3D PushedOffset; //RJS 12Aug97 UWord absroll = ac->roll; //RJS 14Apr99 AircraftAnimData* adptr = (AircraftAnimData*) ac->Anim; //RJS 15Apr99 LnchrType CTtocheck; pitchdelta = ac->pitch - newpitch; rolldelta = ac->roll - newroll; //First, are we upside down??? if((absroll > ACUPSIDEDOWNMIN) && (absroll < ACUPSIDEDOWNMAX))//RJS 14Apr99 { SLong biggestang = pitchdelta; CTtocheck = CT_BACK; if(-pitchdelta > biggestang) { biggestang = -pitchdelta; CTtocheck = CT_FRONT; } if(SWord(rolldelta - ANGLES_180Deg) > biggestang) { biggestang = SWord(rolldelta - ANGLES_180Deg); CTtocheck = CT_LEFT; } if(SWord(ANGLES_180Deg - rolldelta) > biggestang) { biggestang = SWord(ANGLES_180Deg - rolldelta); CTtocheck = CT_RIGHT; } SHAPE.GetContactPoint(ItemPtr(ac), CTtocheck, coords, offset, PushedOffset); if(coords.Y < groundlevel) { if(CTtocheck == CT_BACK) pos = Collide::TAIL_TOUCH; else if(CTtocheck == CT_FRONT) pos = Collide::NOSE_TOUCH; else if(CTtocheck == CT_LEFT) pos = Collide::LEFT_WING_TOUCH; else pos = Collide::RIGHT_WING_TOUCH; retval = TRUE; } } else { if((pitchdelta > ANGLES_5Deg) && (pitchdelta < ANGLES_15Deg) && (AbsAngle(rolldelta) > ANGLES_5Deg)) { CTtocheck = CT_LEFT; if(rolldelta > 0) CTtocheck = CT_RIGHT; SHAPE.GetContactPoint(ItemPtr(ac), CTtocheck, coords, offset, PushedOffset); if(coords.Y < groundlevel) { if(CTtocheck == CT_LEFT) if(ac->fly.pModel->GearTouched) pos = Collide::WHEEL_AND_WING_TOUCH; else pos = Collide::LEFT_WING_TOUCH; else if(ac->fly.pModel->GearTouched) pos = Collide::WHEEL_AND_WING_TOUCH; else pos = Collide::RIGHT_WING_TOUCH; retval = TRUE; } } else { CTtocheck = CT_WHLFRONT; if((adptr->acrpm <= 0) || (adptr->FRONT >= 254)) if(pitchdelta < -ANGLES_15Deg) CTtocheck = CT_FRONT; else CTtocheck = CT_BELLY; SWord maxroll = ANGLES_5Deg; if(CTtocheck == CT_WHLFRONT) maxroll += ANGLES_10Deg - pitchdelta; if(AbsAngle(rolldelta) > maxroll) if(rolldelta > 0) CTtocheck = CT_RIGHT; else CTtocheck = CT_LEFT; SHAPE.GetContactPoint(ItemPtr(ac), CTtocheck, coords, offset, PushedOffset); if(coords.Y < groundlevel) { if(CTtocheck == CT_WHLFRONT) pos = Collide::PROP_TOUCH; else if(CTtocheck == CT_FRONT) pos = Collide::NOSE_TOUCH; else if(CTtocheck == CT_BELLY) pos = Collide::LANDED_BELLY; else if(CTtocheck == CT_LEFT) pos = Collide::LEFT_WING_TOUCH; else pos = Collide::RIGHT_WING_TOUCH; retval = TRUE; } } } //#define PRINT_GROUND_COLLISION #ifdef PRINT_GROUND_COLLISION switch(CTtocheck) { case CT_WHLFRONT: PrintString(40, 2, "PROP "); break; case CT_FRONT: PrintString(40, 2, "NOSE "); break; case CT_BACK: PrintString(40, 2, "FIN "); break; case CT_LEFT: PrintString(40, 2, "LEFT_WING "); break; case CT_RIGHT: PrintString(40, 2, "RIGHT_WING"); break; case CT_BELLY: PrintString(40, 2, "BELLY "); break; } switch(pos) { //DEADCODE CSB 01/03/00 case Collide::NOTTOUCHED: PrintString(40, 3, "NOTTOUCHED "); break; //DEADCODE CSB 01/03/00 case Collide::LANDED_OK: PrintString(40, 3, "LANDED_OK "); break; case Collide::WHEEL_AND_WING_TOUCH: PrintString(40, 3, "WHEEL_&_WING"); break; case Collide::LANDED_BELLY: PrintString(40, 3, "LANDED_BELLY"); break; case Collide::PROP_TOUCH: PrintString(40, 3, "PROP_TOUCH "); break; case Collide::NOSE_TOUCH: PrintString(40, 3, "NOSE_TOUCH "); break; case Collide::LEFT_WING_TOUCH: PrintString(40, 3, "LEFT_WING "); break; case Collide::RIGHT_WING_TOUCH: PrintString(40, 3, "RIGHT_WING "); break; case Collide::TAIL_TOUCH: PrintString(40, 3, "TAIL_TOUCH "); break; } #endif //DEADCODE CSB 29/02/00 if( (pitchdelta<0?-pitchdelta:pitchdelta) < (rolldelta<0?-rolldelta:rolldelta) ) //DEADCODE CSB 29/02/00 { //DEADCODE CSB 29/02/00 //Dpitch gt Droll //DEADCODE CSB 29/02/00 //DEADCODE CSB 29/02/00 if ((ANGLES)(Angles)rolldelta>ACROLLANGLE) //DEADCODE CSB 29/02/00 { //DEADCODE CSB 29/02/00 SHAPE.GetContactPoint((itemptr )ac,CT_LEFT,coords,offset,PushedOffset);//RJS 12Aug97 //DEADCODE CSB 29/02/00 if((adptr->aclegsuspl > 0) || (adptr->aclegsuspr > 0)) //DEADCODE CSB 29/02/00 pos = Collide::WHEEL_AND_WING_TOUCH; //DEADCODE CSB 29/02/00 else //DEADCODE CSB 29/02/00 pos = Collide::LEFT_WING_TOUCH; //DEADCODE CSB 29/02/00 } //DEADCODE CSB 29/02/00 else //DEADCODE CSB 29/02/00 { //DEADCODE CSB 29/02/00 if ((ANGLES)(Angles)rolldelta<-ACROLLANGLE) //DEADCODE CSB 29/02/00 { //DEADCODE CSB 29/02/00 SHAPE.GetContactPoint((itemptr )ac,CT_RIGHT,coords,offset,PushedOffset);//RJS 12Aug97 //DEADCODE CSB 29/02/00 if((adptr->aclegsuspl > 0) || (adptr->aclegsuspr > 0)) //DEADCODE CSB 29/02/00 pos = Collide::WHEEL_AND_WING_TOUCH; //DEADCODE CSB 29/02/00 else //DEADCODE CSB 29/02/00 pos = Collide::RIGHT_WING_TOUCH; //DEADCODE CSB 29/02/00 } //DEADCODE CSB 29/02/00 else //DEADCODE CSB 29/02/00 { //DEADCODE CSB 29/02/00 if ( (!adptr->acleglowerl && !adptr->LEFTWHEEL) //RJS 19May99 //DEADCODE CSB 29/02/00 && (!adptr->acleglowerr && !adptr->RIGHTWHEEL) ) //RJS 19MaY99 //DEADCODE CSB 29/02/00 { //DEADCODE CSB 29/02/00 pos = Collide::LANDED_OK; //DEADCODE CSB 29/02/00 return FALSE; //DEADCODE CSB 29/02/00 } //DEADCODE CSB 29/02/00 else //DEADCODE CSB 29/02/00 { //DEADCODE CSB 29/02/00 SHAPE.GetContactPoint((itemptr )ac,CT_BELLY,coords,offset,PushedOffset);//RJS 12Aug97 //DEADCODE CSB 29/02/00 pos = Collide::LANDED_BELLY; //DEADCODE CSB 29/02/00 } //DEADCODE CSB 29/02/00 } //DEADCODE CSB 29/02/00 } //DEADCODE CSB 29/02/00 } //DEADCODE CSB 29/02/00 else //DEADCODE CSB 29/02/00 { //DEADCODE CSB 29/02/00 //Droll gt DPitch //DEADCODE CSB 29/02/00 //DEADCODE CSB 29/02/00 if ((ANGLES)(Angles)pitchdelta>ACPITCHANGLE) //DEADCODE CSB 29/02/00 { //DEADCODE CSB 29/02/00 SHAPE.GetContactPoint((itemptr )ac,CT_FRONT,coords,offset,PushedOffset);//RJS 12Aug97 //DEADCODE CSB 29/02/00 pos = Collide::NOSE_TOUCH; //DEADCODE CSB 29/02/00 } //DEADCODE CSB 29/02/00 else //DEADCODE CSB 29/02/00 { //DEADCODE CSB 29/02/00 if ((ANGLES)(Angles)pitchdelta<-ACPITCHANGLE) //DEADCODE CSB 29/02/00 { //DEADCODE CSB 29/02/00 SHAPE.GetContactPoint((itemptr )ac,CT_BACK,coords,offset,PushedOffset);//RJS 12Aug97 //DEADCODE CSB 29/02/00 pos = Collide::TAIL_TOUCH; //RJS 13Jan99 //DEADCODE CSB 29/02/00 } //DEADCODE CSB 29/02/00 else //DEADCODE CSB 29/02/00 { //DEADCODE CSB 29/02/00 if ( (!adptr->acleglowerl && !adptr->LEFTWHEEL) //RJS 19May99 //DEADCODE CSB 29/02/00 && (!adptr->acleglowerr && !adptr->RIGHTWHEEL) ) //RJS 19MaY99 //DEADCODE CSB 29/02/00 { //DEADCODE CSB 29/02/00 pos = Collide::LANDED_OK; //DEADCODE CSB 29/02/00 return FALSE; //DEADCODE CSB 29/02/00 } //DEADCODE CSB 29/02/00 else //DEADCODE CSB 29/02/00 { //DEADCODE CSB 29/02/00 if((adptr->ENGINELEFT != BS_DEAD) || (adptr->ENGINERIGHT != BS_DEAD)) //DEADCODE CSB 29/02/00 { //DEADCODE CSB 29/02/00 SHAPE.GetContactPoint((itemptr )ac,CT_BELLY,coords,offset,PushedOffset);//RJS 12Aug97 //DEADCODE CSB 29/02/00 pos = Collide::PROP_TOUCH; //DEADCODE CSB 29/02/00 } //DEADCODE CSB 29/02/00 else //DEADCODE CSB 29/02/00 { //DEADCODE CSB 29/02/00 SHAPE.GetContactPoint((itemptr )ac,CT_BELLY,coords,offset,PushedOffset);//RJS 12Aug97 //DEADCODE CSB 29/02/00 pos = Collide::LANDED_BELLY; //DEADCODE CSB 29/02/00 } //DEADCODE CSB 29/02/00 } //DEADCODE CSB 29/02/00 } //DEADCODE CSB 29/02/00 } //DEADCODE CSB 29/02/00 } SLong glevel; if(isCrashed) //RJS 02Jul98 { if(ac->World.Y <= ac->fly.pModel->GroundHeight) //RJS 24Aug98 retval = TRUE; } else { glevel = Land_Scape.GetGroundLevel(coords); //RJS 13Jan99 if(coords.Y <= glevel) //RJS 13Jan99 retval = TRUE; //RJS 13Jan99 } if (!retval) pos = Collide::NOTTOUCHED; return(retval); }