Forum Informatica Unict

Vecchi ordinamenti ad esaurimento => Laboratorio di Interazione => Topic started by: AngelEvil on 25-01-2009, 21:37:47



Title: esercizio assegnato dal prof...
Post by: AngelEvil on 25-01-2009, 21:37:47
l'esercizio assegnato dal prof(dove dovevamo dividere l'immagine.....)come lo state svolgendo?!?!?


Title: Re:esercizio assegnato dal prof...
Post by: peppe20x on 26-01-2009, 14:53:18
X favore potresti scrivere il testo del esercizio?
Io non ho preso l'appunto e adesso non me lo ricordo.


Title: Re:esercizio assegnato dal prof...
Post by: Picciotto on 26-01-2009, 15:45:29
l'esercizio assegnato dal prof(dove dovevamo dividere l'immagine.....)come lo state svolgendo?!?!?

Era per caso quello che consisteva nel: aprire un immagine, selezionare con il mouse una zona di quella immagine, ed aprire un nuovo frame con quella porzione di immagine?

Se e cosi, sto per farlo, e fra poco ti dico!

Credo proprio che avrò qualche problema...


Title: Re:esercizio assegnato dal prof...
Post by: AngelEvil on 26-01-2009, 21:25:19
no era quello di dividere l'immagine in n parti....poi nn mi ricordo cm continuava....


Title: Re:esercizio assegnato dal prof...
Post by: rabbit on 27-01-2009, 14:06:02
l'esercizio del prof. chiedeva d scegliere un'immagine, dividerla in sottoimmagini(magari proponendo all'utente quante suddivisioni fare), applicare ad ognuna un filtro n-box (alla prima sottoimmagine applicare un filtro 3-box, alla seconda 5-box, 7, 9.. etc..etc)  e ricombinare il tutto.

un altro esercizio invece chiede di suddividere l'immagine e permutare a caso le sottoimmagini e ricombinarle

Io ho svolto parte del compito del 04/03/2008 e ho un problema ... ho delle sottoimmagini equalizzate ma sto studiando il modo per ricombinarle!Discutiamone .penso
p.s non mi chiedete di postare codice perchè è poco elegante e me ne vergogno  |-O


Title: Re:esercizio assegnato dal prof...
Post by: AngelEvil on 27-01-2009, 14:50:27
le sottoimmagini come le hai ottenute??con il subimage()?


Title: Re:esercizio assegnato dal prof...
Post by: rabbit on 27-01-2009, 19:52:50
si ..esattamente. Ho preso parte del codice dalla dispensa del prof., lì c'era bella che preconfezionata la classe per tale scopo






La passione dei matematici è giusta!


Title: Re:esercizio assegnato dal prof...
Post by: Picciotto on 27-01-2009, 21:42:36
io ho costruito un menu con le voci "dividi per 4" "dividi per 9" "dividi per 16" le quali diventano "cliccabili" dopo aver aperto un immagine, e dividono l'immagine in 4, 9, o 16 quadrati, a questo punto un JOption confirm dialog ti chiede se vuoi aprire n frame con gli n pezzi dell'immagine. A breve credo che farò un metodo per creare un immagine con gli n pezzi selezionati poco prima, disposti a caso!


Title: Re:esercizio assegnato dal prof...
Post by: rabbit on 28-01-2009, 10:07:41
alla fine unire più immagini non era poi tutta questa gran cosa. Ho trovato il metodo di una applicazione sempre nelle dispense, copiaImmagine(BufferedImage in, BufferedImage out).

Se qualcuno sta cercando di svolgere il compito del 04/03/2008 mi spiega come si ottiene l'immagine blu e a trattini?


Title: Re:esercizio assegnato dal prof...
Post by: Picciotto on 28-01-2009, 10:30:09
alla fine unire più immagini non era poi tutta questa gran cosa

Saresti cosi gentile da postarmi il codice se esiste gia? o dirmi in quale esempio di quelli del prof si trova? mi risparmieresti un sacco di tempo!!
grazie lo stesso!


Title: Re:esercizio assegnato dal prof...
Post by: rabbit on 28-01-2009, 11:51:33
t scarichi: Esempio "framework" di applicativo per la elab.immagini, in  frameworkIEM\appIEM_013\AppFrame.java void copiaImmagine(BufferedImage A, BufferedImage B)


Title: Re:esercizio assegnato dal prof...
Post by: luckynosky on 28-01-2009, 14:13:45
ma questo metodo non copia semplicemente l'immagine B in quella A?


Title: Re:esercizio assegnato dal prof...
Post by: AngelEvil on 28-01-2009, 14:20:42
ma questo metodo non copia semplicemente l'immagine B in quella A?



 .quoto


Title: Re:esercizio assegnato dal prof...
Post by: AngelEvil on 28-01-2009, 15:15:48
ragazzi ma qualcuno ha capito invece come si realizza il cubo assonometrico realizzato nel progetto dello scorso gennaio??


Title: Re:esercizio assegnato dal prof...
Post by: Picciotto on 28-01-2009, 15:21:14
ma questo metodo non copia semplicemente l'immagine B in quella A?



 .quoto

infatti!!!
Il mio problema era comporre un immagine usando altre immagini!!
Proverò a usare con get/set pixel, da un immagine all'altra con un po di cicli for annidati vediamo cosa ne esce fuori!

Per il cubo invece in quel caso è probabile che sia formato unendo tre immagini uguali a due delle quali vengono applicati dei fattori di shear...  :-)|  :-)| troppa geometria!!


