Jump to content

Image Analisys

- - - - -

This topic has been archived. This means that you cannot reply to this topic.
2 replies to this topic

#1
Flavs

Flavs

    Newbie

  • Members
  • Pip
  • 2 posts
Ok just for fun I want to make this program that would get a picture and look for words in it... a picture of a sign or something... but to begin I would use only pictures that I took that had for instance Times New Roman words in it...
So what I´m looking for is some way to make this analisys and find the word that is written in the image!

I was looking to use Java in the project but I don´t know any image processing features or libraries about it! I´d like to know if someone could help me to find a place to start from in this project...somewhere I can find some tutorials or even if someone knows if it's possible to do something like this!!

Thanks!

#2
BlaineSch

BlaineSch

    Writes binary right handed and hex left handed

  • Members
  • PipPipPipPipPipPipPipPipPip
  • 2,448 posts
This would be extremely hard and may take a long time to do. You may even look into machine learning for accomplishing this. Its a difficult task to "recognize" things.

Google has even tried to "recognize" things like faces etc and there software IMO could just work, an they are the big bad internet business of all time.

#3
Sinipull

Sinipull

    Programming Expert

  • Members
  • PipPipPipPipPipPip
  • 386 posts
check this out. Very nice class for image processing.


/*************************************************************************

 *  Compilation:  javac Picture.java

 *  Execution:    java Picture filename

 *

 *  Data type for manipulating individual pixels of an image. The original

 *  image can be read from a file in JPEG, GIF, or PNG format, or the

 *  user can create a blank image of a given size. Includes methods for

 *  displaying the image in a window on the screen or saving to a file.

 *

 *  % java Picture image.jpg

 *

 *  Remarks

 *  -------

 *   - pixel (0, 0) is upper left hand corner

 *

 *   - see also GrayPicture.java for a grayscale version

 *

 *************************************************************************/

 

 /************************************************************************

  *Used by Color Reader - Team 1                                         *

  *We found this picture class on the internet and utilized it in its raw*

  *form. Used as an member variable in our ColorFinder class to hold the *

  *current picture we are trying to identify colors in.                  *

  ************************************************************************/


import javax.imageio.ImageIO;

import javax.swing.JFrame;

import javax.swing.JMenu;

import javax.swing.JMenuBar;

import javax.swing.JLabel;

import javax.swing.JMenuItem;

import javax.swing.ImageIcon;

import javax.swing.KeyStroke;

import java.awt.FileDialog;

import java.awt.Toolkit;

import java.awt.Color;

import java.awt.image.BufferedImage;

import java.awt.event.ActionListener;

import java.awt.event.ActionEvent;

import java.awt.event.KeyEvent;

import java.io.File;

import java.io.IOException;

import java.net.URL;



/**

 *  This class provides methods for manipulating individual pixels of

 *  an image. The original image can be read from a file in JPEG, GIF,

 *  or PNG format, or the user can create a blank image of a given size.

 *  This class includes methods for displaying the image in a window on

 *  the screen or saving to a file.

 *  <p>

 *  For additional documentation, see

 *  <a href="http://www.cs.princeton.edu/introcs/31datatype">Section 3.1</a> of

 *  <i>Introduction to Programming in Java: An Interdisciplinary Approach</i>

 *  by Robert Sedgewick and Kevin Wayne.

 */

public final class Picture implements ActionListener 

{

    private BufferedImage image;    // the rasterized image

    private JFrame frame;           // on-screen view

    private String filename;        // name of file


   /**

     * Create an empty w-by-h picture.

     */

    public Picture(int w, int h) 

    {

        image = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);

        // set to TYPE_INT_ARGB to support transparency

