Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Il primo Sony con retroilluminazione True RGB alla prova del banco di misura e dei contenuti: luminanza enorme, colori accurati in HDR e un antiriflesso molto efficace. I limiti sono due sole HDMI 2.1 e il blooming fuori asse
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 16-10-2007, 10:25   #1
xirc85
Member
 
L'Avatar di xirc85
 
Iscritto dal: Sep 2007
Città: Trento
Messaggi: 91
[JAVA] Manipolazione di immagini

Ciao a tutti!
Devo fare un'applicazione su piattaforma J2ME per l'analisi di immagini.
Vorrei sapere come posso accedere ai byte che la compongono, dato che uso un'oggetto di tipo Image.
Mi piacerebbe riuscire ad ottenere un array che contenga la codifica del colore per ogni pixel se possibile, così da poterli modificare a mio piacimento...

Grazie a tutti
xirc85 è offline   Rispondi citando il messaggio o parte di esso
Old 16-10-2007, 10:49   #2
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da xirc85 Guarda i messaggi
Devo fare un'applicazione su piattaforma J2ME per l'analisi di immagini.
Vorrei sapere come posso accedere ai byte che la compongono, dato che uso un'oggetto di tipo Image.
Mi piacerebbe riuscire ad ottenere un array che contenga la codifica del colore per ogni pixel se possibile, così da poterli modificare a mio piacimento...
Non programmo in J2ME ma ho la documentazione sotto mano. Image ha un metodo getRGB() (nota, MIDP 2.0) per ottenere un array con i dati dei pixel.
Dipende da cosa devi farci con questi pixel. Potresti anche ottenere il Graphics con il metodo getGraphics() e poi disegnarci sopra con dei metodi più comodi e pratici es. drawLine(), fillRect() ecc....
Di più non so dirti.
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 16-10-2007, 10:54   #3
xirc85
Member
 
L'Avatar di xirc85
 
Iscritto dal: Sep 2007
Città: Trento
Messaggi: 91
Innanzitutto, grazie
In pratica io devo controllare i pixel per regolare il contrasto come prima cosa (o meglio devo convertire per così dire l'immagine da scala di grigi o a colori a un'immagine bianca e nera a un bit...) e poi devo scandirmela in modo opportuno per capire cosa contiene..

grazie ancora
xirc85 è offline   Rispondi citando il messaggio o parte di esso
Old 16-10-2007, 11:10   #4
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da xirc85 Guarda i messaggi
In pratica io devo controllare i pixel per regolare il contrasto come prima cosa (o meglio devo convertire per così dire l'immagine da scala di grigi o a colori a un'immagine bianca e nera a un bit...) e poi devo scandirmela in modo opportuno per capire cosa contiene..
Allora devi proprio accedere direttamente ai valori dei pixel, l'uso di Graphics non ti serve (visto che fa solo operazioni di "alto" livello).

Se stai usando MIDP 2.0 vedi quindi il metodo getRGB() della classe javax.microedition.lcdui.Image.
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 16-10-2007, 11:26   #5
xirc85
Member
 
L'Avatar di xirc85
 
Iscritto dal: Sep 2007
Città: Trento
Messaggi: 91
grazie mille!
adesso mi studio un pò la documentazione e poi provo a fare qualche esperimento...
xirc85 è offline   Rispondi citando il messaggio o parte di esso
Old 16-10-2007, 13:20   #6
xirc85
Member
 
L'Avatar di xirc85
 
Iscritto dal: Sep 2007
Città: Trento
Messaggi: 91
Ho provato a smanettarci un pò e dopo aver richiamato il metodo getRGB, mi stampo l'array contenente le codifiche dei pixel... non riesco però a capire questa codifica...

Ad esempio mi stampa una cosa del tipo "-15658735" e sinceramente non riesco a capire se si tratta di una codifica del colore in intero, o se è un numero generato dalla composizione di più parametri concatenati

Qualcuno mi può aiutare??
xirc85 è offline   Rispondi citando il messaggio o parte di esso
Old 16-10-2007, 13:26   #7
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da xirc85 Guarda i messaggi
Ho provato a smanettarci un pò e dopo aver richiamato il metodo getRGB, mi stampo l'array contenente le codifiche dei pixel... non riesco però a capire questa codifica...

Ad esempio mi stampa una cosa del tipo "-15658735" e sinceramente non riesco a capire se si tratta di una codifica del colore in intero, o se è un numero generato dalla composizione di più parametri concatenati
La documentazione è pure molto chiara. Ogni pixel è memorizzato in un valore di tipo int nel formato 0xAARRGGBB. Il sostanza il valore a 32 bit è suddiviso in 4 campi da 8 bit. Quindi il valore non è da trattare come un puro valore numerico.

