Commit 3f9c52b0 authored by Andrey Filippov's avatar Andrey Filippov
Browse files

merged with lwir

parents 13959a97 047fdb5e
Loading
Loading
Loading
Loading
+68 −6
Original line number Diff line number Diff line
@@ -55,6 +55,8 @@ import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

import com.elphel.imagej.readers.ImagejJp4Tiff;

import ij.IJ;
import ij.ImageJ;
import ij.ImagePlus;
@@ -69,6 +71,7 @@ import ij.plugin.frame.PlugInFrame;
import ij.process.ImageConverter;
import ij.process.ImageProcessor;
import ij.text.TextWindow;
import loci.formats.FormatException;



@@ -87,6 +90,8 @@ public class JP46_Reader_camera0 extends PlugInFrame implements ActionListener {

	static File dir;

	ImagejJp4Tiff imagejJp4Tiff = new ImagejJp4Tiff();

	public String camera_url = "http://192.168.0.236:8081/";
	public String camera_img = "bimg";
	public String camera_img_new = "towp/wait/bimg"; // will always wait for the next image (repetitive acquisitions get new images)
@@ -109,8 +114,9 @@ public class JP46_Reader_camera0 extends PlugInFrame implements ActionListener {

		panel1 = new Panel();

		panel1.setLayout(new GridLayout(6, 1, 50, 5));
		panel1.setLayout(new GridLayout(8, 1, 50, 5));

		addButton("Open JP4/Tiff...",panel1);
		addButton("Open JP4/JP46...",panel1);
		addButton("Open JP4/JP46 from camera",panel1);
		addButton("Configure...",panel1);
@@ -137,8 +143,8 @@ public class JP46_Reader_camera0 extends PlugInFrame implements ActionListener {

		panel1 = new Panel();

		panel1.setLayout(new GridLayout(6, 1, 50, 5));

		panel1.setLayout(new GridLayout(8, 1, 50, 5));
		addButton("Open JP4/Tiff...",panel1);
		addButton("Open JP4/JP46...",panel1);
		addButton("Open JP4/JP46 from camera",panel1);
		addButton("Configure...",panel1);
@@ -169,7 +175,11 @@ public class JP46_Reader_camera0 extends PlugInFrame implements ActionListener {
		if (label==null) return;

		/* button */
		if (label.equals("Open JP4/JP46...")) {
		if (label.equals("Open JP4/Tiff...")) {
			read_jp4Tiff(arg,true);
		}else if (label.equals("Open JP4/Tiff (no scale)...")) {
			read_jp4Tiff(arg,false);
		}else if (label.equals("Open JP4/JP46...")) {
			read_jp46(arg,true);
		}else if (label.equals("Open JP4/JP46 (no scale)...")) {
			read_jp46(arg,false);
@@ -227,7 +237,54 @@ public class JP46_Reader_camera0 extends PlugInFrame implements ActionListener {
        imp_stack.getProcessor().resetMinAndMax();
        imp_stack.show();
    }
	public void read_jp4Tiff(String arg, // not used?
			boolean scale) {

		String LOG_LEVEL = ABSOLUTELY_SILENT? "OFF" : (IS_SILENT?"ERROR":"INFO");
    	boolean LOG_LEVEL_SET = loci.common.DebugTools.enableLogging(LOG_LEVEL);
    	if (!LOG_LEVEL_SET) { // only first time true
    		loci.common.DebugTools.setRootLevel(LOG_LEVEL);
    	}

		JFileChooser fc=null;
		//try {fc = new JFileChooser();}

		fc = new JFileChooser();

		//catch (Throwable e) {IJ.error("This plugin requires Java 2 or Swing."); return;}
		fc.setMultiSelectionEnabled(true);

		if (dir==null) {
			String sdir = OpenDialog.getDefaultDirectory();
			if (sdir!=null)
				dir = new File(sdir);
		}
		if (dir!=null)
			fc.setCurrentDirectory(dir);

		int returnVal = fc.showOpenDialog(IJ.getInstance());
		if (returnVal!=JFileChooser.APPROVE_OPTION)
			return;
		File[] files = fc.getSelectedFiles();
		if (files.length==0) { // getSelectedFiles does not work on some JVMs
			files = new File[1];
			files[0] = fc.getSelectedFile();
		}
		String path = fc.getCurrentDirectory().getPath()+Prefs.getFileSeparator();
		dir = fc.getCurrentDirectory();
		for (int i=0; i<files.length; i++) {
			try {
				ImagePlus imp = 	imagejJp4Tiff.readTiffJp4(path + files[i].getName(), scale);
//				imp.updateAndDraw();
				imp.show();
			} catch (IOException | FormatException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} // throws IOException, FormatException { // std - include non-elphel properties with prefix std
//			open(path, files[i].getName(), arg, scale);
		}

	}
	public void read_jp46(String arg, boolean scale) {
		JFileChooser fc=null;
		//try {fc = new JFileChooser();}
@@ -274,6 +331,7 @@ public class JP46_Reader_camera0 extends PlugInFrame implements ActionListener {

		confpanel = new Panel();
		gd.addPanel(confpanel);
		addButton("Open JP4/Tiff (no scale)...", confpanel);
		addButton("Open JP4/JP46 (no scale)...", confpanel);
		addButton("Open JP4/JP46 from camera (no scale)", confpanel);

@@ -1413,9 +1471,13 @@ Exception in thread "Thread-3564" java.lang.ArrayIndexOutOfBoundsException: 8970
	    NodeList allNodes=doc.getDocumentElement().getElementsByTagName("*");
	    for (int i=0;i<allNodes.getLength();i++) {
	        String name= allNodes.item(i).getNodeName();
            String value=allNodes.item(i).getFirstChild().getNodeValue();
    		imp.setProperty(name, value);
	        String value="";
	        try {
	        	value=allNodes.item(i).getFirstChild().getNodeValue();
	        } catch(Exception e) {

	        }
    		imp.setProperty(name, value);
	    }

		return true;
+404 −177

File changed.

Preview size limit exceeded, changes collapsed.

+37 −15
Original line number Diff line number Diff line
@@ -23,15 +23,16 @@ package com.elphel.imagej.calibration;
 **
 */

import ij.IJ;
import ij.Prefs;
import ij.gui.GenericDialog;

import java.io.File;
import java.io.FilenameFilter;
import java.util.Properties;

import com.elphel.imagej.common.WindowTools;

import ij.IJ;
import ij.Prefs;
import ij.gui.GenericDialog;


    public class DistortionProcessConfiguration{
    	public String  sourceDirectory="";
@@ -207,4 +208,25 @@ import com.elphel.imagej.common.WindowTools;
	       	return sourceFiles;
    	}

        public String[] selectSourceSets() {
			File dir= new File (this.sourceDirectory);
			if (this.debugLevel>1) System.out.println("selectSourceSets, dir="+this.sourceDirectory);
			if (!dir.exists()) {
				String error="Source directory "+this.sourceDirectory+" does not exist.";
        		IJ.showMessage("No files selected");
				if (this.debugLevel>1) System.out.println("selectSourceFiles() ERROR:"+error);
				return null;
			}
			File [] sourceFileSets = dir.listFiles(new FilenameFilter() {
			  @Override
			  public boolean accept(File current, String name) {
			    return new File(current, name).isDirectory();
			  }
			});
			String [] sourceSets = new String[sourceFileSets.length];
			for (int i=0;i<sourceSets.length;i++) sourceSets[i]=sourceFileSets[i].getPath();
			return sourceSets;
        }

    }
+272 −262
Original line number Diff line number Diff line
package com.elphel.imagej.calibration;
import ij.IJ;
import ij.ImagePlus;
import ij.ImageStack;
import ij.Prefs;
import ij.gui.GenericDialog;
import ij.io.FileSaver;
import ij.io.Opener;
import ij.process.FloatProcessor;
import ij.process.ImageProcessor;

import java.awt.Rectangle;
import java.io.File;
import java.util.ArrayList;
@@ -19,14 +9,22 @@ import java.util.concurrent.atomic.AtomicInteger;

import javax.swing.SwingUtilities;

import com.elphel.imagej.calibration.CalibrationFileManagement.MultipleExtensionsFileFilter;
import com.elphel.imagej.calibration.SimulationPattern.SimulParameters;
import com.elphel.imagej.common.DoubleFHT;
import com.elphel.imagej.common.DoubleGaussianBlur;
import com.elphel.imagej.common.ShowDoubleFloatArrays;
import com.elphel.imagej.common.WindowTools;
import com.elphel.imagej.jp4.JP46_Reader_camera;

import ij.IJ;
import ij.ImagePlus;
import ij.ImageStack;
import ij.Prefs;
import ij.gui.GenericDialog;
import ij.io.FileSaver;
import ij.io.Opener;
import ij.process.FloatProcessor;
import ij.process.ImageProcessor;

public class EyesisAberrations {
	public double [][][][] pdfKernelMap=null;
	JP46_Reader_camera JP4_INSTANCE=       new JP46_Reader_camera(false);
@@ -181,6 +179,7 @@ public class EyesisAberrations {
		final int numberOfKernelsInChn=tilesY*tilesX;
		for (int ithread = 0; ithread < threads.length; ithread++) {
			threads[ithread] = new Thread() {
				@Override
				public void run() {
					float [] pixels=null;
					double [] kernel= new double[inverseParameters.dSize*inverseParameters.dSize];
@@ -555,7 +554,7 @@ public class EyesisAberrations {
						iy=-iy;
					}
					ix= (ix+size) % size;
					floatPixels[i]=(float) clusterMap[iy][ix];
					floatPixels[i]=clusterMap[iy][ix];
				}
				ip.setPixels(floatPixels);
				ip.resetMinAndMax();
@@ -639,8 +638,8 @@ public class EyesisAberrations {
				row2=(fftsize-row1) %fftsize;
				for (col1=0;col1 < fftsize;col1++) {
					col2=(fftsize-col1) %fftsize;
					fht_pixels[row1*fftsize+col1]=(double) (fft[row1][col1][0]-fft[row1][col1][1]);
					fht_pixels[row2*fftsize+col2]=(double) (fft[row1][col1][0]+fft[row1][col1][1]);
					fht_pixels[row1*fftsize+col1]=fft[row1][col1][0]-fft[row1][col1][1];
					fht_pixels[row2*fftsize+col2]=fft[row1][col1][0]+fft[row1][col1][1];
				}
			}
			return fht_pixels;
@@ -1279,8 +1278,11 @@ public class EyesisAberrations {
        			}

        			int rslt=matchSimulatedPattern.calculateDistortions(
    				        null, // LwirReaderParameters lwirReaderParameters, // null is OK
        					distortionParameters, //
        					patternDetectParameters,
//        					patternDetectParameters.minGridPeriod/2,
//        		            patternDetectParameters.maxGridPeriod/2,
        					simulParameters,
        					colorComponents.equalizeGreens,
        					imp,
@@ -2313,6 +2315,7 @@ public class EyesisAberrations {
		for (int ithread = 0; ithread < threads.length; ithread++) {
			// Concurrently run in as many threads as CPUs
			threads[ithread] = new Thread() {
				@Override
				public void run() {

					// Each thread processes a few items in the total list
@@ -2399,6 +2402,7 @@ public class EyesisAberrations {
						}
   						final int numFinished=tilesFinishedAtomic.getAndIncrement();
   						SwingUtilities.invokeLater(new Runnable() {
   							@Override
							public void run() {
   								IJ.showProgress(numFinished,patternCells);
   							}
@@ -2679,6 +2683,8 @@ public class EyesisAberrations {
			if (matchSimulatedPattern.PATTERN_GRID==null) {
				double[][] distortedPattern= matchSimulatedPattern.findPatternDistorted(input_bayer, // pixel array to process (no windowing!)
						patternDetectParameters,
						patternDetectParameters.minGridPeriod/2,
			            patternDetectParameters.maxGridPeriod/2,
						true, //(greensToProcess==4), // boolean greens, // this is a pattern for combined greens (diagonal), adjust results accordingly
						title); // title prefix to use for debug  images

@@ -2704,7 +2710,8 @@ public class EyesisAberrations {
						distortedPattern[2], //
						simulParameters.subdiv,
						fft_size,
						simulParameters.center_for_g2);
						simulParameters.center_for_g2,
						false);//boolean mono
				wVectors[0][0]=2.0*distortedPattern[0][0]/subpixel;
				wVectors[0][1]=2.0*distortedPattern[0][1]/subpixel;
				wVectors[1][0]=2.0*distortedPattern[1][0]/subpixel;
@@ -2747,7 +2754,8 @@ public class EyesisAberrations {
						simCorr, //
						simulParameters.subdiv,
						fft_size,
						simulParameters.center_for_g2);
						simulParameters.center_for_g2,
						false);//boolean mono
			}
//			simul_pixels= simulationPattern.extractSimulPatterns (
			simul_pixels= simulationPattern.extractSimulPatterns (
@@ -4148,7 +4156,7 @@ if (globalDebugLevel>2)globalDebugLevel=0; //***********************************
					ImageProcessor ip = new FloatProcessor(size,size);
					float [] floatPixels = new float [size*size];
					for (i=0;i<floatPixels.length;i++) {
						floatPixels[i]=(float) clusterMap[i/size][i%size];
						floatPixels[i]=clusterMap[i/size][i%size];
					}
					ip.setPixels(floatPixels);
					ip.resetMinAndMax();
@@ -4404,11 +4412,11 @@ if (globalDebugLevel>2)globalDebugLevel=0; //***********************************
			if (debug) {
				SDFA_INSTANCE.showArrays(debugPixels, title+"_mask_PSF");
				double [] doublePixelsPSFCount=new double [pixelsPSF.length];
				for (j=0;j<doublePixelsPSFCount.length;j++) doublePixelsPSFCount[j]=(double)pixelsPSFCount[j];
				for (j=0;j<doublePixelsPSFCount.length;j++) doublePixelsPSFCount[j]=pixelsPSFCount[j];
				SDFA_INSTANCE.showArrays(doublePixelsPSFCount, title+"_PSF_bin_count");
				SDFA_INSTANCE.showArrays(pixelsPSFWeight,      title+"_PSF_bin_weight");
				double [] doubleContrastCache=new double [contrastCache.length];
				for (j=0;j<doubleContrastCache.length;j++) doubleContrastCache[j]=(double)((contrastCache[j]>=0.0)?contrastCache[j]:-0.00001);
				for (j=0;j<doubleContrastCache.length;j++) doubleContrastCache[j]=(contrastCache[j]>=0.0)?contrastCache[j]:-0.00001;
				SDFA_INSTANCE.showArrays(doubleContrastCache,  title+"_ContrastCache");
			}
			return pixelsPSF;
@@ -4988,6 +4996,7 @@ if (globalDebugLevel>2)globalDebugLevel=0; //***********************************
			this.thresholdHigh = thresholdHigh;
			this.thresholdLow = thresholdLow;
		}
        @Override
		public OTFFilterParameters clone() {
        	return new OTFFilterParameters(
        			this.deconvInvert,
@@ -5076,6 +5085,7 @@ if (globalDebugLevel>2)globalDebugLevel=0; //***********************************


		}
        @Override
		public PSFParameters clone(){
        	return new PSFParameters(
        			this.minContrast,
+23 −17
Original line number Diff line number Diff line
@@ -665,9 +665,12 @@ horizontal axis:

		boolean noMessageBoxes=true;
		int numAbsolutePoints = matchSimulatedPattern.calculateDistortions(
				        null, // LwirReaderParameters lwirReaderParameters, // null is OK
						// allow more of grid around pointers?
						distortionParameters, //
						this.patternDetectParameters,
//						this.patternDetectParameters.minGridPeriod/2,
//						this.patternDetectParameters.maxGridPeriod/2,
						simulParameters,
						equalizeGreens, imp_eq,
						this.laserPointers, // null, //LASER_POINTERS, //
@@ -838,9 +841,12 @@ horizontal axis:
//	matchSimulatedPatterns[numSensor].getChannel(images[numSensor])+" ");

				int numAbsolutePoints = this.matchSimulatedPatterns[numSensor].calculateDistortions(
						null, // LwirReaderParameters lwirReaderParameters, // null is OK
						// allow more of grid around pointers?
						distortionParameters, //
						this.patternDetectParameters,
//						this.patternDetectParameters.minGridPeriod/2,
//						this.patternDetectParameters.maxGridPeriod/2,
						simulParameters,
						equalizeGreens, imp_eq,
						this.laserPointers, // null, //LASER_POINTERS, //
Loading