HACKING 120% {Hacking, programmazione, computer & molto altro}

[Java] JIE - Java Image Effect

« Older   Newer »
  Share  
RootkitNeo
view post Posted on 19/7/2014, 13:53     +1   -1




Nome programma: JIE - Java Image Effect
Linguaggio di programmazione: Java
Versione: 0.9 (Beta)
Descrizione: Applica alcuni filtri alle immagini. Al momento è supportato solo il formato PNG, ma verrà dato supporto anche per altri formati.
Una descrizione più dettagliata la si trova sotto.

Data di pubblicazione: 19/07/2014
Licenza: GNU/GPL V.3
Download:
Mega 7z, Zip
MediaFire: Zip, 7z
Screenshot:

Altro:

Il funzionamento è molto semplice: è necessario selezionare un file sorgente (l'immagine PNG a cui applicare un filtro), e successivamente il file di output (è necessario indicare il nome e premere Salva).
A questo punto si sceglie uno dei filtri dal menù a tendina. Scelto il filtro, compariranno alcune voci all'interno del menù sottostante; quelle voci sono le opzioni per quel particolare filtro (non tutti i filtri hanno opzione). La casellina - spuntata di default - consentirà di aprire l'immagine di output dopo l'avvenuta elaborazione.
Per procedere con l'elaborazione, premere il pulsante "Applica & Salva". Comparirà proprio ora un messaggio di successo dell'operazione, e verrà mostrata l'immagine risultante (se la voce è stata spuntata).

I filtri a disposizione sono i seguenti:

  • Bilinear: Questo filtro è molto interessante. Applica il bayer demosaicing ad un'immagine RAW utilizzando come CFA (l'array di colori) il classico RGGB. Le immagini su cui testare il filtro si trovano in /img/Raw Image.
    Se zoomate in una delle immagini RAW, come bayer4.png, noterete i pixel in scala di grigi. Queste intensità di luce permettono poi di ricostruire il colore dei pixel, utilizzando appunto questo particolare filtro.
    Vi sono diversi filtri applicabili. Quello sopra citato è meno preciso, in quanto utilizza una matrice di 2x2. Io utilizzo una matrice di 3x3. La configurazione iniziale è:

    R11 G12 R13
    G21 B22 G23
    R31 G32 R33

    Il colore del pixel da settare è quello centrale, B (blu) in questo caso. La stima degli altri colori avviene facendo la media, quindi il colore finale è dato da: P22 = B22 + (R11 + R13 + R31 + R33)/4 + (G12 + G23 + G21 + G32)/4. A questo punto vengono settati i 3 colori all'interno del pixel. All'iterazione successiva cambia la configurazione ovviamente (guardate il source per capire meglio).

  • GrayScale: Trasforma l'immagine in scala di grigi

  • Inversion: Inverte il colore dei pixel dell'immagine

  • Contrast: Aumenta il contrasto

  • Blur: Applica il filtro Blur. L'immagine sarà quindi "sfocata", meno nitida.

  • Sharpen: L'opposto di Blur, più o meno. Recupera la nitidezza dell'immagine incrementando il contrasto ai bordi.

  • Median: Il filtro Median è molto semplice, ma anche molto efficace in certi casi. Se applicato ad un immagine corrotta a causa di perdita di dati, o corrotta con un algoritmo, questo filtro la ricostruisce. Si può testare il filtro con una delle immagini presenti in /img/Corrupted. Consiglio l'utilizzo del file scacchiera.png.


Il source lo trovate nella cartella src, il Jar in bin.
I filtri li ho scritti tutti io, quindi se notate malfunzionamenti o errori, segnalatemeli. In futuro aggiungerò altri opzioni, e non è da escludere un cambiamento grafico. Al momento è molto scarno e con opzioni essenziali, ma aggiungerò in futuro altri filtri ed altre matrici kernel. Magari utilizzerò altri filtri per le immagini RAW.

Una sola nota: con Blur, Sharpen e Median si hanno delle opzioni. Si tratta della griglia considerata sull'immagine. Più è grande, più l'effetto sarà accentuato... accentuato non significa migliore! Se applicate Sharpen 5x5 alla casa, vedrete che il risultato è peggiore rispetto al 3x3.


Aspetto pareri/domande etc.
 
Top
vogy
view post Posted on 20/7/2014, 01:17     +1   -1




Siccome qui i programmi non se li caga ma nessunoallora risponde vogy :)
Premetto che Java mi fa un po' cagare, sempre meglio di C#_MSJava ma sono gusti (a me non piace nemmeno C++ quindi figurati...)