Un valore come -15658735, in esadecimale è 0xFF111111, pertanto in questo caso rosso, verde e blu hanno valore 0x11 o in decimale 17.
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 16-10-2007, 13:38   #8
xirc85
Member
 
L'Avatar di xirc85
 
Iscritto dal: Sep 2007
Città: Trento
Messaggi: 91
mmm... grazie!

quindi per poter capire di che colore è effettivamente quel pixel, devo trattare il valore numerico per estrarre le informazioni?
Dato che a me interessa più che altro capire se un colore è "chiaro" o "scuro" potrei basarmi sul valore massimo e minimo contenuto nell'array (magari dopo aver tolto "l'informazione" riguardante l'Alpha processing...)??
xirc85 è offline   Rispondi citando il messaggio o parte di esso
Old 16-10-2007, 14:21   #9
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da xirc85 Guarda i messaggi
quindi per poter capire di che colore è effettivamente quel pixel, devo trattare il valore numerico per estrarre le informazioni?
Se devi prendere in considerazione i singoli colori R, G e B, devi prelevare solo gli 8 bit necessari dal int. E questo richiede l'uso degli operatori bitwise di AND (&) e di shift.

Quote:
Originariamente inviato da xirc85 Guarda i messaggi
Dato che a me interessa più che altro capire se un colore è "chiaro" o "scuro"
Potresti determinare il valore su scala di grigio che è molto semplice da calcolare: 30% di R + 59% di G + 11% di B.
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 16-10-2007, 14:36   #10
xirc85
Member
 
L'Avatar di xirc85
 
Iscritto dal: Sep 2007
Città: Trento
Messaggi: 91
grazie per l'idea.. mi sembra un pò complicata , comunque adesso provo a implementarla.
xirc85 è offline   Rispondi citando il messaggio o parte di esso
Old 16-10-2007, 15:22   #11
recoil
Senior Member
 
L'Avatar di recoil
 
Iscritto dal: Jul 2002
Città: Milano
Messaggi: 19150
se non esiste già fai una piccola classe che contenga i tre valori RGB e che ti consenta di ottenere un valore unico per la scala di grigio.
devi fare operazioni tipo dithering sull'immagine? perché attenzione, non tutte le elaborazioni si fanno sul singolo pixel senza considerare quelli che stanno attorno
recoil è offline   Rispondi citando il messaggio o parte di esso
Old 16-10-2007, 15:25   #12
xirc85
Member
 
L'Avatar di xirc85
 
Iscritto dal: Sep 2007
Città: Trento
Messaggi: 91
Io pensavo di fare una cosa di questo tipo: estrarre i tre valori rgb, metterli in scala di grigio, poi cercarmi il valore massimo e quello minimo, farmi la media e se il valore è sotto o sopra la media metterlo direttamente in nero o in bianco...
è una cretinata??
xirc85 è offline   Rispondi citando il messaggio o parte di esso
Old 16-10-2007, 15:33   #13
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Nota che le percentuali che ho indicato non sono "sparate" a caso. Sono le percentuali "standard" che rispecchiano la sensibilità dell'occhio umano ai tre colori primari rosso/verde/blu.

E comunque non devi fare complicate operazioni in floating-point! Una volta che hai "isolato" i 3 valori RGB, li moltiplichi rispettivamente per 30, 59 e 11, fai la somma, poi dividi il tutto per 100. Tutte operazioni "intere".
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 16-10-2007, 15:34   #14
recoil
Senior Member
 
L'Avatar di recoil
 
Iscritto dal: Jul 2002
Città: Milano
Messaggi: 19150
viene una schifezza purtroppo, ti ritrovi con delle grosse zone di nero facendo così. te lo dico perché me ne sono occupato per lavoro, dovevo convertire immagini da colore/grigi a bianco e nero

devi utilizzare degli algoritmi per il dithering, però per farlo non puoi leggere un pixel alla volta.
ad esempio puoi usare questo http://en.wikipedia.org/wiki/Floyd-Steinberg_dithering

non posso darti il mio codice perché l'ho usato per lavoro però puoi trovare delle implementazioni open source, ad esempio nella libreria netpbm. non è niente di complicato da capire e implementare

quello che succede è che viene introdotto "rumore" nell'immagine e in questo modo puoi passare da una RGB a un'immagine "puntinata", che ti assicuro è di qualità piuttosto buona se non la ingrandisci troppo. senza quel rumore casuale dovresti basarti sul valore del pixel ma avresti, come ti dicevo, zone nere o bianche a blocchi.
io l'ho impiegato per un fax e la stampa che ottengo a partire da un'immagine a colori è di buona qualità
recoil è offline   Rispondi citando il messaggio o parte di esso
Old 16-10-2007, 15:37   #15
xirc85
Member
 
