/*
* Encog(tm) Core v3.4 - Java Version
* http://www.heatonresearch.com/encog/
* https://github.com/encog/encog-java-core
* Copyright 2008-2016 Heaton Research, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* For more information on Heaton Research copyrights, licenses
* and trademarks visit:
* http://www.heatonresearch.com/copyright
*/
package org.encog.platformspecific.j2se.data.image;
import java.awt.Image;
import org.encog.ml.data.basic.BasicMLData;
import org.encog.util.downsample.Downsample;
/**
* An extension of the BasicNeuralData class that is designed to hold images for
* input into a neural network. This class should only be used with the
* ImageNeuralDataSet collection.
*
* This class provides the ability to associate images with the elements of a
* dataset. These images will be downsampled to the resolution specified in the
* ImageNeuralData set class that they are added to.
*
* @author jheaton
*
*/
public class ImageMLData extends BasicMLData {
/**
* The serial id.
*/
private static final long serialVersionUID = -4645971270240180450L;
/**
* The image associated with this class.
*/
private Image image;
/**
* Construct an object based on an image.
*
* @param theImage
* The image to use.
*/
public ImageMLData(final Image theImage) {
super(1);
this.image = theImage;
}
/**
* Downsample, and copy, the image contents into the data of this object.
* Calling this method has no effect on the image, as the same image can be
* downsampled multiple times to different resolutions.
*
* @param downsampler
* The downsampler object to use.
* @param findBounds
* Should the bounds be located and cropped.
* @param height
* The height to downsample to.
* @param width
* The width to downsample to.
* @param hi
* The high value to normalize to.
* @param lo
* The low value to normalize to.
*/
public final void downsample(final Downsample downsampler,
final boolean findBounds, final int height, final int width,
final double hi, final double lo) {
if (findBounds) {
downsampler.findBounds();
}
final double[] sample = downsampler.downSample(this.image, height,
width);
for (int i = 0; i < sample.length; i++) {
sample[i] = ((sample[i] - 0)
/ (255 - 0))
* (hi - lo) + lo;
}
this.setData(sample);
}
/**
* @return the image
*/
public final Image getImage() {
return this.image;
}
/**
* @param theImage
* the image to set
*/
public final void setImage(final Image theImage) {
this.image = theImage;
}
}