Tenendo conto che hai fatto un programma utile (cosa disdicevole) visto che siamo in un forum di hacking ti dico solo quello che non mi piace altrimenti sono capaci tutti :O

- non mi piace quel gradiente CYAN su FilterGUI.java perché fa tanto VB da trojan dei poveri.
- non mi piace 'l'italianizzazione del programma' (il CHANGELOG in Italiano è osceno, anche le dichiarazioni). Che te ne frega di codare per gli Italiani? Sono un popolo del caxxo :(
- su Filter.java perché non hai swichato filter (anche su ManageFilter.java)? I 6 if sono orribili (ovviamente breakalo sempre, l'utente è enormemente più scemo di qualunque cosa si possa pensare) :(
[tutte cose viste così, nagari un motivo c'è ma non ho voglia di guardare tutto, sono troppo imbottito di ottimo cabernet causa ottima cena di bollito]

per il resto bel programmino, hai una scrittura molto Javosa a parte le righe dei commenti a 100 caratteri :o

P.S.: siccome ho visto che nel foro non c'è niente, visto che sei object-oriented non so se hai mai fatto qualcosa in Ruby. Magari lanciatici perché [probabilmente] potrebbe piacerti parecchio e fa molto glamour. L'interfaccia di base è su Tk che fa schifo, però c'è wxRuby che è parecchio fiqo
 
Top
RootkitNeo
view post Posted on 20/7/2014, 01:56     +1   -1




Mi fa piacere vedere qualcuno che risponde!

CITAZIONE (vogy @ 20/7/2014, 02:17) 
- non mi piace quel gradiente CYAN su FilterGUI.java perché fa tanto VB da trojan dei poveri.

Guarda ti dirò, odio scrivere GUI. Ho usato CYAN in quanto mi sembrava abbastanza graevole agli occhi dell'utente...

CITAZIONE
- non mi piace 'l'italianizzazione del programma' (il CHANGELOG in Italiano è osceno, anche le dichiarazioni). Che te ne frega di codare per gli Italiani? Sono un popolo del caxxo :(

"Siamo un popolo del caxxo".
In effetti dovrei decidermi ed optare per l'inglese... lo evito perchè ho paura di strafalcioni. Leggo in inglese, ho diversi volumi anche cartacei... ma quando devo parlarlo o scriverlo, mi trovo in difficoltà.

CITAZIONE
- su Filter.java perché non hai swichato filter (anche su ManageFilter.java)? I 6 if sono orribili (ovviamente breakalo sempre, l'utente è enormemente più scemo di qualunque cosa si possa pensare) :(
[tutte cose viste così, nagari un motivo c'è ma non ho voglia di guardare tutto, sono troppo imbottito di ottimo cabernet causa ottima cena di bollito]

Lo Switch sarebbe più gradevole forse, ma ho preferito gli if. Magari modificherò anche queste "piccolezze".
Non capisco che intendi con "ovviamente breakalo sempre".

CITAZIONE
per il resto bel programmino, hai una scrittura molto Javosa a parte le righe dei commenti a 100 caratteri :o

Grazie!
Alcuni commenti occupano un sacco di righe in quanto volevo spiegare un minimo i filtri, specie il bilinear. Poi ho questa tendenza a presentare il codice in un determinato modo... credo lo si sia notato.
Sono molto Javoso in quanto è proprio stato il mio primo linguaggio. Lo studiai sul libro "La Guida Completa a Java J2SE 5" di Herbert Schildt. Con il passare degli anni l'ho un po' trascurato (qualche anno fa ero ad un passo dal certificarmi, ma ho lasciato perdere; ne è seguito un disinteresse verso le nuove versioni, e l'ho utilizzato meno di prima).
La parte che preferisco da tempo a questa parte è più vicina alla macchina che all'utente. Ed è più vicina al cuore del software, che alla grafica.

Comunque Filter.java era una classe che usavo per testare, l'ho lasciata nel pacchetto giusto per completezza.

CITAZIONE
P.S.: siccome ho visto che nel foro non c'è niente, visto che sei object-oriented non so se hai mai fatto qualcosa in Ruby. Magari lanciatici perché [probabilmente] potrebbe piacerti parecchio e fa molto glamour. L'interfaccia di base è su Tk che fa schifo, però c'è wxRuby che è parecchio fiqo

Non conoscevo wxRuby, gli darò un occhiata sicuramente!
Ho un libro di Ruby, è di qualche anno fa: "The Book of Ruby - A hands-on guide for the adventurous". Mi piaceva in effetti come linguaggio, e poi è molto OO.
Al momento il tempo è poco, sto studiando decentemente anche C++... vorrei portarlo al livello di Java.

Ad ogni modo non sono orientato alla programmazione su Linux... ad essere sincero non lo utilizzo da un sacco di tempo. Anche se negli ultimi giorni mi sento di nuovo molto attratto... probabilmente reinstallerò Arch o proverò qualche distro.
 
Top
vogy
view post Posted on 20/7/2014, 10:25     +1   -1




CITAZIONE
Lo Switch sarebbe più gradevole forse, ma ho preferito gli if. Magari modificherò anche queste "piccolezze".
Non capisco che intendi con "ovviamente breakalo sempre".

Riparto da `l'utente è enormemente più scemo di qualunque cosa si possa pensare`...
CODICE
authr => Usage: java -filter <inputFile> <outputFile>
users => java -bilinear -grayscale Boobs.png Tranny.vbs
authr => Usage: java... [WTF_Bro? args.length != 3]
users => java -bilinear -grayscale Boobs.png
authr => WTF_Bro... can't find "-grayscale"!
users => java Boobs.png -bilinear -grayscale
authr => WTF_Bro... (!filter.equals("-any")) XO
users => Ok doesn't work, go YouPorn!

(come vedi un parser tipo CommonsCLI/args4j/JOpt sarebbe migliore)

Stessa cosa da fare quando switchi anche se pare impossibile:

CODICE
switch (eight) {
       case "tall":
               isTall();
               // break;
       case "short":
               isShort();
               // break;
       default:
               isMedium();
               // break;
               }

se le tre funzioni chiudono da sole il break non serve perché il programma esce comunque dallo switch, però per convenzione (origine C++) si usa in ogni caso secondo l'ottica dell'utente scemo.

Per il resto IMHO non fossilizzarti su linguaggi singoli per 2 motivi:
- a lungo andare annoia, visto che non abbiamo la fantasia di Picasso le cose bene o male sono sempre quelle, finisce che fai 20 programmi in java e poi gli stessi in 100 altri liguaggi, alla fine diventa un porting di sintassi.
- se ti impegni continuamente in un linguaggio (come per le lingue straniere) poi finisce che perdi manualità con gli altri: impari 10 linguaggi ma alla fine lavori bene su 1, poi ne impari altri 10 ma lavori comunque bene solo sull'ultimo :P
 
Top
RootkitNeo
view post Posted on 20/7/2014, 22:33     +1   -1




CITAZIONE (vogy @ 20/7/2014, 11:25) 
Riparto da `l'utente è enormemente più scemo di qualunque cosa si possa pensare`...
CODICE
authr => Usage: java -filter <inputFile> <outputFile>
users => java -bilinear -grayscale Boobs.png Tranny.vbs
authr => Usage: java... [WTF_Bro? args.length != 3]
users => java -bilinear -grayscale Boobs.png
authr => WTF_Bro... can't find "-grayscale"!
users => java Boobs.png -bilinear -grayscale
authr => WTF_Bro... (!filter.equals("-any")) XO
users => Ok doesn't work, go YouPorn!

(come vedi un parser tipo CommonsCLI/args4j/JOpt sarebbe migliore)

Si, in effetti è vero.
Ad ogni modo è lì solo per completezza... in questo caso parto dal presupposto che un utente che sa compilarlo, avrà guardato il source e sa che parametri passare. :P

CODICE
Stessa cosa da fare quando switchi anche se pare impossibile:

[CODE]switch (eight) {
       case "tall":
               isTall();
               // break;
       case "short":
               isShort();
               // break;
       default:
               isMedium();
               // break;
               }

se le tre funzioni chiudono da sole il break non serve perché il programma esce comunque dallo switch, però per convenzione (origine C++) si usa in ogni caso secondo l'ottica dell'utente scemo.
[/quote]

In questo caso lo devi usare sicuramente il break.

[code]
Per il resto IMHO non fossilizzarti su linguaggi singoli per 2 motivi:
- a lungo andare annoia, visto che non abbiamo la fantasia di Picasso le cose bene o male sono sempre quelle, finisce che fai 20 programmi in java e poi gli stessi in 100 altri liguaggi, alla fine diventa un porting di sintassi.
- se ti impegni continuamente in un linguaggio (come per le lingue straniere) poi finisce che perdi manualità con gli altri: impari 10 linguaggi ma alla fine lavori bene su 1, poi ne impari altri 10 ma lavori comunque bene solo sull'ultimo :P
[/QUOTE]

Io sono sempre stato orientato su un ottica un po' differente: impararli bene tutti non si può, quindi mi concentro su 1 o 2 in particolare, e gli altri li imparo quando serve, usandoli.

Riguardo alla prima parte concordo in toto.
 
Top
4 replies since 19/7/2014, 13:53   75 views
  Share