• Jueves 2 de Mayo de 2024, 04:12

Autor Tema:  Aplicar Una Máscara A Una Imagen  (Leído 1890 veces)

KAYSS

  • Nuevo Miembro
  • *
  • Mensajes: 19
    • Ver Perfil
Aplicar Una Máscara A Una Imagen
« en: Viernes 2 de Noviembre de 2007, 21:27 »
0
Hola!

Alguno sabéis de una forma rápida de aplicar una máscara a una imagen en mapa de bits.

Yo primero creo la máscara (matriz nxn), recorro pixel a pixel la imagen, sitúo la máscara y recorro la máscara posición por posición para dicho pixel, y así con todos los demás pixels de la imagen.

Como os podeis imaginar esto tarda mucho en ejecutarse para una imagen de una resolución media.

Espero algunos sepais algún método más rápido


Saludos

diego.martinez

  • Miembro MUY activo
  • ***
  • Mensajes: 297
    • Ver Perfil
Re: Aplicar Una Máscara A Una Imagen
« Respuesta #1 en: Lunes 5 de Noviembre de 2007, 11:36 »
0
hay un par de trucos para eso.

Si usas rgba para la matriz puedes decir que es una matriz de integers y asi aplicas la mascara de 4 en cuatro (o mas).

otras opciones son ya optimización del algoritmo, si posteas tu codigo podriamos mirar que se podria acelerar.

Por ejemplo, para las multiplicaciones de y*SizeX+x podrias precalcular en una matriz de n elementos las multiplicaciones y hacer Prec[y]+x

Otras opciones son usar bucles While (y--) empezando desde y=SizeY; ya que el bucle while hacia cero es mas rapido que un for estandard.

Hay truquillos de esos. Seguro que puedes encontrar formas de acelerar el codigo.

KAYSS

  • Nuevo Miembro
  • *
  • Mensajes: 19
    • Ver Perfil
Re: Aplicar Una Máscara A Una Imagen
« Respuesta #2 en: Martes 6 de Noviembre de 2007, 10:48 »
0
Muchas gracias por la ayuda!!!

Supongo que en este caso me debería centrar más en optimización de código. Como no se exactamente a lo que te refieres exactamente en las opciones que me propones para optimizar el código, os muestro mi algoritmo y a ver si con el podemos hacer algo:

Código: Text
  1.  
  2. Bitmap^ AplicarMascara(Bitmap ^Imagen, Array^ Mascara, int Tamanio){
  3.   Bitmap ^ImagenFiltrada=gcnew Bitmap (Imagen->Width, Imagen->Height);
  4.   int IncX, IncY, X, Y;
  5.   int TamanioNxN=Tamanio*Tamanio;
  6.   double Sumatorio;
  7.   Color color;
  8.  
  9.   // Aplicamos la máscara para cada uno de los pixels de la imagen
  10.   for(int i=0; i<Imagen->Width; i++){
  11.     for (int j=0; j<Imagen->Height; j++){
  12.      
  13.       IncY=Tamanio/2;
  14.       Sumatorio=0;
  15.  
  16.       // Recorremos los valores de la máscara para aplicarlos a la imagen
  17.       for (int k=0; k<Tamanio; k++){
  18.        
  19.         Y=j+IncY;
  20.         IncX=Tamanio/2;
  21.  
  22.         for (int q=0; q<Tamanio; q++){
  23.           X=i+IncX;
  24.           if ((X>=0&&X<Imagen->Width) && (Y>=0&&Y<Imagen->Height))
  25.             Sumatorio=Sumatorio + Mascara->GetValue(Tamanio/2+IncX, Tamanio/2+IncY)) * Imagen->GetPixel(X,Y).R;
  26.  
  27.           IncX--;
  28.         }
  29.  
  30.         IncY--;
  31.       }
  32.      
  33.       // El valor del pixel será el valor del sumatorio obtenido
  34.       color=Color::FromArgb(Sumatorio, Sumatorio, Sumatorio);
  35.       ImagenFiltrada->SetPixel(i, j, color);
  36.     }
  37.   }
  38.  
  39.   return ImagenFiltrada;
  40. }
  41.  
  42.  


Muchas gracias por todo.
Un saludo

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Aplicar Una Máscara A Una Imagen
« Respuesta #3 en: Martes 6 de Noviembre de 2007, 10:55 »
0
Viendo tu codigo me parece que este hilo esta mal ubicado y deberia ser movido al subforo de C#.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

KAYSS

  • Nuevo Miembro
  • *
  • Mensajes: 19
    • Ver Perfil
Re: Aplicar Una Máscara A Una Imagen
« Respuesta #4 en: Martes 6 de Noviembre de 2007, 17:12 »
0
Pero si es código en Windows Form de Visual Studio .Net?

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Aplicar Una Máscara A Una Imagen
« Respuesta #5 en: Martes 6 de Noviembre de 2007, 17:21 »
0
Ah, es VC++.NET en lugar de C# entonces se mueve a Otros CLR.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

KAYSS

  • Nuevo Miembro
  • *
  • Mensajes: 19
    • Ver Perfil
Re: Aplicar Una Máscara A Una Imagen
« Respuesta #6 en: Martes 6 de Noviembre de 2007, 17:55 »
0
Ok!

Entonces a partir de ahora miro en ese hilo.


Gracias