Pages: 1 [2]   Go Down
Print
Author Topic: esercizio assegnato dal prof...  (Read 4826 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
AngelEvil
Forumista
***
Offline Offline

Posts: 616



« Reply #15 on: 28-01-2009, 15:23:20 »

no i fattori shear non vengono usati....
Logged

n2o1988
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 206



« Reply #16 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...
Logged
rabbit
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 136



« Reply #17 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"...
« Last Edit: 28-01-2009, 17:45:29 by rabbit » Logged
luckynosky
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 178



« Reply #18 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?
Logged
rabbit
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 136



« Reply #19 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?
« Last Edit: 28-01-2009, 19:50:06 by rabbit » Logged
luckynosky
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 178



« Reply #20 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ò
Logged
rabbit
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 136



« Reply #21 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..
« Last Edit: 28-01-2009, 20:04:18 by rabbit » Logged
Pages: 1 [2]   Go Up
Print
Jump to: