MultiChannelImageData.java

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; 
 
    } 
 
 
}