Beispiel #1
0
void marcaSegunSeamV(Imagen & LumMargenV, Imagen & BiR, Imagen & BiG, Imagen & BiB)
{
     //Marcamos con valores fuera de rango el seam en la imagen LumMargenVEscogido
	find_v_seam(LumMargenV);
	
	unsigned int col;
	
	for(unsigned int row = 0; row < LumMargenV.fils(); row++)
	{
		col = 0;
		while(LumMargenV(row, col) < 10E20) //10E20: valor fuera de rango.
		{
			BiR(row, col) = 10E20;
			BiG(row, col) = 10E20;
			BiB(row, col) = 10E20;
			col++;
			
			if(col == LumMargenV.cols()) //Debugger
			{
				fprintf(stderr,"En ''marcaSegunSeamV()'' se pasa de largo!!!\n");
				exit(1);
			}
		
		}
	}
}
Beispiel #2
0
Imagen::Imagen(Imagen & im2)
{
  dim[0]=im2.fils();
  dim[1]=im2.cols();
  int largo=dim[0]*dim[1];
  datos=new double[largo];
  for(int i=0; i< largo; i++)
    datos[i]=im2.datos[i];
}
Beispiel #3
0
// BACKTRACK
void backtrackV(Imagen &cE, int i, unsigned int j, Imagen & E)
{

	if (i > 0)
	{
		// Aj = incremento de j 
		int Aj = minPosition(cE(i-1,j-1), cE(i-1,j), cE(i-1,j+1));
		int f = i-1;
		int c = j + Aj;

		if(c == -1) c = 1;
		if((unsigned int)c == cE.cols()) c = cE.cols()-2;

		E(f, c) = 10E20;

		backtrackV(cE, f, c, E);
	}	
}
Beispiel #4
0
void Imagen::operator-=(Imagen & im2)
{
  int fil2=im2.fils();
  int col2=im2.cols();
  if(dim[0]!=fil2 || dim[1]!=col2)
    {
      fprintf(stderr,"Diferentes dimensiones al restar imagenes \n");
      return;
    }

  int largo=dim[0]*dim[1];
  for(int i=0; i<largo; i++)
    datos[i]-=im2.datos[i];

  return;
}
Beispiel #5
0
void Imagen::operator*=(Imagen  & im2)
{
  int fil2=im2.fils();
  int col2=im2.cols();
  if(dim[0]!=fil2 || dim[1]!=col2)
    {
      fprintf(stderr,"Diferentes dimensiones al multiplicar imagenes \n");
      return;
    }

  int largo=dim[0]*dim[1];
  for(int i=0; i<largo; i++)
    this->datos[i] *= (&im2)->datos[i];

  return;
}
Beispiel #6
0
unsigned int smallestH(Imagen &cumulativeE){

	int f = cumulativeE.fils() -1; // last row
	
	unsigned int h; 

	double min = 10E8; // valor de inicio

	for (unsigned int j=0; j<cumulativeE.cols(); j++)
	{
		if (cumulativeE(f,j)<min)
		{
			h = j;
			min = cumulativeE(f,j);
		}
 	}
	return h;
}
Beispiel #7
0
// finds the horizontal coordinate of the pixel in the last row with minimum value
unsigned int smallestV(Imagen &cumulativeE){

	int c = cumulativeE.cols()-1; // last column
	
	unsigned int v; 

	double min = 10E8; // valor de inicio

	for (unsigned int i=0; i<cumulativeE.fils(); i++)
	{
		if (cumulativeE(i,c)<min)
		{
			v = i;
			min = cumulativeE(i,c);
		}
 	}

	return v;
}
Beispiel #8
0
void Imagen::operator=(Imagen  & im2)
{
  // este operador no duplica la memoria //
  int fil2=im2.fils();
  int col2=im2.cols();
  if(dim[0]!=fil2 || dim[1]!=col2)
    {
      //      fprintf(stderr,"Diferentes dimensiones al copiar imagenes \n");
      dim[0]=fil2;
      dim[1]=col2;
      delete[] datos;
      datos=new double[fil2*col2];
    }

  int largo=dim[0]*dim[1];
  for(int i=0; i<largo; i++)
    datos[i]=im2.datos[i];

  return;
}
Beispiel #9
0
void Imagen::operator/=(Imagen  & im2)
{
  // si el divisor es 0, pone 0 en el cociente...
  int fil2=im2.fils();
  int col2=im2.cols();
  if(dim[0]!=fil2 || dim[1]!=col2)
    {
      fprintf(stderr,"Diferentes dimensiones al multiplicar imagenes \n");
      return;
    }

  int largo=dim[0]*dim[1];
  double div;
  for(int i=0; i<largo; i++)
    {
      div=im2.datos[i];
      if(fabs(div)>1e-10)
	datos[i]/=div;
      else
	datos[i]=0.0;
    }
  return;
}