Commit d811fafa authored by Andrey Filippov's avatar Andrey Filippov
Browse files

implemented distorrtion model selection, image selection editor, different...

implemented distorrtion model selection, image selection editor, different maximal radius for grid match and adjustment
parent ae245e9a
Loading
Loading
Loading
Loading
+6 −3
Original line number Diff line number Diff line
@@ -404,6 +404,7 @@ public static MatchSimulatedPattern.DistortionParameters DISTORTION =new MatchSi
    		1296.0, // double px0     // lens axis from sensor, horizontal, from left (pixels)
    		968.0, // double py0     // lens axis from sensor, vertical, from top (pixels)
    		true, //  boolean flipVertical // acquired image is mirrored vertically (mirror used)
    		-1, // lensDistortionModel (use default)
    		null, //  double [][] r_xy,
    		null  //  double [][] r_od
    		);
@@ -1169,7 +1170,8 @@ if (MORE_BUTTONS) {
	        		System.out.println("Number of enabled grid images: "+numImages[0]+
	        				", of them new: "+numImages[1]+
	        				", disabled without vignetting info: "+numImages[2]+
	        				", disabled having less than "+minGridsNoPointer+" nodes and no matched pointers: "+numImages[3]);
	        				", disabled having less than "+minGridsNoPointer+" nodes and no matched pointers: "+numImages[3]+
	        				", disabled with no lasers and enableNoLaser==false (like 2 bottom cameras):" +numImages[4]);
	    			
		    		if (DISTORTION_CALIBRATION_DATA.gIS==null) {
		    			int numImageSets=DISTORTION_CALIBRATION_DATA.buildImageSets(false); // from scratch
@@ -6062,7 +6064,7 @@ if (MORE_BUTTONS) {
    		gd.addNumericField("Minimal registered grid period as a fraction of maximal (to filter reflections)", 0.4,2); //was 0.7
    		gd.addCheckbox    ("Reset orientation from the image with most pointers (false - only if it was not set yet)", overwriteAll);
    		gd.addCheckbox    ("Disable (old) images without vignetting information", true);
    		gd.addNumericField("Minimal number of grids in no-pointer images and estimated orientation", 1000,0);
    		gd.addNumericField("Minimal number of grid nodes in no-pointer images and estimated orientation", 1000,0);
    		gd.showDialog();
    		if (gd.wasCanceled()) return;
    		boolean resetHinted=       gd.getNextBoolean();
@@ -6081,7 +6083,8 @@ if (MORE_BUTTONS) {
    		System.out.println("Number of enabled grid images: "+numImages[0]+
    				", of them new: "+numImages[1]+
    				", disabled without vignetting info: "+numImages[2]+
    				", disabled having less than "+minGridsNoPointer+" nodes and no matched pointers: "+numImages[3]);
    				", disabled having less than "+minGridsNoPointer+" nodes and no matched pointers: "+numImages[3]+
    				", disabled with no lasers and enableNoLaser==false (like 2 bottom cameras):" +numImages[4]);
    		if (DISTORTION_CALIBRATION_DATA.gIS==null) {
    			int numImageSets=DISTORTION_CALIBRATION_DATA.buildImageSets(false); // from scratch
    			if (DEBUG_LEVEL>0) System.out.println("Image set was empty, built a new one with "+numImageSets+" image sets (\"panoramas\"): ");
+50 −11
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@ import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.apache.commons.configuration.ConfigurationException;
@@ -679,7 +680,14 @@ import org.apache.commons.configuration.XMLConfiguration;
        		if (this.eyesisCameraParameters.numStations>1){
        			sb.append("Station "+stationNumber+" W="+(100*this.eyesisCameraParameters.stationWeight[stationNumber])+"%");  for (int i=-1;i<numSubCameras;i++) sb.append("\t===");  sb.append("\n");
        		}
        		
        		int [] lensDistortionModels=new int [numSubCameras];
        		for (int i=0;i<numSubCameras;i++) lensDistortionModels[i]=eyesisCameraParameters.getLensDistortionModel(stationNumber,i);
        		sb.append("Lens Distortion Model\t");
        		for (int i=0;i<numSubCameras;i++) sb.append("\t"+lensDistortionModels[i]);
        		sb.append("\n");
        		double [][] cameraPars=new double [numSubCameras][];
            	
            	for (int i=0;i<numSubCameras;i++) cameraPars[i]=eyesisCameraParameters.getParametersVector(stationNumber,i);
            	// parameters same order as in this
            	for (int n=0;n<cameraPars[0].length;n++) if (isSubcameraParameter(n) && isIntrinsicParameter(n)){
@@ -935,8 +943,10 @@ import org.apache.commons.configuration.XMLConfiguration;
            	}
        	}
        	int numNoVignetting=0;
        	int disabledNoLaser=0;
        	for (int i=0;i<this.gIP.length;i++){
        		int stationNumber=this.gIP[i].getStationNumber();
        		boolean enableNoLaser=this.eyesisCameraParameters.getEnableNoLaser(stationNumber,this.gIP[i].channel);
        		boolean wasEnabled=this.gIP[i].enabled;
        		if (resetHinted) this.gIP[i].hintedMatch=-1; // undefined
        		if (Double.isNaN(this.gIP[i].gridPeriod) ||
@@ -949,15 +959,17 @@ import org.apache.commons.configuration.XMLConfiguration;
        			if (
        					(this.gIP[i].matchedPointers>=minPointers) ||
        					((this.gIP[i].matchedPointers>0) && (this.gIP[i].hintedMatch>0)) || // orientation and one pointer
        					(this.gIP[i].hintedMatch>1)) {
        					((this.gIP[i].hintedMatch>1) && enableNoLaser)) { // do not use bottom images w/o matched pointers
        				// before enabling - copy orientation from gIS  
        				if (!this.gIP[i].enabled && (gIS_index[i]>=0)){ 
        					if (!Double.isNaN(this.gIS[gIS_index[i]].goniometerTilt))	setGH(i,this.gIS[gIS_index[i]].goniometerTilt );
        					if (!Double.isNaN(this.gIS[gIS_index[i]].goniometerAxial))	setGA(i,this.gIS[gIS_index[i]].goniometerAxial );
        				}
        				this.gIP[i].enabled=true;
        			} else this.gIP[i].enabled=false;
        			if ((this.gIP[i].hintedMatch>1) && !enableNoLaser && (this.gIP[i].matchedPointers==0)){
        				disabledNoLaser++;
        			}
        			else this.gIP[i].enabled=false;
        		}
        			
        		if (disableNoVignetting) {
@@ -977,7 +989,7 @@ import org.apache.commons.configuration.XMLConfiguration;
            	if (this.gIP[i].newEnabled) newEnabled++;
        	}
        	// may need buildImageSets
        	int [] result={numEnabled,newEnabled,numNoVignetting,notEnoughNodes};
        	int [] result={numEnabled,newEnabled,numNoVignetting,notEnoughNodes,disabledNoLaser};
        	return result;
        }
// TODO:
@@ -1277,7 +1289,26 @@ import org.apache.commons.configuration.XMLConfiguration;
        	return numEnabled;
        }

        
        int [] getStations(){
        	int [] result = new int [this.gIP.length];
        	for (int i=0;i<result.length;i++) result[i]=(this.gIP[i]!=null)?this.gIP[i].stationNumber:-1;
        	return result;
        }
        int [] getChannels(){
        	int [] result = new int [this.gIP.length];
        	for (int i=0;i<result.length;i++) result[i]=(this.gIP[i]!=null)?this.gIP[i].channel:-1;
        	return result;
        }
        int [] getMatchedPointers(){
        	int [] result = new int [this.gIP.length];
        	for (int i=0;i<result.length;i++) result[i]=(this.gIP[i]!=null)?this.gIP[i].matchedPointers:0;
        	return result;
        }
        int [] getHintedMatch(){
        	int [] result = new int [this.gIP.length];
        	for (int i=0;i<result.length;i++) result[i]=(this.gIP[i]!=null)?this.gIP[i].hintedMatch:-1;
        	return result;
        }
        
        boolean [] selectNewEnabled () {
        	boolean [] newEnabled=new boolean [this.gIP.length] ;
@@ -1285,14 +1316,22 @@ import org.apache.commons.configuration.XMLConfiguration;
        	return newEnabled;
        }

        boolean [] selectEnabled () {
        	boolean [] enabled=new boolean [this.gIP.length] ;
        	for (int i=0;i<this.gIP.length;i++) enabled[i]= (this.gIP[i]!=null) && this.gIP[i].enabled;
        	return enabled;
        }

        boolean [] selectEstimated (boolean enabledOnly) {
        	boolean [] estimated=new boolean [getNumImages()];
        	if (this.gIS==null) {
            	String msg="Image sets are not initialized";
        		IJ.showMessage("Error",msg);
        		throw new IllegalArgumentException (msg);
//        		throw new IllegalArgumentException (msg);
        		Arrays.fill(estimated, true);
            	return estimated;
        	}
        	
        	boolean [] estimated=new boolean [getNumImages()];
        	for (int i=0;i<estimated.length;i++) estimated[i]=false;
        	for (int i=0;i<this.gIS.length;i++)	if (this.gIS[i].imageSet!=null){
        		for (int j=0;j<this.gIS[i].imageSet.length;j++) if (this.gIS[i].imageSet[j]!=null) {
+26 −2
Original line number Diff line number Diff line
@@ -50,6 +50,7 @@ import Jama.Matrix;
// 1 - put commons-configuration-1.7.jar under ImageJ plugins directory (I used ImageJ-Elphel)
// 2 - in Eclipse project properties -> Build Path -> Libraries -> Add External jar
public class Distortions {
	final public double hintedMaxRelativeRadius=1.2; // make adjustable?
	private showDoubleFloatArrays SDFA_INSTANCE=new showDoubleFloatArrays(); // just for debugging?
//    int numInputs=27; // with A8...// 24;   // parameters in subcamera+...
//    int numOutputs=16; // with A8...//13;  // parameters in a single camera
@@ -3010,12 +3011,25 @@ For each point in the image
	 * @param v grid V (signed, 0 in the center)
	 * @return [7] {pX,pY,grid mask (binary), grid R, grid G, grid B, alpha}
	 */
	
	public double [] reprojectGridNode(
			LensDistortionParameters lensDistortionParameters,
			int numImg,
			int u, // grid signed u,v
			int v
			int v){
		double maxRelativeRadius=this.hintedMaxRelativeRadius; // make adjustable
		return  reprojectGridNode(
				lensDistortionParameters,
				numImg,
				u, // grid signed u,v
				v,
		       	maxRelativeRadius);
	}	
	public double [] reprojectGridNode(
			LensDistortionParameters lensDistortionParameters,
			int numImg,
			int u, // grid signed u,v
			int v,
	       	double maxRelativeRadius //=2.0;
	){
		int debugThreshold=1;
		int nChn=   this.fittingStrategy.distortionCalibrationData.gIP[numImg].channel;
@@ -3035,6 +3049,7 @@ For each point in the image
					XYZMP[0], // target point horizontal, positive - right,  mm
					XYZMP[1], // target point vertical,   positive - down,  mm
					XYZMP[2], // target point horizontal, positive - away from camera,  mm
					maxRelativeRadius, //
					false); // calculate derivatives, false - values only (NaN for behind points - only when false here)
			if (Double.isNaN(pXY[0][0])) {
				if (this.debugLevel>debugThreshold){
@@ -3094,6 +3109,7 @@ For each point in the image
			double goniometerAxial,     // Axial
			int  imageSet,
			boolean filterBorder){
		double maxRelativeRadius=this.hintedMaxRelativeRadius; // make adjustable
		int debugThreshold=2;
		// Get parameter vector (22) for the selected sensor, current Eyesisparameters and specified orientation angles 		
		double [] parVector=fittingStrategy.distortionCalibrationData.eyesisCameraParameters.getParametersVector(stationNumber,subCamera);
@@ -3155,6 +3171,7 @@ For each point in the image
						XYZM[0], // target point horizontal, positive - right,  mm
						XYZM[1], // target point vertical,   positive - down,  mm
						XYZM[2], // target point horizontal, positive - away from camera,  mm
						maxRelativeRadius,
						false); // calculate derivatives, false - values only (NaN for behind points - only when false here)
// verify the grid is inside the sensor area (may use sensor mask later too? probably not needed)
				// Now NaN if point is behind the sensor
@@ -5963,6 +5980,10 @@ List calibration
    	imp.setProperty("comment_entrancePupilForward",  "entrance pupil distance from the azimuth/radius/height, outwards in mm");
    	imp.setProperty("entrancePupilForward",  ""+entrancePupilForward); // currently global, decoders will use per-sensor
       	imp.setProperty("comment_defects", "Sensor hot/cold pixels list as x:y:difference");
       	
       	imp.setProperty("comment_lensDistortionModel", "Integer specifying lens distrotion model (0 - radial)");
       	imp.setProperty("lensDistortionModel", ""+subCam.lensDistortionModel);
       	
		for (int i=0;i<subCam.r_xy.length;i++){
			imp.setProperty("r_xy_"+i+"_x",subCam.r_xy[i][0]+"");
			imp.setProperty("r_xy_"+i+"_y",subCam.r_xy[i][1]+"");
@@ -6144,6 +6165,7 @@ List calibration
        		subCam.defectsDiff=null;
        	}
 // non-radial
        	if (imp.getProperty("lensDistortionModel")  !=null) subCam.lensDistortionModel= Integer.parseInt((String) imp.getProperty("lensDistortionModel"));
        	subCam.setDefaultNonRadial();
			for (int i=0;i<subCam.r_xy.length;i++) {
				if (imp.getProperty("r_xy_"+i+"_x")  !=null) subCam.r_xy[i][0]= Double.parseDouble((String) imp.getProperty("r_xy_"+i+"_x"));
@@ -9555,6 +9577,7 @@ M * V = B
        	System.out.println("this.lensDistortionParameters.distortionA="+IJ.d2s(this.lensDistortionParameters.distortionA, 5));
        	System.out.println("this.lensDistortionParameters.distortionB="+IJ.d2s(this.lensDistortionParameters.distortionB, 5));
        	System.out.println("this.lensDistortionParameters.distortionC="+IJ.d2s(this.lensDistortionParameters.distortionC, 5));
        	System.out.println("this.lensDistortionParameters.lensDistortionModel="+this.lensDistortionParameters.lensDistortionModel);
        	for (int i=0;i<this.lensDistortionParameters.r_xy.length;i++){
            	System.out.println("this.lensDistortionParameters.r_xy["+i+"][0]="+IJ.d2s(this.lensDistortionParameters.r_xy[i][0], 5));
            	System.out.println("this.lensDistortionParameters.r_xy["+i+"][1]="+IJ.d2s(this.lensDistortionParameters.r_xy[i][1], 5));
@@ -9760,6 +9783,7 @@ M * V = B
    	if (reCenterVertically){
    		eyesisCameraParameters.recenterVertically(channelMask, stationMask);
    		for (int i=0;i<channelMask.length;i++) channelMask[i]= true;
    		parameterMask[distortionCalibrationData.getParameterIndexByName("subcamHeight")] = true;
    	}
		
+72 −2
Original line number Diff line number Diff line
@@ -29,6 +29,14 @@ import org.apache.commons.configuration.XMLConfiguration;


    public  class EyesisCameraParameters{
    	final public String [] distortionModelDescriptions= {
    		"Radial model",
    		"Non radial with shift/elongation, non cummulative",
    		"Non radial with shift/elongation, cummulative",
    		"With non-radial polynomial terms"
    	};
    	final int [] distortionModels={0,100,101,200};
    	public int defaultLensDistortionModel=200;
    	public double [] goniometerHorizontal; // goniometer rotation around "horizontal" axis (tilting from the target - positive)
    	public double [] goniometerAxial; // goniometer rotation around Eyesis axis (clockwise in plan - positive 
    	public EyesisSubCameraParameters [][] eyesisSubCameras=null;
@@ -274,6 +282,13 @@ import org.apache.commons.configuration.XMLConfiguration;
    	}

    	public int getNumStations() {return this.numStations;}
    	public int getNumChannels() {
    		return getNumChannels(0);
    	}
    	public int getNumChannels(int numStation) {
    		return this.eyesisSubCameras[numStation].length;
    	}
//    	this.eyesisSubCameras[numStation].length
    	public EyesisCameraParameters () {} // just create new instance, all parameters data will be provided additionally
    	public EyesisCameraParameters (
    			int numStations,
@@ -685,7 +700,7 @@ import org.apache.commons.configuration.XMLConfiguration;
        			if (numSubCameras>0) {
        				initSubCameras(numStation, numSubCameras); // set array with default parameters
        				for (int i=0;i<numSubCameras;i++){
        					this.eyesisSubCameras[numStation][i].getProperties(prefix+numStation+"_subCamera_"+i+'.',properties);
        					this.eyesisSubCameras[numStation][i].getProperties(prefix+numStation+"_subCamera_"+i+'.',properties,i);
        				}
        			}
    			}
@@ -742,6 +757,10 @@ import org.apache.commons.configuration.XMLConfiguration;
//        	public double goniometerHorizontal; // goniometer rotation around "horizontal" axis (tilting from the target - positive)
//        	public double goniometerAxial; // goniometer rotation around Eyesis axis (clockwise in plan - positive 
//this.isTripod
    		String [] modelChoice=new String [distortionModelDescriptions.length+1];
    		modelChoice[0]="--- keep current ---";
    		for (int i=0;i<distortionModelDescriptions.length;i++) modelChoice[i+1]=distortionModelDescriptions[i];
    		gd.addChoice("Change camera distortion model for all channels", modelChoice, modelChoice[0]);
    		gd.addCheckbox("Tripod mode (first vertical axis, then horizontal), changes meaning of the next 2 fields",this.isTripod);
    		gd.addMessage("=== Camera parameters to be fitted ===");
    		for (int numStation=0;numStation<this.numStations;numStation++) {
@@ -801,6 +820,15 @@ import org.apache.commons.configuration.XMLConfiguration;
    	    WindowTools.addScrollBars(gd);
    		gd.showDialog();
    		if (gd.wasCanceled()) return -1;
    		int modelIndex=gd.getNextChoiceIndex()-1;
    		if (modelIndex>=0){
    			for (EyesisSubCameraParameters [] esps:this.eyesisSubCameras){
    				for (EyesisSubCameraParameters esp:esps){
    					esp.lensDistortionModel=distortionModels[modelIndex];
    				}
    			}
    		}

    		this.isTripod=                 gd.getNextBoolean();
    		for (int numStation=0;numStation<this.numStations;numStation++) {
    			if (this.numStations>1){
@@ -861,6 +889,8 @@ import org.apache.commons.configuration.XMLConfiguration;
        				gd.addNumericField("Channel "+numSubCam+" default weight",      subCam.channelWeightDefault, 5,8,"");
    				}
    				if (this.numStations>1) gd.addMessage("--- Station number "+numStation+" ---");
    				gd.addNumericField("Subcamera lens distortion model",               subCam.lensDistortionModel, 5,0,"");
    				gd.addCheckbox    ("Enable matching w/o laser pointers",            subCam.enableNoLaser);
    				gd.addNumericField("Subcamera azimuth",                             subCam.azimuth, 5,9,"degrees");
    				gd.addNumericField("Subcamera distance from the axis",              subCam.radius,  5,9,"mm");
    				gd.addNumericField("Subcamera height from the 'equator'",           subCam.height,  5,9,"mm");
@@ -930,6 +960,8 @@ import org.apache.commons.configuration.XMLConfiguration;
    		    		channelWeightDefault=gd.getNextNumber();
    				}
    				subCam.channelWeightDefault= channelWeightDefault; // assign to all stations
    				subCam.lensDistortionModel= (int) gd.getNextNumber();
    				subCam.enableNoLaser =            gd.getNextBoolean();
    				subCam.azimuth=         gd.getNextNumber();
    				subCam.radius=          gd.getNextNumber();
    				subCam.height=          gd.getNextNumber();
@@ -998,6 +1030,26 @@ import org.apache.commons.configuration.XMLConfiguration;
    		}
    		return true;
    	}
    	public int getLensDistortionModel(int stationNumber,int subCamNumber){
        	if (
        			(this.eyesisSubCameras==null) ||
        			(this.numStations<=stationNumber) ||
        			(this.eyesisSubCameras.length<=stationNumber) ||
        			(this.eyesisSubCameras[stationNumber].length<=subCamNumber)) throw new IllegalArgumentException
            ("Nonexistent subcamera "+subCamNumber+ " and/or station number="+stationNumber+" this.numStations="+this.numStations+" this.eyesisSubCameras.length="+this.eyesisSubCameras.length);
        	EyesisSubCameraParameters subCam=this.eyesisSubCameras[stationNumber][subCamNumber];
        	return subCam.lensDistortionModel;
    	}
    	boolean getEnableNoLaser(int stationNumber,int subCamNumber){
        	if (
        			(this.eyesisSubCameras==null) ||
        			(this.numStations<=stationNumber) ||
        			(this.eyesisSubCameras.length<=stationNumber) ||
        			(this.eyesisSubCameras[stationNumber].length<=subCamNumber)) throw new IllegalArgumentException
            ("Nonexistent subcamera "+subCamNumber+ " and/or station number="+stationNumber+" this.numStations="+this.numStations+" this.eyesisSubCameras.length="+this.eyesisSubCameras.length);
        	EyesisSubCameraParameters subCam=this.eyesisSubCameras[stationNumber][subCamNumber];
        	return subCam.enableNoLaser;
    	}
        /**
         * 
         * @param eyesisCameraParameters current parameters of the Eyesis camera, subcameras and goniometer
@@ -1191,6 +1243,8 @@ import org.apache.commons.configuration.XMLConfiguration;
    		for (int i=0;i<numSubCameras;i++)  this.eyesisSubCameras[numStation][i]=null;
    		if (numSubCameras==3) {
    			this.eyesisSubCameras[numStation][0]=new EyesisSubCameraParameters( //TODO:  modify for lens adjustment defaults?
    					defaultLensDistortionModel,
    					true,
    					0.0, // double azimuth, // azimuth of the lens entrance pupil center, degrees, clockwise looking from top
    					52.53, // double radius,  // mm, distance from the rotation axis
    					34.64, // double height,  // mm, up (was downwards) - from the origin point
@@ -1213,6 +1267,8 @@ import org.apache.commons.configuration.XMLConfiguration;
    					null,  // elongation for c,b,a,a5,a6,a7,a8
    					1.0); //channelWeightDefault
    			this.eyesisSubCameras[numStation][1]=new EyesisSubCameraParameters( //TODO:  modify for lens adjustment defaults?
    					defaultLensDistortionModel,
    					true,
    					30.0, // double azimuth, // azimuth of the lens entrance pupil center, degrees, clockwise looking from top
    					60.0, // double radius,  // mm, distance from the rotation axis
    					-17.32, // double height,  // mm, up (was downwards) - from the origin point
@@ -1235,6 +1291,8 @@ import org.apache.commons.configuration.XMLConfiguration;
    					null,  // elongation for c,b,a,a5,a6,a7,a8
    					1.0); //channelWeightDefault
    			this.eyesisSubCameras[numStation][2]=new EyesisSubCameraParameters( //TODO:  modify for lens adjustment defaults?
    					defaultLensDistortionModel,
    					true,
    					-30.0, // double azimuth, // azimuth of the lens entrance pupil center, degrees, clockwise looking from top
    					60.0, // double radius,  // mm, distance from the rotation axis
    					-17.32, // double height,  // mm, up (was downwards) - from the origin point
@@ -1258,6 +1316,8 @@ import org.apache.commons.configuration.XMLConfiguration;
    					1.0); //channelWeightDefault
    		} else if (numSubCameras==1) {
    			this.eyesisSubCameras[numStation][0]=new EyesisSubCameraParameters( //TODO:  modify for lens adjustment defaults?
    					defaultLensDistortionModel,
    					true,
    					0.0, // double azimuth, // azimuth of the lens entrance pupil center, degrees, clockwise looking from top
    					0.0, // double radius,  // mm, distance from the rotation axis
    					0.0, // double height,  // mm, up (was downwards) - from the origin point
@@ -1282,6 +1342,8 @@ import org.apache.commons.configuration.XMLConfiguration;
    		} else {
    			// default setup for the 26 sub-cameras	    		
    			for (int i=0;i<8;i++) if (i<numSubCameras) 	this.eyesisSubCameras[numStation][i]=new EyesisSubCameraParameters( // top 8 cameras
    					defaultLensDistortionModel,
    					true,
    					45.0*i,      // double azimuth, // azimuth of the lens entrance pupil center, degrees, clockwise looking from top
    					41.540,      // double radius,  // mm, distance from the rotation axis
    					42.883,      // double height,  // mm, up (was downwards?) - from the origin point
@@ -1304,6 +1366,8 @@ import org.apache.commons.configuration.XMLConfiguration;
    					null,  // elongation for c,b,a,a5,a6,a7,a8
    					1.0); //channelWeightDefault
    			for (int i=8;i<16;i++) if (i<numSubCameras) 	this.eyesisSubCameras[numStation][i]=new EyesisSubCameraParameters( // middle 8 cameras
    					defaultLensDistortionModel,
    					true,
    					45.0*(i-8),  // double azimuth, // azimuth of the lens entrance pupil center, degrees, clockwise looking from top
    					54.525,      // double radius,  // mm, distance from the rotation axis
    					0.0, // double height,  // mm, up (was downwards) - from the origin point
@@ -1326,6 +1390,8 @@ import org.apache.commons.configuration.XMLConfiguration;
    					null,  // elongation for c,b,a,a5,a6,a7,a8
    					1.0); //channelWeightDefault
    			for (int i=16;i<24;i++) if (i<numSubCameras) 	this.eyesisSubCameras[numStation][i]=new EyesisSubCameraParameters( // bottom eight cameras
    					defaultLensDistortionModel,
    					true,
    					45.0*(i-16), // double azimuth, // azimuth of the lens entrance pupil center, degrees, clockwise looking from top
    					41.540,      // double radius,  // mm, distance from the rotation axis
    					-42.883,     // double height,  // mm, up (was downwards?) - from the origin point
@@ -1348,6 +1414,8 @@ import org.apache.commons.configuration.XMLConfiguration;
    					null,  // elongation for c,b,a,a5,a6,a7,a8
    					1.0); //channelWeightDefault
    			if (24<numSubCameras) 	this.eyesisSubCameras[numStation][24]=new EyesisSubCameraParameters(
    					defaultLensDistortionModel,
    					false,
    					90,      // double azimuth, // azimuth of the lens entrance pupil center, degrees, clockwise looking from top
    					12.025,  // double radius,  // mm, distance from the rotation axis
    					-807.0,  // double height,  // mm, up - from the origin point
@@ -1370,6 +1438,8 @@ import org.apache.commons.configuration.XMLConfiguration;
    					null,  // elongation for c,b,a,a5,a6,a7,a8
    					8.0); //channelWeightDefault (was 4)
    			if (25<numSubCameras) 	this.eyesisSubCameras[numStation][25]=new EyesisSubCameraParameters(
    					defaultLensDistortionModel,
    					false,
    					270,     // double azimuth, // azimuth of the lens entrance pupil center, degrees, clockwise looking from top
    					12.025,  // double radius,  // mm, distance from the rotation axis
    					-841.0,  // double height,  // mm, up - from the origin point
+22 −0

File changed.

Preview size limit exceeded, changes collapsed.

Loading