Title: Re:esercizio assegnato dal prof...
Post by: AngelEvil on 28-01-2009, 15:23:20
no i fattori shear non vengono usati.... .poverinoi


Title: Re:esercizio assegnato dal prof...
Post by: n2o1988 on 28-01-2009, 15:52:28
ragazzi ma qualcuno ha capito invece come si realizza il cubo assonometrico realizzato nel progetto dello scorso gennaio??

Io ho dato un occhiata al codice:
da quel che ho visto, su per giù ho capito come è stato realizzato. L'unica cosa che mi era poco chiara è la realizzazione della faccia di lato e di quella superiore. Provo a dare la mia interpretazione.
Per cominciare (tralasciando l'interfaccia grafica, la gestione eventi, i metodi apri e salva che dovrebbero essere noti e la selezione del rettangolo), abbiamo la funzione
Code:
public void costruisciCubo()
che fa la seguente:
- crea un'immagine sfocata (a tal fine era stata creata la classe sfocatore, che si occupa di applicare un kernel 7-box - che come sappiamo ha l'effetto di sfocare l'immagine - all'immagine ritagliata, tramite ConvolveOp)
- allo stesso modo crea un immagine'invertita tramite la classe invertitore che sfrutta la LUT del negativo
- lo switch seguente imposta come dovranno essere disposte le 3 immagini, in base alla configurazione (es. immagineRitaglio al centro, l'invertita in alto e la sfocata a dx)
- quindi si crea un istanza della classe cuboAssonometrico, passando al costruttore le 3 immagini create (nell'ordine uno, due e tre..) e richiamando il successivo metodo getCubo viene restituita l'immagine del cubo.
- seguono nel metodo la disabilitazione della selezione ROI, l'abilitazione della voce di menu "salva", e la creazione di un nuovo frame sul quale visualizzare l'immagine del cubo.

Veniamo alla classe cuboAssonometrico, il cui costruttore si occupa della creazione vera e propria del cubo.
Come detto prima il costruttore prende 3 parametri (le 3 immagini secondo la configurazione, uno = fronte, due = destra, tre = sopra).
- tramite la classe scalatore (che sfrutta una AffineTransformOp, come visto a lezione per ottenere un'immagine di dimensioni maggiori o minori), si ottiene una versione 200x200 dell'immagine che avevamo selezionato come "frontale", che andrà poi posizionata al centro appunto.
- tramite la stessa classe, si ottengono una versione 100x200 dell'immagine di dx ed una 200x100 dell'immagine di sopra (non sono sicuro di aver capito perchè queste dimensioni... sicuramente sono valori dati per far combaciare le tre facce a formare un cubo...)
- a questo punto, creiamo una nuova bufferedImage di dimensioni 500x500, e lavoriamo sul suo raster (WritableRaster rasterCubo).
Tramite
Code:
int [] pixelDaCopiare = new int[3*200*200];
       F.getRaster().getPixels(0,0,200,200,pixelDaCopiare);
       rasterCubo.setPixels(100,200,200,200,pixelDaCopiare);
ricopia nella parte centrale della "tela", i valori dell'immagine scalata "frontale", così com'è.
- il ciclo successivo, crea praticamente la faccia di destra (una sorta di effetto shear orizzontale, infatti io avrei pensato di dover usare una AffineOp del genere...) ricopiando colonna per colonna, a destra dell'immagine frontale, mettendo però le varie colonne via via più in alto, man mano che si va verso destra (per creare la proiezione). Non so se mi sono spiegato, ma guardando il codice dovrebbe essere più chiaro.
- il terzo ciclo fa lo stesso ma per l'immagine superiore, quindi prendendo riga per riga, e mettendole via via più a destra man mano che si va verso l'alto.

A questo punto l'immagine è bella e pronta per essere restituita non appena viene invocato il metodo getCubo, come detto prima.
Questa è l'interpretazione che ho dato io... C'è solo una piccola cosa che per ora non mi è chiara (probabilmente ce l'ho sott'occhio e non me ne sto accorgendo): dove si setta lo sfondo dell'immagine del cubo a nero...


Title: Re:esercizio assegnato dal prof...
Post by: rabbit on 28-01-2009, 17:43:09
io per fare parte dell'esercizio(compito 04/03/2008) ho dichiarato una bufferedimage di output come quella dell'immagine originale dopo che ho chiesto all'utente di dire in quanti quadri suddividere la "matrice", una volta prese le sottoimmagini ed averle equalizzate,  tramite trasformazioni affini ho applicato la traslazione ad ogni sottoimmagine per posizionarla nell'area dov'era originariamente e poi col metodo copiaImmagine le ho inserite  nella buffered d output dichiarata prima, componendo il "mosaico"...


Title: Re:esercizio assegnato dal prof...
Post by: luckynosky on 28-01-2009, 18:34:24
dopo che le inserisci traslate all interno del pannello in che modo fai diventare tutto un unica immagine?


Title: Re:esercizio assegnato dal prof...
Post by: rabbit on 28-01-2009, 19:37:47
BufferedImage mosaico_finale=imm;
        for(int i=0; i<h; i++)//h è il num di divisioni orizzontali
        {
          for(int j=2; j<v; j++)//v verticali
          {
            int coord_xi = unita_largh*i;
            int coord_xf = coord_xi+unita_largh;
            int coord_yi = unita_alt*j;
            int coord_yf = coord_yi+unita_alt;
            pi = new Point(coord_xi, coord_yi);
            pf = new Point(coord_xf, coord_yf);
            rm.setPuntoIniziale(pi);
            rm.setPuntoFinale(pf);
            BufferedImage selezionata = rm.selezione();
            BufferedImage equalizzata = rm.equalizza(selezionata);
            //abi[j]=equalizzata;
            AffineTransform A = new AffineTransform();
            A.translate(coord_xi, coord_yi);
            AffineTransformOp T = new AffineTransformOp(A,3);
            BufferedImage temp = T.filter(equalizzata,null);
            af.copiaImmagine(temp, mosaico_finale);
           
          }
          semipanel.setImage(mosaico_finale);
          af.add(semipanel);
          af.setVisible(true);

con copiaImmagine. ...forse ho cpt cs mi vuoi fare notare...l'immagine tu dici che non sarà unica?


Title: Re:esercizio assegnato dal prof...
Post by: luckynosky on 28-01-2009, 19:44:15
vedendo il metodo copiaImmagine del framework_13

facendo copiaImmagine(temp , mosaico_finale); ogni fine di ciclo for
è come se sovrascrivi sempre mosaico_finale è alla fine quindi visualizzi solo l'ultimo pezzo dell'immagine...non vorrei sbagliarmi però


Title: Re:esercizio assegnato dal prof...
Post by: rabbit on 28-01-2009, 20:01:48
no, vedo l'immagine per intero nel frame invece e vedo distinguibile ogni porzione perché le ho equalizzate separatamente..mi sono venuti un sacco d dubbi...me li chiarisco e poi ne parliamo..