/*
 * ImageInputSynapse.java
 *
 * Created on 16 October 2005, 08:50
 *
 * To change this template, choose Tools | Options and locate the template under
 * the Source Creation and Management node. Right-click the template and choose
 * Open. You can then make changes to the template in the Source Editor.
 */

package org.joone.io;

import java.util.Vector;
import java.awt.Image;
import java.io.File;
import java.io.FilenameFilter;
import java.net.URL;
import java.util.TreeSet;

import org.joone.log.*;
import org.joone.net.NetCheck;

/**
 * This synapse collects data from Image files or Image objects and feeds the data from the Images into the Neural network.
 * GIF, JPG and PNG image file formats can be read.  The synapse operates in two modes, colour and grey scale.
 * 

* Colour Mode * In colour mode ImageInputSynapse produces seperate RGB input values in the range 0 to 1 from the * image. So using an image of width 10 and height 10 there will be 10x10x3 inputs in the range 0 to 1. * The individual colour components are calculated by obtaining the RGB values from the image. These value * are initially in an ARGB format. Transparency is removed and the RGB value extracted and normalised * between 0 and 1. *

*

* Non Colour Mode / Grey Scale Mode * In this mode the synapse treats each input value as a grey scale value for each pixel. In this mode * only Width*Height values are required. To produce the final image the Red, Green and Blue components * are the set to this same value. * The grey scale component is calculated by obtaining the RGB values from the image. These value * are initially in an ARGB format. Transparency is removed and the RGB value extracted, averaged and normalised * to produce one grey scale value between 0 and 1. *

* @author Julien Norman */ public class ImageInputSynapse extends StreamInputSynapse { /** The object used when logging debug,errors,warnings and info. */ private static final ILogger log = LoggerFactory.getLogger(ImageInputSynapse.class); static final long serialVersionUID = -1396287146739057882L; private File imageDirectory = new File(System.getProperty("user.dir")); private String theFileFilter = new String(".*[jJ][pP][gG]"); private Vector FileNameList = new Vector(); private Image [] MultiImages = null; private int DesiredWidth = 10; private int DesiredHeight = 10; /** * If in Colour Mode RGB values are input seperately. * Otherwise RGB values are averaged and input as grey scale. */ private boolean ColourMode = true; /** Creates a new instance of ImageInputSynapse */ public ImageInputSynapse() { this.calculateNewACS(); } /* Specific ImageInputSynapse Methods */ public void setFileFilter(String newFileFilter) { theFileFilter = newFileFilter; } public String getFileFilter() { return(theFileFilter); } public void setImageInput(Image [] theImages) { MultiImages = theImages; } protected void initInputStream() throws org.joone.exception.JooneRuntimeException { ImageInputTokenizer toks = null; try { if ( (MultiImages != null) && (MultiImages.length > 0)) { toks = new ImageInputTokenizer(getDesiredWidth(), getDesiredHeight(), MultiImages,ColourMode ); super.setTokens(toks); } else { FileNameList = new Vector(); String [] thelist = imageDirectory.list( new FilenameFilter() { public boolean accept(File dir, String name) { return name.matches(theFileFilter); } }); for (int i=0;i -1) { String dir = tmpDir.getPath().substring(0, pos); tmpDir = new File(dir); } } this.imageDirectory = tmpDir; } public boolean getColourMode() { return ColourMode; } public void setColourMode(boolean ColourMode) { this.ColourMode = ColourMode; this.calculateNewACS(); } /** Checks and returns any problems found with the settings of this synapse. * @return A TreeSet of problems or errors found with this synapse. */ public TreeSet check() { TreeSet checks = super.check(); if (theFileFilter.equals("")) { checks.add(new NetCheck(NetCheck.FATAL, "No File Filter set e.g. '.*[jJ][pP][gG]'." , this)); } if ( imageDirectory == null ) { checks.add(new NetCheck(NetCheck.FATAL, "No image input directory set." , this)); } return checks; } /** Calculates the new value for AdvancedColumnSelector */ protected void calculateNewACS() { int tokens = this.DesiredWidth*this.DesiredHeight; if ( ColourMode ) tokens = tokens * 3; this.setAdvancedColumnSelector("1-"+tokens); } }

Ads help maintain this website.