Example #1
0
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];
}
Example #2
0
//컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴
//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);
}