Cpwt::Cpwt (int n)
  //## begin Cpwt::Cpwt%3CB0F021027D.hasinit preserve=no
  //## end Cpwt::Cpwt%3CB0F021027D.hasinit
  //## begin Cpwt::Cpwt%3CB0F021027D.initialization preserve=yes
  //## end Cpwt::Cpwt%3CB0F021027D.initialization
{
  //## begin Cpwt::Cpwt%3CB0F021027D.body preserve=yes
	if ( n == 4 || n == 20 )
		pwtset (n);
	else
		pwtset (12);


  //## end Cpwt::Cpwt%3CB0F021027D.body
}
Beispiel #2
0
int main(void)
{
	unsigned long i,j,l,nerror=0,ntot=NX*NY;
	float *a,*aorg;
	static unsigned long ndim[]={0,NX,NY};

	aorg=vector(1,ntot);
	a=vector(1,ntot);
	pwtset(12);
	for (i=1;i<=NX;i++)
		for (j=1;j<=NY;j++) {
			l=i+(j-1)*NX;
			aorg[l]=a[l]=(i == j ? -1.0 : 1.0/sqrt(fabs((float)(i-j))));
		}
	wtn(a,ndim,2,1,pwt);
	/* here, one might set the smallest components to zero, encode and transmit
	the remaining components as a compressed form of the "image" */
	wtn(a,ndim,2,-1,pwt);
	for (l=1;l<=ntot;l++) {
		if (fabs(aorg[l]-a[l]) >= EPS) {
			printf("Compare Error at element %ld\n",l);
			nerror++;
		}
	}
	if (nerror) printf("Number of comparision errors: %ld\n",nerror);
	else printf("transform-inverse transform check OK\n");
	free_vector(a,1,ntot);
	free_vector(aorg,1,ntot);
	return nerror;
}
Beispiel #3
0
//-----------------------------------------------------------------------------
// name: bool setup( void )
// desc: set up original wavelet trees, calculate threshold, initialize root
//		 of new tree
//----------------------------------------------------------------------------- 
bool Treesynth::setup( void )
{
	// Get value arrays of trees
	float * tnew_values = tnew->values();
	float * tree_values = tree->values();

	// Wavelet decompositions
	pwtset( 10 );

	wt1( tree_values, tree->getSize(), 1, *pwt );
	if( lefttree ) {
		float * lefttree_values = lefttree->values();
		wt1( lefttree_values, ( 1 << tree->getSize() ), 1, *pwt );	// pow( 2, tree->getSize() )
	}

	// Calculate nearness threshold (epsilon) and print related values
	std::cout << "p: " << percentage << std::endl;
	std::cout << "epsilon: " << (epsilon = FindEpsilon( tree, tree->getSize(), percentage )) << std::endl;
	std::cout << "kfactor: " << kfactor << std::endl;
	
	// Copy root of tnew, since that's always the same

	tnew_values[0] = tree_values[0];	// approximation
	tnew_values[1] = tree_values[1];	// root

	// Return
	return true;
}
Beispiel #4
0
int main(void)
{
	unsigned long i,nused;
	int itest,k;
	float *u,*v,*w,frac,thresh,tmp;

	u=vector(1,NMAX);
	v=vector(1,NMAX);
	w=vector(1,NMAX);
	for (;;) {
		printf("Enter k (4, -4, 12, or 20) and frac (0.0 to 1.0):\n");
		if (scanf("%d %f",&k,&frac) == EOF) break;
		frac=FMIN(1.0,FMAX(0.0,frac));
		itest=(k == -4 ? 1 : 0);
		if (k < 0) k = -k;
		if (k != 4 && k != 12 && k != 20) continue;
		for (i=1;i<=NMAX;i++)
			w[i]=v[i]=(i > NCEN-NWID && i < NCEN+NWID ?
				((float)(i-NCEN+NWID)*(float)(NCEN+NWID-i))/(NWID*NWID) : 0.0);
		if (!itest) pwtset(k);
		wt1(v,NMAX,1,itest ? daub4 : pwt);
		for (i=1;i<=NMAX;i++) u[i]=fabs(v[i]);
		thresh=select((int)((1.0-frac)*NMAX),NMAX,u);
		nused=0;
		for (i=1;i<=NMAX;i++) {
			if (fabs(v[i]) <= thresh)
				v[i]=0.0;
			else
				nused++;
		}
		wt1(v,NMAX,-1,itest ? daub4 : pwt);
		for (thresh=0.0,i=1;i<=NMAX;i++)
			if ((tmp=fabs(v[i]-w[i])) > thresh) thresh=tmp;
		printf("k,NMAX,nused= %d %d %d\n",k,NMAX,nused);
		printf("discrepancy= %12.6f\n",thresh);
	}
	free_vector(w,1,NMAX);
	free_vector(v,1,NMAX);
	free_vector(u,1,NMAX);
	return 0;
}