⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ximaint.cpp

📁 It s a tool designed to extract as much information as possible from Bluetooth devices without the r
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	return(0.0f);	*/}/////////////////////////////////////////////////////////////////////////////////** * Bilinear interpolation kernel:  \verbatim          /         | 1-t           , if  0 <= t <= 1  h(t) = | t+1           , if -1 <= t <  0         | 0             , otherwise          \  \endverbatim * ***bd*** 2.2004 */float CxImage::KernelLinear(const float t){//  if (0<=t && t<=1) return 1-t;//  if (-1<=t && t<0) return 1+t;//  return 0;		//<Vladim韗 Kloucek>	if (t < -1.0f)		return 0.0f;	if (t < 0.0f)		return 1.0f+t;	if (t < 1.0f)		return 1.0f-t;	return 0.0f;}/////////////////////////////////////////////////////////////////////////////////** * Bicubic interpolation kernel (a=-1):  \verbatim          /         | 1-2|t|**2+|t|**3          , if |t| < 1  h(t) = | 4-8|t|+5|t|**2-|t|**3     , if 1<=|t|<2         | 0                         , otherwise          \  \endverbatim * ***bd*** 2.2004 */float CxImage::KernelCubic(const float t){  float abs_t = (float)fabs(t);  float abs_t_sq = abs_t * abs_t;  if (abs_t<1) return 1-2*abs_t_sq+abs_t_sq*abs_t;  if (abs_t<2) return 4 - 8*abs_t +5*abs_t_sq - abs_t_sq*abs_t;  return 0;}/////////////////////////////////////////////////////////////////////////////////** * Bicubic kernel (for a=-1 it is the same as BicubicKernel):  \verbatim          /         | (a+2)|t|**3 - (a+3)|t|**2 + 1     , |t| <= 1  h(t) = | a|t|**3 - 5a|t|**2 + 8a|t| - 4a   , 1 < |t| <= 2         | 0                                 , otherwise          \  \endverbatim * Often used values for a are -1 and -1/2. */float CxImage::KernelGeneralizedCubic(const float t, const float a){  float abs_t = (float)fabs(t);  float abs_t_sq = abs_t * abs_t;  if (abs_t<1) return (a+2)*abs_t_sq*abs_t - (a+3)*abs_t_sq + 1;  if (abs_t<2) return a*abs_t_sq*abs_t - 5*a*abs_t_sq + 8*a*abs_t - 4*a;  return 0;}/////////////////////////////////////////////////////////////////////////////////** * Lanczos windowed sinc interpolation kernel with radius r.  \verbatim          /  h(t) = | sinc(t)*sinc(t/r)       , if |t|<r         | 0                       , otherwise          \  \endverbatim * ***bd*** 2.2004 */float CxImage::KernelLanczosSinc(const float t, const float r){  if (fabs(t) > r) return 0;  if (t==0) return 1;  float pit=PI*t;  float pitd=pit/r;  return (float)((sin(pit)/pit) * (sin(pitd)/pitd));}////////////////////////////////////////////////////////////////////////////////float CxImage::KernelBox(const float x){	if (x < -0.5f)		return 0.0f;	if (x < 0.5f)		return 1.0f;	return 0.0f;}////////////////////////////////////////////////////////////////////////////////float CxImage::KernelHermite(const float x){	if (x < -1.0f)		return 0.0f;	if (x < 0.0f)		return (-2.0f*x-3.0f)*x*x+1.0f;	if (x < 1.0f)		return (2.0f*x-3.0f)*x*x+1.0f;	return 0.0f;//	if (fabs(x)>1) return 0.0f;//	return(0.5f+0.5f*(float)cos(PI*x));}////////////////////////////////////////////////////////////////////////////////float CxImage::KernelHamming(const float x){	if (x < -1.0f)		return 0.0f;	if (x < 0.0f)		return 0.92f*(-2.0f*x-3.0f)*x*x+1.0f;	if (x < 1.0f)		return 0.92f*(2.0f*x-3.0f)*x*x+1.0f;	return 0.0f;//	if (fabs(x)>1) return 0.0f;//	return(0.54f+0.46f*(float)cos(PI*x));}////////////////////////////////////////////////////////////////////////////////float CxImage::KernelSinc(const float x){	if (x == 0.0)		return(1.0);	return((float)sin(PI*x)/(PI*x));}////////////////////////////////////////////////////////////////////////////////float CxImage::KernelBlackman(const float x){	//if (fabs(x)>1) return 0.0f;	return (0.42f+0.5f*(float)cos(PI*x)+0.08f*(float)cos(2.0f*PI*x));}////////////////////////////////////////////////////////////////////////////////float CxImage::KernelBessel_J1(const float x){	double p, q;		register long i;		static const double	Pone[] =	{		0.581199354001606143928050809e+21,		-0.6672106568924916298020941484e+20,		0.2316433580634002297931815435e+19,		-0.3588817569910106050743641413e+17,		0.2908795263834775409737601689e+15,		-0.1322983480332126453125473247e+13,		0.3413234182301700539091292655e+10,		-0.4695753530642995859767162166e+7,		0.270112271089232341485679099e+4	},	Qone[] =	{		0.11623987080032122878585294e+22,		0.1185770712190320999837113348e+20,		0.6092061398917521746105196863e+17,		0.2081661221307607351240184229e+15,		0.5243710262167649715406728642e+12,		0.1013863514358673989967045588e+10,		0.1501793594998585505921097578e+7,		0.1606931573481487801970916749e+4,		0.1e+1	};			p = Pone[8];	q = Qone[8];	for (i=7; i >= 0; i--)	{		p = p*x*x+Pone[i];		q = q*x*x+Qone[i];	}	return (float)(p/q);}////////////////////////////////////////////////////////////////////////////////float CxImage::KernelBessel_P1(const float x){	double p, q;		register long i;		static const double	Pone[] =	{		0.352246649133679798341724373e+5,		0.62758845247161281269005675e+5,		0.313539631109159574238669888e+5,		0.49854832060594338434500455e+4,		0.2111529182853962382105718e+3,		0.12571716929145341558495e+1	},	Qone[] =	{		0.352246649133679798068390431e+5,		0.626943469593560511888833731e+5,		0.312404063819041039923015703e+5,		0.4930396490181088979386097e+4,		0.2030775189134759322293574e+3,		0.1e+1	};			p = Pone[5];	q = Qone[5];	for (i=4; i >= 0; i--)	{		p = p*(8.0/x)*(8.0/x)+Pone[i];		q = q*(8.0/x)*(8.0/x)+Qone[i];	}	return (float)(p/q);}////////////////////////////////////////////////////////////////////////////////float CxImage::KernelBessel_Q1(const float x){	double p, q;		register long i;		static const double	Pone[] =	{		0.3511751914303552822533318e+3,		0.7210391804904475039280863e+3,		0.4259873011654442389886993e+3,		0.831898957673850827325226e+2,		0.45681716295512267064405e+1,		0.3532840052740123642735e-1	},	Qone[] =	{		0.74917374171809127714519505e+4,		0.154141773392650970499848051e+5,		0.91522317015169922705904727e+4,		0.18111867005523513506724158e+4,		0.1038187585462133728776636e+3,		0.1e+1	};			p = Pone[5];	q = Qone[5];	for (i=4; i >= 0; i--)	{		p = p*(8.0/x)*(8.0/x)+Pone[i];		q = q*(8.0/x)*(8.0/x)+Qone[i];	}	return (float)(p/q);}////////////////////////////////////////////////////////////////////////////////float CxImage::KernelBessel_Order1(float x){	float p, q;		if (x == 0.0)		return (0.0f);	p = x;	if (x < 0.0)		x=(-x);	if (x < 8.0)		return(p*KernelBessel_J1(x));	q = (float)sqrt(2.0f/(PI*x))*(float)(KernelBessel_P1(x)*(1.0f/sqrt(2.0f)*(sin(x)-cos(x)))-8.0f/x*KernelBessel_Q1(x)*		(-1.0f/sqrt(2.0f)*(sin(x)+cos(x))));	if (p < 0.0f)		q = (-q);	return (q);}////////////////////////////////////////////////////////////////////////////////float CxImage::KernelBessel(const float x){	if (x == 0.0f)		return(PI/4.0f);	return(KernelBessel_Order1(PI*x)/(2.0f*x));}////////////////////////////////////////////////////////////////////////////////float CxImage::KernelGaussian(const float x){	return (float)(exp(-2.0f*x*x)*0.79788456080287f/*sqrt(2.0f/PI)*/);}////////////////////////////////////////////////////////////////////////////////float CxImage::KernelQuadratic(const float x){	if (x < -1.5f)		return(0.0f);	if (x < -0.5f)		return(0.5f*(x+1.5f)*(x+1.5f));	if (x < 0.5f)		return(0.75f-x*x);	if (x < 1.5f)		return(0.5f*(x-1.5f)*(x-1.5f));	return(0.0f);}////////////////////////////////////////////////////////////////////////////////float CxImage::KernelMitchell(const float x){#define KM_B (1.0f/3.0f)#define KM_C (1.0f/3.0f)#define KM_P0 ((  6.0f - 2.0f * KM_B ) / 6.0f)#define KM_P2 ((-18.0f + 12.0f * KM_B + 6.0f * KM_C) / 6.0f)#define KM_P3 (( 12.0f - 9.0f  * KM_B - 6.0f * KM_C) / 6.0f)#define KM_Q0 ((  8.0f * KM_B + 24.0f * KM_C) / 6.0f)#define KM_Q1 ((-12.0f * KM_B - 48.0f * KM_C) / 6.0f)#define KM_Q2 ((  6.0f * KM_B + 30.0f * KM_C) / 6.0f)#define KM_Q3 (( -1.0f * KM_B -  6.0f * KM_C) / 6.0f)		if (x < -2.0)		return(0.0f);	if (x < -1.0)		return(KM_Q0-x*(KM_Q1-x*(KM_Q2-x*KM_Q3)));	if (x < 0.0f)		return(KM_P0+x*x*(KM_P2-x*KM_P3));	if (x < 1.0f)		return(KM_P0+x*x*(KM_P2+x*KM_P3));	if (x < 2.0f)		return(KM_Q0+x*(KM_Q1+x*(KM_Q2+x*KM_Q3)));	return(0.0f);}////////////////////////////////////////////////////////////////////////////////float CxImage::KernelCatrom(const float x){	if (x < -2.0)		return(0.0f);	if (x < -1.0)		return(0.5f*(4.0f+x*(8.0f+x*(5.0f+x))));	if (x < 0.0)		return(0.5f*(2.0f+x*x*(-5.0f-3.0f*x)));	if (x < 1.0)		return(0.5f*(2.0f+x*x*(-5.0f+3.0f*x)));	if (x < 2.0)		return(0.5f*(4.0f+x*(-8.0f+x*(5.0f-x))));	return(0.0f);}////////////////////////////////////////////////////////////////////////////////#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -