package fr.unistra.pelican.algorithms.io; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.io.LineNumberReader; import fr.unistra.pelican.Algorithm; import fr.unistra.pelican.BooleanImage; import fr.unistra.pelican.Image; import fr.unistra.pelican.InvalidParameterException; /** * Load ROI Text Files from Envi and return a BooleanImage * * @author Lefevre */ public class ROILoader extends Algorithm { /** * ROI Filename */ public String filename; /** * Output Boolean Image */ public Image output; /** * Constructor * */ public ROILoader() { super.inputs = "filename"; super.outputs = "output"; } public void launch() { LineNumberReader br=null; try { br= new LineNumberReader (new BufferedReader (new FileReader(filename))); } catch (FileNotFoundException e) { throw new InvalidParameterException("Wrong ROI Filename :"+filename); } try { // Decompte du nombre de classes int bands=0,bands2=0; int xdim=0,ydim=0; String s=br.readLine(); while (s!=null && s.charAt(0)==';') { if (s.startsWith("; Number of ROIs:")) bands=Integer.parseInt(s.substring(s.indexOf(':')+1).trim()); if (s.startsWith("; File Dimension:")) { xdim=Integer.parseInt(s.substring(s.indexOf(':')+1,s.indexOf('x')).trim()); ydim=Integer.parseInt(s.substring(s.indexOf('x')+1).trim()); } if (s.startsWith("; ROI name:")) bands2++; s=br.readLine(); } if (bands!=bands2) System.out.println("The number of classes seems wrong..."); // Creation de l'image output=new BooleanImage(xdim,ydim,1,1,bands); int b=0; while (s!=null && b<bands) { if (s.trim().isEmpty()) b++; else { int x=Integer.parseInt(s.substring(6,11).trim()); int y=Integer.parseInt(s.substring(11).trim()); output.setPixelXYBBoolean(x-1, y-1, b, true); } s=br.readLine(); } } catch (IOException e) { throw new InvalidParameterException("Error reading ROI File :"+filename+" at line "+br.getLineNumber()); } } /** * Load ROI Text Files from Envi and return a BooleanImage * * @param filename ROI Filename * @return Output Boolean Image */ public static Image exec(String filename) { return (Image) new ROILoader().process(filename); } }