Oppure

Loading
31/01/08 15:44
hopenthink
Salve a tutti!
Vorrei essere in grado di eseguire un confronto tra:
- un immagine;
- ed una porzione di immagine contenuta in un altra immagine più grande (la porzione è grande come l'immagine da confrontare) .
Potete segnalarmi quale costrutto utilizzare per eseguire il pattern matching?
Sarebbe meglio ritagliare l'immagine, salvarla e metcharla con la prima oppure ci sono altre soluzioni?

Taks, Hopenthink.
aaa
31/01/08 17:51
netarrow
ci sono classi apposite che da un'immagine ottengono vettori contenenti tutti i dati dell'immagine quali PixelGrabber(esempi: pierotofy.it/pages/guide_tutorials/Java/…/) che ti ritorna i pixel appunto esprimendone il colore (RGB o altre notazioni ora non ricordo).
Quindi presumo che se ottieni i pixel delle due immagini puoi dopo gestire gli algoritmi che preferisci per ricercare la porzione di pixel che corrisponde a quelli dell'immagine da cercare.
Se poi esiste qualche tecnica di potatura per ritagliere parti superflue non saprei, il matching di immagini non l'ho mai affrontato.

Se ho capito male rispiegami pure, se quello che ho scritto ti era già scontato prima oltre non saprei andare.
Ultima modifica effettuata da netarrow 31/01/08 17:52
aaa
31/01/08 18:24
hopenthink
Grazie per la tempestiva risposta.
Ho provato a ridurre l'immagine e ci sono parzialmente riuscito, ora però potrei intraprendere due strade:
1) salvo l'immagine e la confronto;
2) oppure confronto direttamente l'immagine.

1) Seguendo la prima strada la porzione di immagine che salvo non è corretta. Si vede tutto scuro...
Comunque, allego il codice, magari qualcuno può dirmi dove ho sbagliato.
Se riesco a salvare l'immagine, esiste qualcosa che confronta le immagini senza scendere in dettaglio utilizzando pixelGrubber???

Ancora grazie.

import java.awt.*;
import java.awt.image.*;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;

public class Taglia extends JFrame
{	
    Insets insets;
    
    Image orig;
    Image crop;
    
    int width = 40;
    int height = 15;
    
    File file = new File("imgTagliata.jpg");
    
    BufferedImage bimage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

    Graphics imgGraphics  = bimage.createGraphics();


	// PRENDO L'IMMAGINE BASE E LA TAGLIO
    public Taglia(String s)
    {	
        ImageIcon imageicon = new ImageIcon(s);
        orig = imageicon.getImage();
        crop = createImage(new FilteredImageSource(orig.getSource(), new CropImageFilter(75, 30, width, height)));

    }
	
	// ORA DEVO STAMPARE L'IMMAGINE OTTENUTA IN UNA NUOVA CREATA DA ME
    //*****************************
    public void paint(Graphics g)
    {
        super.paint(imgGraphics);
        if(insets == null)
            insets = getInsets();
        g.drawImage(crop, insets.left, insets.top, this);

		Graphics2D g2 = (Graphics2D)g;

        try
        {
            ImageIO.write(bimage, "jpg", file);
        }
        catch(IOException ioexception) { }
    }
	//******************************
    public static void main(String args[])
    {
        Taglia taglia = new Taglia("ok.jpg");
        taglia.setSize(100, 100);
        taglia.show();
    }
}
:k::k:
Ultima modifica effettuata da hopenthink 31/01/08 18:32
aaa