Exemplo n.º 1
0
void SimilarityContent::addImage(VImage *vim) {
    color_image_t* im = makeGistImage(vim);
    float* desc = color_gist_scaletab(
                im, NBLOCKS, N_SCALE, ORIENTATIONS_PER_SCALE);
    color_image_delete(im);

    descriptions[vim] = desc;
}
Exemplo n.º 2
0
int main(int argc,char **args) {
  
  const char *infilename="/dev/stdin";
  int nblocks=4;
  int n_scale=3;
  int orientations_per_scale[50]={8,8,4};
  

  while(*++args) {
    const char *a=*args;
    
    if(!strcmp(a,"-h")) usage();
    else if(!strcmp(a,"-nblocks")) {
      if(!sscanf(*++args,"%d",&nblocks)) {
        fprintf(stderr,"could not parse %s argument",a); 
        usage();
      }
    } else if(!strcmp(a,"-orientationsPerScale")) {
      char *c;
      n_scale=0;
      for(c=strtok(*++args,",");c;c=strtok(NULL,",")) {
        if(!sscanf(c,"%d",&orientations_per_scale[n_scale++])) {
          fprintf(stderr,"could not parse %s argument",a); 
          usage();         
        }
      }
    } else {
      infilename=a;
    }
  }

  color_image_t *im=load_ppm(infilename);

  float *desc = color_gist_scaletab(im,nblocks,n_scale,orientations_per_scale);

  int i;
  
  int descsize=0;
  /* compute descriptor size */
  for(i=0;i<n_scale;i++) 
    descsize+=nblocks*nblocks*orientations_per_scale[i];

  descsize*=3; /* color */

  /* print descriptor */
  for(i=0;i<descsize;i++) 
    printf("%.4f ",desc[i]);

  printf("\n");
  
  free(desc);

  color_image_delete(im);

  return 0; 
}
Exemplo n.º 3
0
float *color_gist(color_image_t *src, int w, int a, int b, int c) {  
    int orientationsPerScale[3];

    orientationsPerScale[0] = a;
    orientationsPerScale[1] = b;
    orientationsPerScale[2] = c;

    return color_gist_scaletab(src,w,3,orientationsPerScale);

}
Exemplo n.º 4
0
void color_gist_scaletab_wrap(uint8_t *data, int height, int width, int nblocks, int n_scale, const int *orientations_per_scale, float *desc, int desc_size) {
    color_image_t *im=color_image_new(width, height);
    int i, size = height * width;
    for (i = 0; i < size; ++i) {
        im->c1[i] = *(data++);
        im->c2[i] = *(data++);
        im->c3[i] = *(data++);
    }

    float *desc_out = color_gist_scaletab(im, nblocks, n_scale, orientations_per_scale);

    memcpy(desc, desc_out, desc_size * sizeof(float));
    free(desc_out);
    color_image_delete(im);
}
Exemplo n.º 5
0
void color_gist_scaletab_wrap(unsigned char *data, int height, int width, int nblocks, int n_scale, const int *orientations_per_scale, float *desc, int desc_size) {
    float *desc_out;
    color_image_t *im=color_image_new(width, height);
    int i, size = height * width;
    // Not only copies to data structure but also switches BGR -> RGB
    for (i = 0; i < size; ++i) {
        im->c3[i] = *(data++);
        im->c2[i] = *(data++);
        im->c1[i] = *(data++);
    }

    desc_out = color_gist_scaletab(im, nblocks, n_scale, orientations_per_scale);
    if (desc_out != NULL)
        memcpy(desc, desc_out, desc_size * sizeof(float));
    free(desc_out);
    color_image_delete(im);
}
Exemplo n.º 6
0
static PyObject* gist_extract(PyObject *self, PyObject *args)
{
	int nblocks=4;
	int n_scale=3;
	int orientations_per_scale[50]={8,8,4};
	PyArrayObject *image, *descriptor;

	if (!PyArg_ParseTuple(args, "O", &image))
	{
		return NULL;
	}

	if (PyArray_TYPE(image) != NPY_UINT8) {
		PyErr_SetString(PyExc_TypeError, "type of image must be uint8");
		return NULL;
	}

	if (PyArray_NDIM(image) != 3) {
		PyErr_SetString(PyExc_TypeError, "dimensions of image must be 3.");
		return NULL;
	}

	npy_intp *dims_image = PyArray_DIMS(image);


	const int w = (int) *(dims_image+1);
	const int h = (int) *(dims_image);

	// Read image to color_image_t structure
	color_image_t *im=color_image_new(w,h);

	for (int y=0, i=0 ; y<h ; ++y) {
		for (int x=0 ; x<w ; ++x, ++i) {
			im->c1[i] = *(unsigned char *)PyArray_GETPTR3(image, y, x, 0);
			im->c2[i] = *(unsigned char *)PyArray_GETPTR3(image, y, x, 1);
			im->c3[i] = *(unsigned char *)PyArray_GETPTR3(image, y, x, 2);
		}
	}

	// Extract descriptor
	float *desc=color_gist_scaletab(im,nblocks,n_scale,orientations_per_scale);

	int descsize=0;
	/* compute descriptor size */
	for(int i=0;i<n_scale;i++)
		descsize+=nblocks*nblocks*orientations_per_scale[i];

	descsize*=3; /* color */


	// Allocate output
	npy_intp dim_desc[1] = {descsize};
	descriptor = (PyArrayObject *) PyArray_SimpleNew(1, dim_desc, NPY_FLOAT);

	// Set val
	for (int i=0 ; i<descsize ; ++i) {
		*(float *)PyArray_GETPTR1(descriptor, i) = desc[i];
	}

	// Release memory
	color_image_delete(im);
	free(desc);

	return PyArray_Return(descriptor);
}