package ac.essex.ecj.util;

import ac.essex.ecj.imaging.PixelLoader;

/**
 * <p/>
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version,
 * provided that any use properly credits the author.
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details at http://www.gnu.org
 * </p>
 *
 * @author Olly Oechsle, University of Essex, Date: 18-Aug-2006
 * @version 1.0
 */
public class TrainingData {

    public PixelLoader image;
    public PixelLoader truth;

    /**
     * Initialises the Training Data with two images, one the actual training image itself
     * and the second a truth "map" of 'correct' and 'incorrect' pixels. For the sake of
     * simplicity, the map represents incorrect pixels as black (RGB: 0,0,0), and correct
     * pixels as non-black pixels (although preferably white!)
     *
     * Both the images should be of the same dimensions, otherwise an exception is thrown,
     */
    public TrainingData(PixelLoader image, PixelLoader truth) {

        this.image = image;
        this.truth = truth;

        if ((image.getWidth() != truth.getWidth()) || (image.getHeight() != truth.getHeight())) {
            throw new RuntimeException("Truth image and test image are not the same size.");
        }

    }

    /**
     * Returns whether a given pixel is correct or not.
     */
    public boolean isExpected(int x, int y) {
        return truth.getPixel(x, y) > 0;
    }

}
