Commit 01246a62 authored by Andrey Filippov's avatar Andrey Filippov

Merge pull request #2 from luxigo/master

Allow running Eyesis_Correction and JP46_Reader_camera in headless mode
parents 103e97e7 3ae3cafd
...@@ -61,6 +61,7 @@ public class EyesisCorrectionParameters { ...@@ -61,6 +61,7 @@ public class EyesisCorrectionParameters {
public double outputRangeFP= 255.0; // 1.0 intensity will be saved as 255.0 (in float 32-bit mode) public double outputRangeFP= 255.0; // 1.0 intensity will be saved as 255.0 (in float 32-bit mode)
public boolean imageJTags= false; // encode ImageJ info data to the TIFF output header public boolean imageJTags= false; // encode ImageJ info data to the TIFF output header
public String tiffCompression = "UNCOMPRESSED"; // tiff compression codec
public boolean jpeg = true; // convert to RGB and save JPEG (if save is true) public boolean jpeg = true; // convert to RGB and save JPEG (if save is true)
public boolean save = true; public boolean save = true;
public boolean save16 = false; // save 16-bit tiff also if the end result is 8 bit public boolean save16 = false; // save 16-bit tiff also if the end result is 8 bit
...@@ -201,6 +202,7 @@ public class EyesisCorrectionParameters { ...@@ -201,6 +202,7 @@ public class EyesisCorrectionParameters {
if (properties.getProperty(prefix+"equirectangularFormat")!=null) this.equirectangularFormat=Integer.parseInt(properties.getProperty(prefix+"equirectangularFormat")); if (properties.getProperty(prefix+"equirectangularFormat")!=null) this.equirectangularFormat=Integer.parseInt(properties.getProperty(prefix+"equirectangularFormat"));
if (properties.getProperty(prefix+"outputRangeInt")!=null) this.outputRangeInt=Double.parseDouble(properties.getProperty(prefix+"outputRangeInt")); if (properties.getProperty(prefix+"outputRangeInt")!=null) this.outputRangeInt=Double.parseDouble(properties.getProperty(prefix+"outputRangeInt"));
if (properties.getProperty(prefix+"outputRangeFP")!=null) this.outputRangeFP=Double.parseDouble(properties.getProperty(prefix+"outputRangeFP")); if (properties.getProperty(prefix+"outputRangeFP")!=null) this.outputRangeFP=Double.parseDouble(properties.getProperty(prefix+"outputRangeFP"));
if (properties.getProperty(prefix+"tiffCompression")!=null) this.tiffCompression=properties.getProperty(prefix+"tiffCompression");
if (properties.getProperty(prefix+"imageJTags")!=null) this.imageJTags=Boolean.parseBoolean(properties.getProperty(prefix+"imageJTags")); if (properties.getProperty(prefix+"imageJTags")!=null) this.imageJTags=Boolean.parseBoolean(properties.getProperty(prefix+"imageJTags"));
if (properties.getProperty(prefix+"jpeg")!=null) this.jpeg=Boolean.parseBoolean(properties.getProperty(prefix+"jpeg")); // convert to RGB and save jpeg (if save is true) if (properties.getProperty(prefix+"jpeg")!=null) this.jpeg=Boolean.parseBoolean(properties.getProperty(prefix+"jpeg")); // convert to RGB and save jpeg (if save is true)
if (properties.getProperty(prefix+"save")!=null) this.save=Boolean.parseBoolean(properties.getProperty(prefix+"save")); if (properties.getProperty(prefix+"save")!=null) this.save=Boolean.parseBoolean(properties.getProperty(prefix+"save"));
...@@ -283,6 +285,8 @@ public class EyesisCorrectionParameters { ...@@ -283,6 +285,8 @@ public class EyesisCorrectionParameters {
gd.addCheckbox ("Save chroma denoise mask (white - use hi-res, black - low-res)", this.saveChromaDenoiseMask); gd.addCheckbox ("Save chroma denoise mask (white - use hi-res, black - low-res)", this.saveChromaDenoiseMask);
gd.addCheckbox ("Rotate result image", this.rotate); gd.addCheckbox ("Rotate result image", this.rotate);
gd.addCheckbox ("Crop result image to the original size", this.crop); gd.addCheckbox ("Crop result image to the original size", this.crop);
String [] tiffCompressionChoices={"UNCOMPRESSED","LZW","JPEG", "JPEG_2000","ALT_JPEG2000"};
int tiffCompressionIndex=0;
String [] equirectangularFormatChoices={"RGBA 8-bit","RGBA 16-bit","RGBA 32-bit integer","RGBA 32-bit float","ImageJ stack"}; String [] equirectangularFormatChoices={"RGBA 8-bit","RGBA 16-bit","RGBA 32-bit integer","RGBA 32-bit float","ImageJ stack"};
int [] equirectangularFormats={0,1,2,3,4}; int [] equirectangularFormats={0,1,2,3,4};
int equirectangularFormatIndex=0; int equirectangularFormatIndex=0;
...@@ -294,6 +298,7 @@ public class EyesisCorrectionParameters { ...@@ -294,6 +298,7 @@ public class EyesisCorrectionParameters {
gd.addNumericField("Map 1.0 intensity to this fraction of the full range 8/16/32-bit integer mode output", 100*this.outputRangeInt, 2,6,"%"); gd.addNumericField("Map 1.0 intensity to this fraction of the full range 8/16/32-bit integer mode output", 100*this.outputRangeInt, 2,6,"%");
gd.addNumericField("Map 1.0 intensity to this value in 32-bit floating point output mode", this.outputRangeFP, 2,6,""); gd.addNumericField("Map 1.0 intensity to this value in 32-bit floating point output mode", this.outputRangeFP, 2,6,"");
gd.addCheckbox ("Encode ImageJ specific Info metadata to the output file TIFF header", this.imageJTags); gd.addCheckbox ("Encode ImageJ specific Info metadata to the output file TIFF header", this.imageJTags);
gd.addChoice("TIFF lossless compression codec",tiffCompressionChoices,tiffCompressionChoices[tiffCompressionIndex]);
gd.addCheckbox ("Convert to RGB48", this.toRGB); gd.addCheckbox ("Convert to RGB48", this.toRGB);
gd.addCheckbox ("Convert to 8 bit RGB (and save JPEG if save is enabled)", this.jpeg); gd.addCheckbox ("Convert to 8 bit RGB (and save JPEG if save is enabled)", this.jpeg);
...@@ -372,6 +377,7 @@ public class EyesisCorrectionParameters { ...@@ -372,6 +377,7 @@ public class EyesisCorrectionParameters {
this.outputRangeInt=0.01*gd.getNextNumber(); this.outputRangeInt=0.01*gd.getNextNumber();
this.outputRangeFP= gd.getNextNumber(); this.outputRangeFP= gd.getNextNumber();
this.imageJTags= gd.getNextBoolean(); this.imageJTags= gd.getNextBoolean();
this.tiffCompression= tiffCompressionChoices[gd.getNextChoiceIndex()];
this.toRGB= gd.getNextBoolean(); this.toRGB= gd.getNextBoolean();
this.jpeg= gd.getNextBoolean(); this.jpeg= gd.getNextBoolean();
this.save= gd.getNextBoolean(); this.save= gd.getNextBoolean();
......
...@@ -473,7 +473,7 @@ public class EyesisCorrections { ...@@ -473,7 +473,7 @@ public class EyesisCorrections {
this.defectsDiff[srcChannel]=this.pixelMapping.getDefectsDiff(srcChannel); this.defectsDiff[srcChannel]=this.pixelMapping.getDefectsDiff(srcChannel);
if (this.debugLevel>0){ if (this.debugLevel>0){
if (this.defectsXY[srcChannel]==null){ if (this.defectsXY[srcChannel]==null){
System.out.println("No pixel defects info is availabele for channel "+srcChannel); System.out.println("No pixel defects info is available for channel "+srcChannel);
} else { } else {
System.out.println("Extracted "+this.defectsXY[srcChannel].length+" pixel outlayers for channel "+srcChannel+ System.out.println("Extracted "+this.defectsXY[srcChannel].length+" pixel outlayers for channel "+srcChannel+
" (x:y:difference"); " (x:y:difference");
...@@ -701,7 +701,7 @@ public class EyesisCorrections { ...@@ -701,7 +701,7 @@ public class EyesisCorrections {
if (path!=null){ if (path!=null){
path+=Prefs.getFileSeparator()+imp.getTitle()+".tiff"; path+=Prefs.getFileSeparator()+imp.getTitle()+".tiff";
if (this.debugLevel>0) System.out.println("Saving equirectangular result to "+path); if (this.debugLevel>0) System.out.println("Saving equirectangular result to "+path);
(new EyesisTiff()).saveTiff( (new EyesisTiff(correctionsParameters.tiffCompression)).saveTiff(
imp, imp,
path, path,
correctionsParameters.equirectangularFormat, correctionsParameters.equirectangularFormat,
......
...@@ -34,6 +34,7 @@ import java.util.Arrays; ...@@ -34,6 +34,7 @@ import java.util.Arrays;
//import org.apache.log4j.Logger; //import org.apache.log4j.Logger;
import ij.IJ; import ij.IJ;
import ij.ImagePlus; import ij.ImagePlus;
import ij.WindowManager; import ij.WindowManager;
...@@ -42,20 +43,31 @@ import loci.common.RandomAccessInputStream; ...@@ -42,20 +43,31 @@ import loci.common.RandomAccessInputStream;
import loci.common.services.DependencyException; import loci.common.services.DependencyException;
import loci.common.services.ServiceException; import loci.common.services.ServiceException;
import loci.formats.FormatException; import loci.formats.FormatException;
import loci.formats.codec.CodecOptions;
import loci.formats.tiff.IFD; import loci.formats.tiff.IFD;
import loci.formats.tiff.IFDList; import loci.formats.tiff.IFDList;
import loci.formats.tiff.TiffParser; import loci.formats.tiff.TiffParser;
import loci.formats.tiff.TiffRational; import loci.formats.tiff.TiffRational;
import loci.formats.tiff.TiffSaver; import loci.formats.tiff.TiffSaver;
import loci.formats.tiff.TiffCompression;
public class EyesisTiff { public class EyesisTiff {
// private static org.apache.log4j.Logger log= Logger.getLogger(EyesisTiff.class); // private static org.apache.log4j.Logger log= Logger.getLogger(EyesisTiff.class);
private String codec="UNCOMPRESSED";
public EyesisTiff(){ public EyesisTiff(){
// Please initialize the log4j system properly // Please initialize the log4j system properly
} }
public EyesisTiff(String codec){
// Please initialize the log4j system properly
this.codec=codec;
}
public void saveTiff( public void saveTiff(
ImagePlus imp, ImagePlus imp,
String path, String path,
...@@ -175,7 +187,7 @@ public EyesisTiff(){ ...@@ -175,7 +187,7 @@ public EyesisTiff(){
ifd.putIFDValue(IFD.SOFTWARE, "Elphel Eyesis"); ifd.putIFDValue(IFD.SOFTWARE, "Elphel Eyesis");
ifd.putIFDValue(IFD.IMAGE_DESCRIPTION, description); ifd.putIFDValue(IFD.IMAGE_DESCRIPTION, description);
// copy some other data? // copy some other data?
ifd.putIFDValue(IFD.COMPRESSION, 1); //TiffCompression.UNCOMPRESSED); ifd.putIFDValue(IFD.COMPRESSION, TiffCompression.valueOf(codec).getCode());
ifd.putIFDValue(IFD.PHOTOMETRIC_INTERPRETATION,2); // RGB ifd.putIFDValue(IFD.PHOTOMETRIC_INTERPRETATION,2); // RGB
ifd.putIFDValue(IFD.EXTRA_SAMPLES,2); // 0 = Unspecified data 1 = Associated alpha data (with pre-multiplied color) 2 = Unassociated alpha data ifd.putIFDValue(IFD.EXTRA_SAMPLES,2); // 0 = Unspecified data 1 = Associated alpha data (with pre-multiplied color) 2 = Unassociated alpha data
// int [] bpsArray={8,8,8,8}; // int [] bpsArray={8,8,8,8};
...@@ -212,6 +224,7 @@ public EyesisTiff(){ ...@@ -212,6 +224,7 @@ public EyesisTiff(){
TiffSaver tiffSaver = new TiffSaver(path); TiffSaver tiffSaver = new TiffSaver(path);
tiffSaver.setWritingSequentially(true); tiffSaver.setWritingSequentially(true);
tiffSaver.setLittleEndian(false); tiffSaver.setLittleEndian(false);
tiffSaver.setCodecOptions(TiffCompression.valueOf(codec).getCompressionCodecOptions(ifd));
tiffSaver.writeHeader(); tiffSaver.writeHeader();
// tiffSaver.writeIFD(ifd,0); //* SHould not write here, some fields are calculated during writeImage, that writes IFD too // tiffSaver.writeIFD(ifd,0); //* SHould not write here, some fields are calculated during writeImage, that writes IFD too
// System.out.println("bytes.length="+bytes.length); // System.out.println("bytes.length="+bytes.length);
...@@ -257,7 +270,7 @@ public EyesisTiff(){ ...@@ -257,7 +270,7 @@ public EyesisTiff(){
ifd.putIFDValue(IFD.SOFTWARE, "Elphel Eyesis"); ifd.putIFDValue(IFD.SOFTWARE, "Elphel Eyesis");
ifd.putIFDValue(IFD.IMAGE_DESCRIPTION, description); ifd.putIFDValue(IFD.IMAGE_DESCRIPTION, description);
// copy some other data? // copy some other data?
ifd.putIFDValue(IFD.COMPRESSION, 1); //TiffCompression.UNCOMPRESSED); ifd.putIFDValue(IFD.COMPRESSION, TiffCompression.valueOf(codec).getCode());
ifd.putIFDValue(IFD.PHOTOMETRIC_INTERPRETATION,2); // RGB ifd.putIFDValue(IFD.PHOTOMETRIC_INTERPRETATION,2); // RGB
ifd.putIFDValue(IFD.EXTRA_SAMPLES,2); // extra bytes (over 3) meaning Unassociated alpha data ifd.putIFDValue(IFD.EXTRA_SAMPLES,2); // extra bytes (over 3) meaning Unassociated alpha data
......
...@@ -33,6 +33,7 @@ import ij.io.FileSaver; ...@@ -33,6 +33,7 @@ import ij.io.FileSaver;
import ij.io.OpenDialog; import ij.io.OpenDialog;
import ij.io.Opener; import ij.io.Opener;
import ij.plugin.frame.*; import ij.plugin.frame.*;
import ij.plugin.PlugIn;
import java.awt.*; import java.awt.*;
import java.awt.event.*; import java.awt.event.*;
...@@ -60,10 +61,14 @@ import loci.formats.FormatException; ...@@ -60,10 +61,14 @@ import loci.formats.FormatException;
//import javax.swing.SwingUtilities; //import javax.swing.SwingUtilities;
//import javax.swing.UIManager; //import javax.swing.UIManager;
public class Eyesis_Correction extends PlugInFrame implements ActionListener { public class Eyesis_Correction implements PlugIn, ActionListener {
/** /**
* *
*/ */
private Boolean headless=GraphicsEnvironment.getLocalGraphicsEnvironment().isHeadlessInstance();
private PlugInFrame plugInFrame;
String prefsPath;
private static final long serialVersionUID = -1507307664341265263L; private static final long serialVersionUID = -1507307664341265263L;
private Panel panel1,panel2,panel3,panel4,panel5,panel5a, panel6,panel7,panelPostProcessing1,panelPostProcessing2,panelPostProcessing3; private Panel panel1,panel2,panel3,panel4,panel5,panel5a, panel6,panel7,panelPostProcessing1,panelPostProcessing2,panelPostProcessing3;
JP46_Reader_camera JP4_INSTANCE=null; JP46_Reader_camera JP4_INSTANCE=null;
...@@ -310,9 +315,13 @@ private Panel panel1,panel2,panel3,panel4,panel5,panel5a, panel6,panel7,panelPos ...@@ -310,9 +315,13 @@ private Panel panel1,panel2,panel3,panel4,panel5,panel5a, panel6,panel7,panelPos
public String buttonLabel=""; public String buttonLabel="";
} }
public void run(String arg) {
public Eyesis_Correction() { String options=Macro.getOptions();
super("Eyesis_Correction"); try {
prefsPath=Macro.getValue(options, "prefs", Prefs.getPrefsDir()+Prefs.getFileSeparator()+"Eyesis_Correction.xml");
} catch(Exception e) {
prefsPath=Prefs.getPrefsDir()+Prefs.getFileSeparator()+"Eyesis_Correction.xml";
}
if (IJ.versionLessThan("1.43q")) return; if (IJ.versionLessThan("1.43q")) return;
if (instance!=null) { if (instance!=null) {
instance.toFront(); instance.toFront();
...@@ -322,21 +331,36 @@ private Panel panel1,panel2,panel3,panel4,panel5,panel5a, panel6,panel7,panelPos ...@@ -322,21 +331,36 @@ private Panel panel1,panel2,panel3,panel4,panel5,panel5a, panel6,panel7,panelPos
loadPrefs(); loadPrefs();
} catch (IOException e1) { } catch (IOException e1) {
System.out.println("failed to load preferences"); System.out.println("failed to load preferences");
// e1.printStackTrace(); e1.printStackTrace();
} }
EYESIS_CORRECTIONS = new EyesisCorrections(SYNC_COMMAND.stopRequested,CORRECTION_PARAMETERS); EYESIS_CORRECTIONS = new EyesisCorrections(SYNC_COMMAND.stopRequested,CORRECTION_PARAMETERS);
if (options!=null || headless) {
processFiles();
} else {
initGui();
}
}
public void initGui() {
Color color_configure= new Color(200, 200,160); Color color_configure= new Color(200, 200,160);
Color color_process= new Color(180, 180, 240); Color color_process= new Color(180, 180, 240);
Color color_conf_process= new Color(180, 240, 240); Color color_conf_process= new Color(180, 240, 240);
Color color_restore= new Color(180, 240, 180); Color color_restore= new Color(180, 240, 180);
Color color_stop= new Color(255, 160, 160); Color color_stop= new Color(255, 160, 160);
plugInFrame=new PlugInFrame("Eyesis_Correction") {
private static final long serialVersionUID = -4138832568507690332L;
instance = this; @Override
addKeyListener(IJ.getInstance()); public void processWindowEvent(WindowEvent e) {
super.processWindowEvent(e);
if (e.getID()==WindowEvent.WINDOW_CLOSING) {
instance = null;
}
}
};
instance=(Frame)plugInFrame;
plugInFrame.addKeyListener(IJ.getInstance());
int menuRows=4 + (ADVANCED_MODE?4:0) + (MODE_3D?3:0); int menuRows=4 + (ADVANCED_MODE?4:0) + (MODE_3D?3:0);
setLayout(new GridLayout(menuRows, 1)); plugInFrame.setLayout(new GridLayout(menuRows, 1));
panel6 = new Panel(); panel6 = new Panel();
panel6.setLayout(new GridLayout(1, 0, 5, 5)); panel6.setLayout(new GridLayout(1, 0, 5, 5));
addButton("Save",panel6); addButton("Save",panel6);
...@@ -344,13 +368,13 @@ private Panel panel1,panel2,panel3,panel4,panel5,panel5a, panel6,panel7,panelPos ...@@ -344,13 +368,13 @@ private Panel panel1,panel2,panel3,panel4,panel5,panel5a, panel6,panel7,panelPos
addButton("Stop",panel6,color_stop); addButton("Stop",panel6,color_stop);
addButton("Abort",panel6,color_stop); addButton("Abort",panel6,color_stop);
add(panel6); plugInFrame.add(panel6);
panel5 = new Panel(); panel5 = new Panel();
panel5.setLayout(new GridLayout(1, 0, 5, 5)); panel5.setLayout(new GridLayout(1, 0, 5, 5));
addButton("Configure spilt", panel5, color_configure); addButton("Configure spilt", panel5, color_configure);
addButton("Configure demosaic", panel5, color_configure); addButton("Configure demosaic", panel5, color_configure);
add(panel5); plugInFrame.add(panel5);
panel5a = new Panel(); panel5a = new Panel();
panel5a.setLayout(new GridLayout(1, 0, 5, 5)); panel5a.setLayout(new GridLayout(1, 0, 5, 5));
addButton("Configure convolution", panel5a, color_configure); addButton("Configure convolution", panel5a, color_configure);
...@@ -358,7 +382,7 @@ private Panel panel1,panel2,panel3,panel4,panel5,panel5a, panel6,panel7,panelPos ...@@ -358,7 +382,7 @@ private Panel panel1,panel2,panel3,panel4,panel5,panel5a, panel6,panel7,panelPos
addButton("Configure color", panel5a, color_configure); addButton("Configure color", panel5a, color_configure);
addButton("Channel gains", panel5a, color_configure); addButton("Channel gains", panel5a, color_configure);
addButton("Configure RGB", panel5a, color_configure); addButton("Configure RGB", panel5a, color_configure);
add(panel5a); plugInFrame.add(panel5a);
// Debug/development options // Debug/development options
...@@ -368,13 +392,13 @@ private Panel panel1,panel2,panel3,panel4,panel5,panel5a, panel6,panel7,panelPos ...@@ -368,13 +392,13 @@ private Panel panel1,panel2,panel3,panel4,panel5,panel5a, panel6,panel7,panelPos
panel1.setLayout(new GridLayout(1, 0, 5, 5)); // rows, columns, vgap, hgap panel1.setLayout(new GridLayout(1, 0, 5, 5)); // rows, columns, vgap, hgap
addButton("Split Image",panel1); addButton("Split Image",panel1);
addButton("Debayer Image",panel1); addButton("Debayer Image",panel1);
add(panel1); plugInFrame.add(panel1);
panel2 = new Panel(); panel2 = new Panel();
panel2.setLayout(new GridLayout(1, 0, 5, 5)); panel2.setLayout(new GridLayout(1, 0, 5, 5));
addButton("Select kernel stack",panel2); addButton("Select kernel stack",panel2);
addButton("Convolve with stack",panel2); addButton("Convolve with stack",panel2);
add(panel2); plugInFrame.add(panel2);
panel3 = new Panel(); panel3 = new Panel();
panel3.setLayout(new GridLayout(1, 0, 5, 5)); panel3.setLayout(new GridLayout(1, 0, 5, 5));
...@@ -382,14 +406,14 @@ private Panel panel1,panel2,panel3,panel4,panel5,panel5a, panel6,panel7,panelPos ...@@ -382,14 +406,14 @@ private Panel panel1,panel2,panel3,panel4,panel5,panel5a, panel6,panel7,panelPos
addButton("Combine pair",panel3); addButton("Combine pair",panel3);
addButton("Colors",panel3); addButton("Colors",panel3);
addButton("RGB",panel3); addButton("RGB",panel3);
add(panel3); plugInFrame.add(panel3);
panel4 = new Panel(); panel4 = new Panel();
panel4.setLayout(new GridLayout(1, 0, 5, 5)); panel4.setLayout(new GridLayout(1, 0, 5, 5));
addButton("Test",panel4); addButton("Test",panel4);
addButton("Test Debayer",panel4); addButton("Test Debayer",panel4);
add(panel4); plugInFrame.add(panel4);
} }
panel7 = new Panel(); panel7 = new Panel();
panel7.setLayout(new GridLayout(1, 0, 5, 5)); panel7.setLayout(new GridLayout(1, 0, 5, 5));
...@@ -402,7 +426,7 @@ private Panel panel1,panel2,panel3,panel4,panel5,panel5a, panel6,panel7,panelPos ...@@ -402,7 +426,7 @@ private Panel panel1,panel2,panel3,panel4,panel5,panel5a, panel6,panel7,panelPos
addButton("Tiff Writer", panel7); addButton("Tiff Writer", panel7);
addButton("Tiff Properties", panel7); addButton("Tiff Properties", panel7);
} }
add(panel7); plugInFrame.add(panel7);
if (MODE_3D){ if (MODE_3D){
panelPostProcessing1 = new Panel(); panelPostProcessing1 = new Panel();
...@@ -412,7 +436,7 @@ private Panel panel1,panel2,panel3,panel4,panel5,panel5a, panel6,panel7,panelPos ...@@ -412,7 +436,7 @@ private Panel panel1,panel2,panel3,panel4,panel5,panel5a, panel6,panel7,panelPos
addButton("ConvertPP", panelPostProcessing1,color_process); addButton("ConvertPP", panelPostProcessing1,color_process);
addButton("Linear Features", panelPostProcessing1); addButton("Linear Features", panelPostProcessing1);
addButton("Intercam correlations", panelPostProcessing1); addButton("Intercam correlations", panelPostProcessing1);
add(panelPostProcessing1); plugInFrame.add(panelPostProcessing1);
panelPostProcessing2 = new Panel(); panelPostProcessing2 = new Panel();
panelPostProcessing2.setLayout(new GridLayout(1, 0, 5, 5)); panelPostProcessing2.setLayout(new GridLayout(1, 0, 5, 5));
...@@ -423,19 +447,19 @@ private Panel panel1,panel2,panel3,panel4,panel5,panel5a, panel6,panel7,panelPos ...@@ -423,19 +447,19 @@ private Panel panel1,panel2,panel3,panel4,panel5,panel5a, panel6,panel7,panelPos
addButton("Fill FG gaps", panelPostProcessing2); addButton("Fill FG gaps", panelPostProcessing2);
addButton("Filter Z-map", panelPostProcessing2); addButton("Filter Z-map", panelPostProcessing2);
addButton("Occluding FG", panelPostProcessing2); addButton("Occluding FG", panelPostProcessing2);
add(panelPostProcessing2); plugInFrame.add(panelPostProcessing2);
panelPostProcessing3 = new Panel(); panelPostProcessing3 = new Panel();
panelPostProcessing3.setLayout(new GridLayout(1, 0, 5, 5)); panelPostProcessing3.setLayout(new GridLayout(1, 0, 5, 5));
addButton("Refine Disparities", panelPostProcessing3); addButton("Refine Disparities", panelPostProcessing3);
addButton("Init Photometry", panelPostProcessing3); addButton("Init Photometry", panelPostProcessing3);
addButton("Plane Likely", panelPostProcessing3); addButton("Plane Likely", panelPostProcessing3);
add(panelPostProcessing3); plugInFrame.add(panelPostProcessing3);
} }
pack(); plugInFrame.pack();
GUI.center(this); GUI.center(plugInFrame);
setVisible(true); plugInFrame.setVisible(true);
FHT_INSTANCE= new DoubleFHT(); FHT_INSTANCE= new DoubleFHT();
SDFA_INSTANCE= new showDoubleFloatArrays(); SDFA_INSTANCE= new showDoubleFloatArrays();
// main loop // main loop
...@@ -464,7 +488,6 @@ private Panel panel1,panel2,panel3,panel4,panel5,panel5a, panel6,panel7,panelPos ...@@ -464,7 +488,6 @@ private Panel panel1,panel2,panel3,panel4,panel5,panel5a, panel6,panel7,panelPos
} }
} }
private String prefsPath=Prefs.getPrefsDir()+Prefs.getFileSeparator()+"Eyesis_Correction.xml";
private Properties prefsProperties=new Properties(); private Properties prefsProperties=new Properties();
public void loadPrefs() throws IOException{ public void loadPrefs() throws IOException{
...@@ -478,6 +501,8 @@ private Panel panel1,panel2,panel3,panel4,panel5,panel5a, panel6,panel7,panelPos ...@@ -478,6 +501,8 @@ private Panel panel1,panel2,panel3,panel4,panel5,panel5a, panel6,panel7,panelPos
} }
try { try {
prefsProperties.loadFromXML(is); prefsProperties.loadFromXML(is);
getAllProperties(prefsProperties);
if (DEBUG_LEVEL>0) System.out.println("Configuration parameters are restored from "+this.prefsPath);
} catch (IOException e) { } catch (IOException e) {
String msg="Failed to read XML configuration file: "+this.prefsPath; String msg="Failed to read XML configuration file: "+this.prefsPath;
...@@ -490,7 +515,7 @@ private Panel panel1,panel2,panel3,panel4,panel5,panel5a, panel6,panel7,panelPos ...@@ -490,7 +515,7 @@ private Panel panel1,panel2,panel3,panel4,panel5,panel5a, panel6,panel7,panelPos
// TODO Auto-generated catch block // TODO Auto-generated catch block
e.printStackTrace(); e.printStackTrace();
} }
String sValue= this.prefsProperties.getProperty("ADVANCED_MODE"); String sValue = this.prefsProperties.getProperty("ADVANCED_MODE");
if (sValue!=null) { if (sValue!=null) {
ADVANCED_MODE=Boolean.parseBoolean(sValue); ADVANCED_MODE=Boolean.parseBoolean(sValue);
System.out.println("Read ADVANCED_MODE="+ADVANCED_MODE); System.out.println("Read ADVANCED_MODE="+ADVANCED_MODE);
...@@ -536,13 +561,6 @@ private Panel panel1,panel2,panel3,panel4,panel5,panel5a, panel6,panel7,panelPos ...@@ -536,13 +561,6 @@ private Panel panel1,panel2,panel3,panel4,panel5,panel5a, panel6,panel7,panelPos
b.addKeyListener(IJ.getInstance()); b.addKeyListener(IJ.getInstance());
panel.add(b); panel.add(b);
} }
public void processWindowEvent(WindowEvent e) {
super.processWindowEvent(e);
if (e.getID()==WindowEvent.WINDOW_CLOSING) {
instance = null;
}
}
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
String label = e.getActionCommand(); String label = e.getActionCommand();
if (label.equals("Abort")) { if (label.equals("Abort")) {
...@@ -569,6 +587,70 @@ private Panel panel1,panel2,panel3,panel4,panel5,panel5a, panel6,panel7,panelPos ...@@ -569,6 +587,70 @@ private Panel panel1,panel2,panel3,panel4,panel5,panel5a, panel6,panel7,panelPos
} }
// matchSimulatedPattern.FFT_SIZE=FFT_SIZE; // matchSimulatedPattern.FFT_SIZE=FFT_SIZE;
} }
public void processFiles() {
DEBUG_LEVEL=MASTER_DEBUG_LEVEL;
EYESIS_CORRECTIONS.setDebug(DEBUG_LEVEL);
String configPath=null;
if (!headless && EYESIS_CORRECTIONS.correctionsParameters.saveSettings) {
configPath=EYESIS_CORRECTIONS.correctionsParameters.selectResultsDirectory(
true,
true);
if (configPath==null){
String msg="No results directory selected, command aborted";
System.out.println("Warning: "+msg);
IJ.showMessage("Warning",msg);
return;
}
configPath+=Prefs.getFileSeparator()+"autoconfig";
try {
saveTimestampedProperties(
configPath, // full path or null
null, // use as default directory if path==null
true,
PROPERTIES);
} catch (Exception e){
String msg="Failed to save configuration to "+configPath+", command aborted";
System.out.println("Error: "+msg);
IJ.showMessage("Error",msg);
return;
}
}
EYESIS_CORRECTIONS.initSensorFiles(DEBUG_LEVEL);
int numChannels=EYESIS_CORRECTIONS.getNumChannels();
NONLIN_PARAMETERS.modifyNumChannels(numChannels);
CHANNEL_GAINS_PARAMETERS.modifyNumChannels(numChannels);
if (CORRECTION_PARAMETERS.deconvolve && (NONLIN_PARAMETERS.noiseGainPower!=0)) {
EYESIS_CORRECTIONS.updateImageNoiseGains(
NONLIN_PARAMETERS, //EyesisCorrectionParameters.NonlinParameters nonlinParameters,
CONVOLVE_FFT_SIZE, //int fftSize, // 128 - fft size, kernel size should be size/2
THREADS_MAX, // int threadsMax, // maximal number of threads to launch
UPDATE_STATUS, // boolean updateStatus,
DEBUG_LEVEL); //int globalDebugLevel){
}
EYESIS_CORRECTIONS.processChannelImages(
SPLIT_PARAMETERS, // EyesisCorrectionParameters.SplitParameters splitParameters,
DEBAYER_PARAMETERS, //EyesisCorrectionParameters.DebayerParameters debayerParameters,
NONLIN_PARAMETERS, //EyesisCorrectionParameters.NonlinParameters nonlinParameters,
COLOR_PROC_PARAMETERS, //EyesisCorrectionParameters.ColorProcParameters colorProcParameters,
CHANNEL_GAINS_PARAMETERS, //CorrectionColorProc.ColorGainsParameters channelGainParameters,
RGB_PARAMETERS, //EyesisCorrectionParameters.RGBParameters rgbParameters,
EQUIRECTANGULAR_PARAMETERS, // EyesisCorrectionParameters.EquirectangularParameters equirectangularParameters,
CONVOLVE_FFT_SIZE, //int convolveFFTSize, // 128 - fft size, kernel size should be size/2
THREADS_MAX, //final int threadsMax, // maximal number of threads to launch
UPDATE_STATUS, //final boolean updateStatus,
DEBUG_LEVEL); //final int debugLevel);
if (configPath!=null) {
saveTimestampedProperties( // save config again
configPath, // full path or null
null, // use as default directory if path==null
true,
PROPERTIES);
}
}
public void runMenuCommand(String label){ public void runMenuCommand(String label){
int i, j; //,l,iq; int i, j; //,l,iq;
// String label = e.getActionCommand(); // String label = e.getActionCommand();
...@@ -982,69 +1064,7 @@ private Panel panel1,panel2,panel3,panel4,panel5,panel5a, panel6,panel7,panelPos ...@@ -982,69 +1064,7 @@ private Panel panel1,panel2,panel3,panel4,panel5,panel5a, panel6,panel7,panelPos
return; return;
/* ======================================================================== */ /* ======================================================================== */
} else if (label.equals("Process files")) { } else if (label.equals("Process files")) {
DEBUG_LEVEL=MASTER_DEBUG_LEVEL; processFiles();
EYESIS_CORRECTIONS.setDebug(DEBUG_LEVEL);
String configPath=null;
if (EYESIS_CORRECTIONS.correctionsParameters.saveSettings) {
configPath=EYESIS_CORRECTIONS.correctionsParameters.selectResultsDirectory(
true,
true);
if (configPath==null){
String msg="No results directory selected, command aborted";
System.out.println("Warning: "+msg);
IJ.showMessage("Warning",msg);
return;
}
configPath+=Prefs.getFileSeparator()+"autoconfig";
try {
saveTimestampedProperties(
configPath, // full path or null
null, // use as default directory if path==null
true,
PROPERTIES);
} catch (Exception e){
String msg="Failed to save configuration to "+configPath+", command aborted";
System.out.println("Error: "+msg);
IJ.showMessage("Error",msg);
return;
}
}
EYESIS_CORRECTIONS.initSensorFiles(DEBUG_LEVEL);
int numChannels=EYESIS_CORRECTIONS.getNumChannels();
NONLIN_PARAMETERS.modifyNumChannels(numChannels);
CHANNEL_GAINS_PARAMETERS.modifyNumChannels(numChannels);
if (CORRECTION_PARAMETERS.deconvolve && (NONLIN_PARAMETERS.noiseGainPower!=0)) {
EYESIS_CORRECTIONS.updateImageNoiseGains(
NONLIN_PARAMETERS, //EyesisCorrectionParameters.NonlinParameters nonlinParameters,
CONVOLVE_FFT_SIZE, //int fftSize, // 128 - fft size, kernel size should be size/2
THREADS_MAX, // int threadsMax, // maximal number of threads to launch
UPDATE_STATUS, // boolean updateStatus,
DEBUG_LEVEL); //int globalDebugLevel){
}
EYESIS_CORRECTIONS.processChannelImages(
SPLIT_PARAMETERS, // EyesisCorrectionParameters.SplitParameters splitParameters,
DEBAYER_PARAMETERS, //EyesisCorrectionParameters.DebayerParameters debayerParameters,
NONLIN_PARAMETERS, //EyesisCorrectionParameters.NonlinParameters nonlinParameters,
COLOR_PROC_PARAMETERS, //EyesisCorrectionParameters.ColorProcParameters colorProcParameters,
CHANNEL_GAINS_PARAMETERS, //CorrectionColorProc.ColorGainsParameters channelGainParameters,
RGB_PARAMETERS, //EyesisCorrectionParameters.RGBParameters rgbParameters,
EQUIRECTANGULAR_PARAMETERS, // EyesisCorrectionParameters.EquirectangularParameters equirectangularParameters,
CONVOLVE_FFT_SIZE, //int convolveFFTSize, // 128 - fft size, kernel size should be size/2
THREADS_MAX, //final int threadsMax, // maximal number of threads to launch
UPDATE_STATUS, //final boolean updateStatus,
DEBUG_LEVEL); //final int debugLevel);
if (configPath!=null) {
saveTimestampedProperties( // save config again
configPath, // full path or null
null, // use as default directory if path==null
true,
PROPERTIES);
}
return; return;
/* ======================================================================== */ /* ======================================================================== */
} else if (label.equals("Tiff Writer")) { } else if (label.equals("Tiff Writer")) {
...@@ -5673,7 +5693,7 @@ G= Y +Pr*(- 2*Kr*(1-Kr))/Kg + Pb*(-2*Kb*(1-Kb))/Kg ...@@ -5673,7 +5693,7 @@ G= Y +Pr*(- 2*Kr*(1-Kr))/Kg + Pb*(-2*Kb*(1-Kb))/Kg
*/ */
public static void main(String[] args) { public static void main(String[] args) {
// set the plugins.dir property to make the plugin appear in the Plugins menu // set the plugins.dir property to make the plugin appear in the Plugins menu
Class<?> clazz = Aberration_Calibration.class; Class<?> clazz = Eyesis_Correction.class;
String url = clazz.getResource("/" + clazz.getName().replace('.', '/') + ".class").toString(); String url = clazz.getResource("/" + clazz.getName().replace('.', '/') + ".class").toString();
String pluginsDir = url.substring(5, url.length() - clazz.getName().length() - 6); String pluginsDir = url.substring(5, url.length() - clazz.getName().length() - 6);
System.setProperty("plugins.dir", pluginsDir); System.setProperty("plugins.dir", pluginsDir);
......
...@@ -30,6 +30,7 @@ import ij.process.*; ...@@ -30,6 +30,7 @@ import ij.process.*;
import ij.gui.*; import ij.gui.*;
import ij.plugin.frame.*; import ij.plugin.frame.*;
import ij.text.*; import ij.text.*;
import ij.plugin.PlugIn;
import java.awt.*; import java.awt.*;
import java.awt.event.*; import java.awt.event.*;
...@@ -50,9 +51,8 @@ import org.xml.sax.InputSource; ...@@ -50,9 +51,8 @@ import org.xml.sax.InputSource;
import org.xml.sax.SAXException; import org.xml.sax.SAXException;
/* This plugin opens images in Elphel JP4/JP46 format (opens as JPEG, reads MakerNote and converts). */ /* This plugin opens images in Elphel JP4/JP46 format (opens as JPEG, reads MakerNote and converts). */
public class JP46_Reader_camera extends PlugInFrame implements ActionListener { public class JP46_Reader_camera implements PlugIn, ActionListener {
/** /**
* *
...@@ -61,6 +61,7 @@ public class JP46_Reader_camera extends PlugInFrame implements ActionListener { ...@@ -61,6 +61,7 @@ public class JP46_Reader_camera extends PlugInFrame implements ActionListener {
Panel panel1; Panel panel1;
Panel confpanel; Panel confpanel;
Frame instance; Frame instance;
PlugInFrame plugInFrame;
String arg; String arg;
...@@ -75,44 +76,31 @@ public class JP46_Reader_camera extends PlugInFrame implements ActionListener { ...@@ -75,44 +76,31 @@ public class JP46_Reader_camera extends PlugInFrame implements ActionListener {
public boolean demux=true; public boolean demux=true;
public String imageTitle="cameraImage"; public String imageTitle="cameraImage";
private int ExifOffset=0x0c; private int ExifOffset=0x0c;
private Boolean headless=GraphicsEnvironment.getLocalGraphicsEnvironment().isHeadlessInstance();
public JP46_Reader_camera() { public void run(String arg) {
super("JP46 Reader Camera");
if (IJ.versionLessThan("1.39t")) return;
if (instance!=null) {
instance.toFront();
return;
} }
instance = this;
addKeyListener(IJ.getInstance());
panel1 = new Panel(); public JP46_Reader_camera(Boolean showGui) {
if (showGui) initGui();
panel1.setLayout(new GridLayout(6, 1, 50, 5)); }
addButton("Open JP4/JP46...",panel1);
addButton("Open JP4/JP46 from camera",panel1);
addButton("Configure...",panel1);
addButton("Show image properties",panel1);
addButton("Decode image info to properties",panel1);
addButton("Split Bayer",panel1);
public JP46_Reader_camera() {
initGui();
}
add(panel1); private void initGui() {
if (headless) return;
pack();
GUI.center(this);
setVisible(true);
}
public JP46_Reader_camera(boolean showGUI) {
super("JP46 Reader Camera");
if (IJ.versionLessThan("1.39t")) return; if (IJ.versionLessThan("1.39t")) return;
if (instance!=null) { if (instance!=null) {
instance.toFront(); instance.toFront();
return; return;
} }
instance = this; plugInFrame=new PlugInFrame("JP46 Reader Camera");
addKeyListener(IJ.getInstance()); instance = (Frame)plugInFrame;
plugInFrame.addKeyListener(IJ.getInstance());
panel1 = new Panel(); panel1 = new Panel();
...@@ -124,12 +112,14 @@ public class JP46_Reader_camera extends PlugInFrame implements ActionListener { ...@@ -124,12 +112,14 @@ public class JP46_Reader_camera extends PlugInFrame implements ActionListener {
addButton("Show image properties",panel1); addButton("Show image properties",panel1);
addButton("Decode image info to properties",panel1); addButton("Decode image info to properties",panel1);
addButton("Split Bayer",panel1); addButton("Split Bayer",panel1);
add(panel1);
pack();
GUI.center(this);
setVisible(showGUI);
}
plugInFrame.add(panel1);
plugInFrame.pack();
GUI.center(plugInFrame);
plugInFrame.setVisible(true);
}
void addButton(String label, Panel panel) { void addButton(String label, Panel panel) {
Button b = new Button(label); Button b = new Button(label);
b.addActionListener(this); b.addActionListener(this);
...@@ -1321,7 +1311,7 @@ Exception in thread "Thread-3564" java.lang.ArrayIndexOutOfBoundsException: 8970 ...@@ -1321,7 +1311,7 @@ Exception in thread "Thread-3564" java.lang.ArrayIndexOutOfBoundsException: 8970
*/ */
public static void main(String[] args) { public static void main(String[] args) {
// set the plugins.dir property to make the plugin appear in the Plugins menu // set the plugins.dir property to make the plugin appear in the Plugins menu
Class<?> clazz = Aberration_Calibration.class; Class<?> clazz = JP46_Reader_camera.class;
String url = clazz.getResource("/" + clazz.getName().replace('.', '/') + ".class").toString(); String url = clazz.getResource("/" + clazz.getName().replace('.', '/') + ".class").toString();
String pluginsDir = url.substring(5, url.length() - clazz.getName().length() - 6); String pluginsDir = url.substring(5, url.length() - clazz.getName().length() - 6);
System.setProperty("plugins.dir", pluginsDir); System.setProperty("plugins.dir", pluginsDir);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment