Ver Mensaje Individual
  #1 (permalink)  
Antiguo 03/08/2015, 06:59
FerminCacho
 
Fecha de Ingreso: diciembre-2012
Mensajes: 15
Antigüedad: 11 años, 5 meses
Puntos: 0
Reconstruir imagen

Muy buenas a todos, estoy desarollando un codigo cuya idea es la de generar una imagen con "ruido" (por llamarlo de alguna forma) y despues a partir de esa imagen con ruido y otro archivo obtener la imagen original.
Basicamente lo que hago es a partir de la imagen original, generar una segunda imagen en la cual de manera aleatoria intercambio los pixeles, por cada pixel intercambiado guardo en un archivo la posicion de los pixeles intercambiados, por ejemplo, si empiezo con el pixel 0,0 de la imagen original, y genero dos numeros aleatorios, supongamos que me da 100,100, lo que hago es intercambiar el pixel que esta en la posicion 0,0 por el que esta en la posicion 100,100. Como es logico, estos cambios lo hago en la segunda imagen, ya que la primera no la modifico para nada, de modo que en esta segunda imagen, copio en la posicion 0,0 el pixel que esta en la posicion 100,100, y luego copio el pixel que esta en la posicion 100,100 en la posicion 0,0, espero haberme explicado, por si no esta muy claro, copio el codigo para que se vea mejor el proceso

//Recorro la imagen pixel a pixel
for(int i=0; i<ancho; i++){
for(int j=0; j<alto; j++){
//Obtengo las posiciones aleatorias x e y
int posX = r.nextInt(ancho);
int posY = r.nextInt(alto);
//copio el pixel aleatorio en la pos del pixel a tratar
imagen_2.setRGB(i, j, imagen.getRGB(posX, posY));
imagen_2.setRGB(posX, posY, imagen.getRGB(i, j));
//relleno el fichero
String s = i+" "+j+" "+posX+" "+posY;
fs.escribirFichero(s);
}
}

Este proceso funciona bien, ya que la segunda imagen que genera a partir de este metodo parece el tipico ruido de la tele que es lo que pretendo.
El problema me surge a la hora de reconstruir la imagen.
Lo que hago es recorrer el archivo que me almacena las "permutaciones" a la inversa, es decir, del final al principio, recuperando los valores de los pixeles intercambiados. Esta parte la he comprobado y lo hace bien, me recupera de forma correcta los valores, asi que descarto que el fallo que tengo sea ese
Una vez tengo los valores de la permutacion, creo una tercera imagen en la que "deshago" el cambio a partir de la segunda(la del ruido añadido) pero no logro nunca recuperar la imagen original.
No se a que se debe el fallo, por mas que lo intente.
He intentado buscar por google haber si encontraba algo, pero nada de nada
El codigo en concreto que utilizo para reconstruir la imagen es el siguiente:

for(int i=(split.length-1); i>=0; i=i-4){
//Obtengo los valores
int x_orig = Integer.parseInt(split[i-3]);
int y_orig = Integer.parseInt(split[i-2]);
int x_modf = Integer.parseInt(split[i-1]);
int y_modf = Integer.parseInt(split[i-0]);
//Coloco los pixeles en su sitio
imagen_3.setRGB(x_orig, y_orig, imagen_2.getRGB(x_modf, y_modf));
imagen_3.setRGB(x_modf, y_modf, imagen_2.getRGB(x_orig, y_orig));
}
En donde la variable "split" es un vector de String, sobre el que tengo almacenado todos las permutaciones recuperadas del archivo

Por si surgiera la duda sobre como se organiza el archivo decir que por ejemplo para la permutacion que puse arriba, la [0,0]->[100,100] lo que guardo en el archivo es la siguiente "frase" 0 0 100 100 y asi para cada una de las permutaciones

Alguien sabe como solucionar este problema? He pensado que tal vez mi problema no sea de codigo, aunque quien sabe, tal vez podria ser un problema al hora de plantear la logica del mismo

Espero que puedan ayudar, sin mas muchas gracias