        filename = w + "-by-" + h;

    }

    

    // added by Joonas Vali       

    public String toString(){

    	return filename;

    }

   /**

     * Create a picture by reading in a .png, .gif, or .jpg from

     * the given filename or URL name.

     */

    public Picture(String filename) 

    {

        this.filename = filename;

        try {

            // try to read from file in working directory

            File file = new File(filename);

            if (file.isFile()) {

                image = ImageIO.read(file);

            }


            // now try to read from file in same directory as this .class file

            else {

                URL url = getClass().getResource(filename);

                if (url == null) { url = new URL(filename); }

                image = ImageIO.read(url);

            }

        }

        catch (IOException e) {

            // e.printStackTrace();

            throw new RuntimeException("Could not open file: " + filename);

        }


        // check that image was read in

        if (image == null) {

            throw new RuntimeException("Invalid image file: " + filename);

        }

    }


   /**

     * Create a picture by reading in a .png, .gif, or .jpg from a File.

     */

    public Picture(File file) 

    {

        try { image = ImageIO.read(file); }

        catch (IOException e) {

            e.printStackTrace();

            throw new RuntimeException("Could not open file: " + file);

        }

        if (image == null) {

            throw new RuntimeException("Invalid image file: " + file);

        }

    }


   /**

     * Return a JLabel containing this Picture, for embedding in a JPanel,

     * JFrame or other GUI widget.

     */

    public JLabel getJLabel() {

        if (image == null) { return null; }         // no image available

        ImageIcon icon = new ImageIcon(image);

        return new JLabel(icon);

    }


   /**

     * Display the picture in a window on the screen.

     */

    public void show() 	

    {


        // create the GUI for viewing the image if needed

        if (frame == null) {

            frame = new JFrame();


            JMenuBar menuBar = new JMenuBar();

            JMenu menu = new JMenu("File");

            menuBar.add(menu);

            JMenuItem menuItem1 = new JMenuItem(" Save...   ");

            menuItem1.addActionListener(this);

            menuItem1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,

                                     Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));

            menu.add(menuItem1);

            frame.setJMenuBar(menuBar);




            frame.setContentPane(getJLabel());

            // f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

            frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

            frame.setTitle(filename);

            frame.setResizable(false);

            frame.pack();

            frame.setVisible(true);

        }


        // draw

        frame.repaint();

    }


   /**

     * Return the height of the picture (in pixels).

     */

    public int height() 

    {

        return image.getHeight(null);

    }


   /**

     * Return the width of the picture (in pixels).

     */

    public int width() 

    {

        return image.getWidth(null);

    }


   /**

     * Return the Color of pixel (i, j).

     */

    public Color get(int i, int j) 

    {

        return new Color(image.getRGB(i, j));

    }


   /**

     * Set the Color of pixel (i, j) to c.

     */

    public void set(int i, int j, Color c) {

        if (c == null) { throw new RuntimeException("can't set Color to null"); }

        image.setRGB(i, j, c.getRGB());

    }


   /**

     * Save the picture to a file in a standard image format.

     * The filetype must be .png or .jpg.

     */

    public void save(String name) 

    {

        save(new File(name));

    }


   /**

     * Save the picture to a file in a standard image format.

     */

    public void save(File file) 

    {

        this.filename = file.getName();

        if (frame != null) { frame.setTitle(filename); }

        String suffix = filename.substring(filename.lastIndexOf('.') + 1);

        suffix = suffix.toLowerCase();

        if (suffix.equals("jpg") || suffix.equals("png")) 

        {

            try { ImageIO.write(image, suffix, file); }

            catch (IOException e) { e.printStackTrace(); }

        }

        else 

        {

            System.out.println("Error: filename must end in .jpg or .png");

        }

    }


   /**

     * Opens a save dialog box when the user selects "Save As" from the menu.

     */

    public void actionPerformed(ActionEvent e) 

    {

        FileDialog chooser = new FileDialog(frame,

                             "Use a .png or .jpg extension", FileDialog.SAVE);

        chooser.setVisible(true);

        if (chooser.getFile() != null) 

        {

            save(chooser.getDirectory() + File.separator + chooser.getFile());

        }

    }

}