Exemple #1
0
static void transform_roi_buffers(float *y, float *x, int n, int roi)
{
	float x_p0[3*n*n], *x_p = x_p0;
	ppsmooth_vec(x_p0, x, n, n, 3);
	if (roi == 2) x_p = x;
	if (roi == 3) { for (int i = 0; i < 3*n*n; i++) y[i]=x_p0[i]; return; }
	float *c = xmalloc(n*n*sizeof*c);
	float *ys = xmalloc(n*n*sizeof*c);
	fftwf_complex *fc = fftwf_xmalloc(n*n*sizeof*fc);
	for (int l = 0; l < 3; l++)
	{
		for (int i = 0; i < n*n; i++)
			c[i] = x_p[3*i+l];
		fft_2dfloat(fc, c, n, n);
		for (int i = 0; i < n*n; i++)
			//ys[i] = cabs(fc[i]);
			ys[i] = 255*(log(cabs(fc[i])/255)+0.5)/5;
		//float fac = n*13;
		float fac = n*3;
		for (int j = 0; j < n; j++)
		for (int i = 0; i < n; i++)
		{
			int ii = (i + n/2) % n;
			int jj = (j + n/2) % n;
			float norm = hypot(i-n/2-1, j-n/2-1) / fac;
			y[3*(j*n+i)+l] = ys[jj*n+ii] * 1;//norm;
		}
	}
	free(ys);
	free(c);
	fftwf_free(fc);
	//float param[1] = {0.5};
	//blur_2d(y, y, n, n, 3, "cauchy", param, 1);
}
Exemple #2
0
static void dht(float *y, float *x, int w, int h)
{
	fftwf_complex *gc = xmalloc(w*h*sizeof*gc);
	fft_2dfloat(gc, x, w, h);
	for (int i = 0; i < w*h; i++)
		y[i] = (crealf(gc[i]) - cimagf(gc[i]))/sqrt(w*h);
	fftwf_free(gc);
}
Exemple #3
0
void periodic_component(float *y, float *x, int w, int h)
{
	float *lx = xmalloc(w*h*sizeof*lx);
	complex float *flx = xmalloc(w*h*sizeof*flx);

	symmetric_laplacian(lx, x, w, h);
	fft_2dfloat(flx, lx, w, h);

	for (int j = 0; j < h; j++)
	for (int i = 0; i < w; i++)
	{
		int idx = w*j + i;
		float k = (2 * M_PI / w) * symmetric_index(i, w);
		float l = (2 * M_PI / h) * symmetric_index(j, l);
		flx[idx] /= k*k + l*k;
	}

	ifft_2dfloat(y, flx, w, h);

	free(flx);
	free(lx);
}