L'Avatar di xirc85
 
Iscritto dal: Sep 2007
Città: Trento
Messaggi: 91
ma comunque il fatto di "discriminare" se un pixel deve essere messo in bianco o in nero va bene basandosi sulla "tonalita media" (non so se mi spiego...) che è presente nell'immagine?
xirc85 è offline   Rispondi citando il messaggio o parte di esso
Old 16-10-2007, 15:38   #16
recoil
Senior Member
 
L'Avatar di recoil
 
Iscritto dal: Jul 2002
Città: Milano
Messaggi: 19150
Quote:
Originariamente inviato da xirc85 Guarda i messaggi
ma comunque il fatto di "discriminare" se un pixel deve essere messo in bianco o in nero va bene basandosi sulla "tonalita media" (non so se mi spiego...) che è presente nell'immagine?
cosa intendi per "tonalità media"?
recoil è offline   Rispondi citando il messaggio o parte di esso
Old 16-10-2007, 15:47   #17
xirc85
Member
 
L'Avatar di xirc85
 
Iscritto dal: Sep 2007
Città: Trento
Messaggi: 91
chiedo scusa se ho fatto una domanda alla quale avevate già risposto, ma ho avuto problemi di refresh della pagina...


per quello che ho definito come "tonalità media" intendo un valore rgb che sia equamente distante dagli estremi che sono realmente presenti nell'immagine in quanto non posso sapere a priori quale è il valore più chiaro e quello più scuro... (non so se mi sono spiegata meglio...)
le immagini che tratto io, in pratica sono delle fotografie di codici a barre (in realtà sono una specie...) e quindi sono prevalentemente in bianco e nero...
In questo caso devo comunque fare un'algoritmo di dithering?
xirc85 è offline   Rispondi citando il messaggio o parte di esso
Old 16-10-2007, 15:52   #18
recoil
Senior Member
 
L'Avatar di recoil
 
Iscritto dal: Jul 2002
Città: Milano
Messaggi: 19150
uhm con un codice a barre probabilmente no, avrai valori molto sopra e molto sotto il tuo threshold, che probabilmente potrai tenere costante conoscendo le caratteristiche dell'immagine
il dithering comunque non dovrebbe disturbarti, nelle zone nere non mette puntini bianchi a casaccio. sarebbe un costo inutile.

se devi occuparti di immagini più comuni, come una foto, il dithering diventa obbligatorio se vuoi passare al bw
recoil è offline   Rispondi citando il messaggio o parte di esso
Old 16-10-2007, 15:55   #19
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da xirc85 Guarda i messaggi
ma comunque il fatto di "discriminare" se un pixel deve essere messo in bianco o in nero va bene basandosi sulla "tonalita media" (non so se mi spiego...) che è presente nell'immagine?
Se devi ottenere una immagine in bianco/nero, allora è giusto quello che ha detto recoil. Hai bisogno di effettuare il dithering per ottenere dei buoni risultati.

Ti mostro cosa succederebbe (qui le immagini in b/w le ho fatte con un programma di grafica ma il concetto non cambia):

immagine originale:


immagine bianco/nero con la riduzione "nearest color" (in pratica quello che stavi dicendo tu, stabilisci se un colore è più vicino al nero o al bianco):


immagine bianco/nero con la riduzione con dithering "Floyd-Steinberg":


Nota il notevole miglioramento con il dithering.
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 16-10-2007, 16:02   #20
xirc85
Member
 
L'Avatar di xirc85
 
Iscritto dal: Sep 2007
Città: Trento
Messaggi: 91
Quindi in teoria, potrei farne a meno... anche perchè l'unico "disturbo" sulla foto potrebbe essere al massimo un'ombra o un riflesso e non dovrebbe crearmi dei grossi problemi.... credo
xirc85 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare Mova Z70 Ultra Roller Complete: motore potente, ...
Anthropic avrebbe nuovi antibiotici cont...
Scoperto un 'moltiplicatore nascosto' ne...
DREO: a IFA 2026 4 novità fra cui...
Slackbot genera dashboard e microsite de...
Idrogeno, nuova cella a combustibile rag...
Con la NASA fuori dai giochi, l'ESA risc...
Una falla di ChatGPT permette di estrapo...
Piano clima, 1,34 miliardi per il bonus ...
Porsche esce definitvamente da Bugatti R...
NVIDIA App aggiunge una delle funzioni p...
Come sarebbe il mondo se la luce viaggia...
Titanio, ceramica e zaffiro per HUAWEI W...
Taglio delle accise sul gasolio prorogat...
Universal e ElevenLabs: una piattaforma ...
Astra mette in crisi i server di OpenAI:...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 18:07.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v