Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 22
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    4

    Ricavare ed elaborare i pixel di un immagine

    Salve ragazzi!
    E' la prima volta che posto.
    Sono alle prese con un progetto java di elaborazione di immagini.
    Per prima cosa ricavo il vettore di pixel da un' immagine con queste istruzioni:

    BufferedImage image = ImageIO.read(new File("metro.jpg"));
    BufferedImage buffImage = new BufferedImage(imgCols,imgRows,BufferedImage.TYPE_I NT_ARGB);
    Graphics2D graphics = buffImage.createGraphics();
    graphics.drawRenderedImage(image, null);
    DataBufferInt dataBufferInt = (DataBufferInt)buffImage.getRaster().getDataBuffer ();
    int[] pixels = dataBufferInt.getData();

    ...dopodichè elaboro tale vettore(pixels) in modo da nascondere un messaggio di testo nei bit meno significativi dei byte dei vari pixel.

    Una volta modificato il vettore salvo l' immagine modificata:

    * BufferedImage buffImage2 = new BufferedImage(imgCols,imgRows,BufferedImage.TYPE_I NT_ARGB);
    WritableRaster r=buffImage2.getRaster();
    r.setDataElements(0,0,imgCols,imgRows,pixels);
    buffImage2.setData(r);

    ...e poi la scrivo con:

    ** String ext="png";
    ImageIO.write(buffImage2,ext,new File("Image."+ext));

    Il problema è che nell' estrarre il messaggio di testo nascosto nell' immagine in alcuni casi mi scambia alcuni caratteri con altri (ad esempio lo spazio con lo zero(non tutti gli spazi),la 'a' con la 'm',la p con la '@'),mentre a volte fila tutto liscio.
    Con delle stampe a video ho verificato che il vettore pixel modificato non contiene errori:il problema probabilmente sorge nel momento in cui creo la nuova immagine dal vettore di pixel(e la scrivo) .
    Ho provato anche con:

    Image modImg = createImage(new MemoryImageSource(imgCols,imgRows,pixels,0,imgCols ));

    per creare un Image,anzichè una BufferedImage ma il problema rimane.
    Spero che qualcuno di voi abbia già avuto a che fare con problemi simili o mi sappia indicare un modo per compiere il passaggio inverso rispetto a "buffImage.getRaster().getDataBuffer().getData()". (creare un' immagine da un vettore di pixel)
    Grazie anche solo se vi siete letti tutta 'sta manfrina.

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    Ciao, non mi intendo molto dell'argomento, ma da quanto scritto nella documentazione, il metodo createImage(new MemoryImageSource(imgCols,imgRows,pixels,0,imgCols )); dovrebbe fare esattamente quello che serve a te.
    Magari c'e' perdita di informazioni perche' passi da un formato ad un altro (da jpg a png).
    Prova a salvare come jpg.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    4
    Ho già provato a salvarle come gif, jpg e persino bitmap.
    L' unico formato che almeno mantiene l' immagine è il png,mentre salvando come jpg si ottiene l' immagine originale "arrossata" (con tutti i pixel che danno sul rosso).

    Tra l'altro ho trovato in rete un programma di steganografia, diverso dal mio, che salva come png e funziona.

    Il problema dei caratteri a volte sbagliati cmq si presenta anche se l' immagine di partenza è una png.

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    Sei sicuro che il problema non sia nel codice che ti decodifica l'immagine? Magari hai fatto confusione con la gestione delle operazioni tra i bit.

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Originariamente inviato da simo7784
    Sei sicuro che il problema non sia nel codice che ti decodifica l'immagine? Magari hai fatto confusione con la gestione delle operazioni tra i bit.
    Già, potremmo vedere il brano di codice che utilizzi per operare questi "inserimento" ed "estrazione"?
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    4
    Inizialmente l' estrazione del messaggio avveniva dall' immagine in formato numerico(array di pixel) e così funzionava perfettamente.

    Il codice di estrazione è del tutto simile all' inserimento, con gli operatori bit a bit.

    Comunque per verificare quale fosse l' origine del problema ho fatto stampare a video il valore numerico del pixel (un intero tipo -59542636) dell' immagine modificata (proprio all' uscita dall' estrazione, prima di creare e salvare l' immagine modificata) e anche il corrispondente valore dell' immagine originale.
    Con un po' di buona volontà mi sono scritto quei valori in binario ( )proprio per un pixel che corrispondeva ad un carattere sbagliato (se non ricordo male estraeva una m invece di una a).
    Da queste analisi modello Informatica I ho verificato che tutti i bit dei due pixel (originale e modificata) coincidevano tranne gli ultimi due di ogni ottetto/byte (come da specifica)e unendo i due bit meno significativi di ciascuno dei quattro byte associati al pixel si otteneva la a (il carattere corretto) e non la m ( quello estratto,sbagliato).

    Da queste prove sono arrivato alla conclusione, o meglio ad ipotizzare che non ci siano problemi in inserimento/estrazione ma in fasi successive.

    Per quanto riguarda la decodifica dell' immagine il codice è lo stesso che "apre" l' immagine originale (in parte postato nel primo messaggio), solo che invece di lanciare la procedura che inserisce il messaggio lancia quella che lo estrae.

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    Per quanto riguarda la decodifica dell' immagine il codice è lo stesso che "apre" l' immagine originale (in parte postato nel primo messaggio), solo che invece di lanciare la procedura che inserisce il messaggio lancia quella che lo estrae.
    Beh, se i valori dopo la codifica sono quelli attesi, chiami la decodifica e ti escono valori sbagliati, allora il problema e' nella decodifica no?
    Senza codice non ti posso dire di piu'.

  8. #8
    Ciao a tutti,
    scusate se disturbo aprendo una piccola parentesi. Volevo chiedervi una piccola ma grandissima cortesia: dove potrei prendere il materiale da studiare per ricavare ed elaborare i pixel di un immagine in java? A me servirebbe qualsiasi cosa tipo appunti, lucidi, libri, manuali free o a pagamento per poter studiare questi argomenti. Sono uno studente universitario e in qualche modo devo prepararmi per l'esame.

    Vi ringrazio in anticipo per una vostra risposta.
    By CAS

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    scusa la banalità della risposta, ma probabilmente la cosa migliore sarebbe sentire il professore che tiene il corso e chidere su quali dispense/lucidi/testi prepararsi in caso non si sia potuto seguire l'esame. Sarebbe anche molto utile mettersi in contatto con qualcuno che il corso l'ha seguito e farsi passare i quaderni con gli appunti.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  10. #10
    Originariamente inviato da Andrea1979
    scusa la banalità della risposta, ma probabilmente la cosa migliore sarebbe sentire il professore che tiene il corso e chidere su quali dispense/lucidi/testi prepararsi in caso non si sia potuto seguire l'esame. Sarebbe anche molto utile mettersi in contatto con qualcuno che il corso l'ha seguito e farsi passare i quaderni con gli appunti.
    Il professore ha messo semplicemente un grosso esempio di file java (anzi una raccolta di files java x fare un compito tipo) e un piccolo appunto su quale metodi al max utilizzare. I lucidi sono fatti male e difficilmente interpretabili...

    Volevo studiare su manuali ufficiali o tanto meno chiari...

    Grazie
    By CAS

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.