package ac.essex.ooechs.imaging.commons.multichannel; import ac.essex.ooechs.imaging.commons.StatisticsSolver; import ac.essex.ooechs.imaging.commons.util.CSVWriter; import java.util.Vector; /** * Stores a set of data about various pixels. The value for a pixel, and its 8 neighbours * are stored, so spatial data is available. This is stored across a number of different channels. * @author Olly Oechsle, University of Essex, Date: 23-Nov-2007 * @version 1.0 */ public abstract class MultiChannelImageData { protected Vector<String> channels; protected Vector<MultiChannelPixelData> data; public MultiChannelImageData() { channels = new Vector<String>(); data = new Vector<MultiChannelPixelData>(); } public void addChannel(String name) { channels.add(name); } /** * Adds multichannel information about a particular pixel to the database. */ public void addPixel(MultiChannelPixelData pixel) { data.add(pixel); } /** * Gets all the pixel data. */ public Vector<MultiChannelPixelData> getData() { return data; } /** * Gets a statistics object regarding a pixel on a particular channel. */ public StatisticsSolver getChannelStats(int index, int channel) { float pixelData[] = data.elementAt(index).getData(channel); StatisticsSolver solver = new StatisticsSolver(pixelData.length); solver.addData(pixelData); return solver; } public CSVWriter toCSV() { CSVWriter writer = new CSVWriter(); for (int i = 0; i < data.size(); i++) { MultiChannelPixelData pixel = data.elementAt(i); for (int index = 0; index < 9; index++) for (int channel = 0; channel < channels.size(); channel++) { writer.addData(pixel.getData(channel, index)); } for (int channel = 0; channel < channels.size(); channel++) { StatisticsSolver s = getChannelStats(i, channel); writer.addData(s.getMean()); writer.addData(s.getStandardDeviation()); writer.addData(s.getMin()); writer.addData(s.getMax()); writer.addData(s.getRange()); } writer.addData(pixel.getClassID()); writer.newLine(); } return writer; } }