Commit c9ee2c7d authored by Andrey Filippov's avatar Andrey Filippov

working on cartesian-defined multi-cameras

parent 1e8f23fb
...@@ -411,7 +411,8 @@ public static MatchSimulatedPattern.DistortionParameters DISTORTION =new MatchSi ...@@ -411,7 +411,8 @@ public static MatchSimulatedPattern.DistortionParameters DISTORTION =new MatchSi
// public static double [] defaultGoniometerPosition={0.0, 0.0, 2360}; // public static double [] defaultGoniometerPosition={0.0, 0.0, 2360};
public static EyesisCameraParameters EYESIS_CAMERA_PARAMETERS=new EyesisCameraParameters( public static EyesisCameraParameters EYESIS_CAMERA_PARAMETERS=new EyesisCameraParameters(
1, //int numStations, 1, //int numStations,
true, //false, // boolean isTripod=false; // when true - make goniometerHorizontal rotation around "vertical" axis and "goniometerAxial" - around true, //false, // boolean isTripod=false; // when true - make goniometerHorizontal rotation around "vertical" axis and "goniometerAxial" - around
false, // boolean cartesian,
0.0, // double goniometerHorizontal, // goniometer rotation around "horizontal" axis (tilting from the target - positive) 0.0, // double goniometerHorizontal, // goniometer rotation around "horizontal" axis (tilting from the target - positive)
0.0, // double goniometerAxial, // goniometer rotation around Eyesis axis (clockwise in plan - positive 0.0, // double goniometerAxial, // goniometer rotation around Eyesis axis (clockwise in plan - positive
1, // 26, // 1, // int numSubCameras, 1, // 26, // 1, // int numSubCameras,
...@@ -55,7 +55,7 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -55,7 +55,7 @@ import org.apache.commons.configuration.XMLConfiguration;
// saves / restores them from a disk file // saves / restores them from a disk file
public class DistortionCalibrationData{ public class DistortionCalibrationData{
public String pathName=null; public String pathName=null;
public EyesisCameraParameters eyesisCameraParameters; public EyesisCameraParameters eyesisCameraParameters; // has "cartesian"
// public int numStations=1; // number of differnt camera tripod/goniometer stations (locations) // public int numStations=1; // number of differnt camera tripod/goniometer stations (locations)
public int numSubCameras=1; public int numSubCameras=1;
public int numPointers=4; // maximal number of pointers to look for public int numPointers=4; // maximal number of pointers to look for
...@@ -446,6 +446,20 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -446,6 +446,20 @@ import org.apache.commons.configuration.XMLConfiguration;
} }
} }
public int index_right; // = getParameterIndexByName("subcamRight"); // 0
public int index_forward; // = getParameterIndexByName("subcamForward"); // 1
public int index_azimuth; // = getParameterIndexByName("subcamAzimuth"); // 0
public int index_heading; // = getParameterIndexByName("subcamHeading"); // 3
public int index_elevation; // = getParameterIndexByName("subcamElevation"); // 4
public int index_gh; //= getParameterIndexByName("goniometerHorizontal"); // 6
public int index_ga; //= getParameterIndexByName("goniometerAxial"); // 7
public String [][] parameterDescriptionsCartesian ={ // may be shorter, have null rows, shorter rows - will use parameterDescriptions for missing data
{"subcamRight", "Subcamera distance from the vertical rotation axis, positive - right looking to the target","mm","S","E"}, // 0
{"subcamForward", "Subcamera distance from the vertical rotation axis, positive - towards the target","mm","S","E"}, // 1
null, // 2
{"subcamHeading", "Optical axis heading (0 - to the target, positive - CW looking from top)","degrees","S","E"}}; // 3
public String [][] parameterDescriptions ={ public String [][] parameterDescriptions ={
{"subcamAzimuth", "Subcamera azimuth, clockwise looking from top","degrees","S","E"}, // 0 {"subcamAzimuth", "Subcamera azimuth, clockwise looking from top","degrees","S","E"}, // 0
{"subcamDistance", "Subcamera distance from the axis","mm","S","E"}, // 1 {"subcamDistance", "Subcamera distance from the axis","mm","S","E"}, // 1
...@@ -508,14 +522,47 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -508,14 +522,47 @@ import org.apache.commons.configuration.XMLConfiguration;
{"subcamElong_A8_o", "Orthogonal elongation for r^8","relative","S","I"}, // 51 51 (49) {"subcamElong_A8_o", "Orthogonal elongation for r^8","relative","S","I"}, // 51 51 (49)
{"subcamElong_A8_d", "Diagonal elongation for r^8","relative","S","I"} // 52 52 (50) {"subcamElong_A8_d", "Diagonal elongation for r^8","relative","S","I"} // 52 52 (50)
}; };
public String [] channelSuffixes={ // natural order (same as array indices, may be modified to camera/subcamera public String [] channelSuffixes={ // natural order (same as array indices, may be modified to camera/subcamera
"00","01","02","03","04","05","06","07","08","09", "00","01","02","03","04","05","06","07","08","09",
"10","11","12","13","14","15","16","17","18","19", "10","11","12","13","14","15","16","17","18","19",
"20","21","22","23","24","25","26","27","28","29"}; "20","21","22","23","24","25","26","27","28","29"};
public void setupIndices(){ // should be always called during initialization !
this.index_right = getParameterIndexByName("subcamRight"); // 0 may be -1 if !cartesian
this.index_forward = getParameterIndexByName("subcamForward"); // 1 may be -1 if !cartesian
this.index_azimuth = getParameterIndexByName("subcamAzimuth"); // 0
this.index_heading = getParameterIndexByName("subcamAzimuth"); // 3
this.index_elevation = getParameterIndexByName("subcamElevation"); // 4
this.index_gh= getParameterIndexByName("goniometerHorizontal"); // 6
this.index_ga= getParameterIndexByName("goniometerAxial"); // 7
}
public boolean isCartesian(){
return (eyesisCameraParameters !=null) && eyesisCameraParameters.cartesian;
}
public String descrField(int i,int j){
if (
(eyesisCameraParameters !=null) &&
eyesisCameraParameters.cartesian &&
(i < this.parameterDescriptionsCartesian.length) &&
(this.parameterDescriptionsCartesian[i]!=null) &&
(j<this.parameterDescriptionsCartesian[i].length)){
return this.parameterDescriptionsCartesian[i][j];
}
return this.parameterDescriptions[i][j];
}
public boolean isNonRadial(int index){ public boolean isNonRadial(int index){
return parameterDescriptions[index][0].startsWith("subcamEccen_") || parameterDescriptions[index][0].startsWith("subcamElong_"); return parameterDescriptions[index][0].startsWith("subcamEccen_") || parameterDescriptions[index][0].startsWith("subcamElong_");
} }
public int getParameterIndexByName(String name){ public int getParameterIndexByName(String name){
if (isCartesian()){
for (int i=0;i<this.parameterDescriptionsCartesian.length;i++) if ((this.parameterDescriptionsCartesian[i]!=null) && this.parameterDescriptionsCartesian[i][0].equals(name)){
return i;
}
}
for (int i=0;i<this.parameterDescriptions.length;i++) if (this.parameterDescriptions[i][0].equals(name)){ for (int i=0;i<this.parameterDescriptions.length;i++) if (this.parameterDescriptions[i][0].equals(name)){
return i; return i;
} }
...@@ -573,6 +620,7 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -573,6 +620,7 @@ import org.apache.commons.configuration.XMLConfiguration;
PatternParameters patternParameters, PatternParameters patternParameters,
EyesisCameraParameters eyesisCameraParameters EyesisCameraParameters eyesisCameraParameters
) { ) {
setupIndices();
this.eyesisCameraParameters=eyesisCameraParameters; this.eyesisCameraParameters=eyesisCameraParameters;
int numSubCameras=(eyesisCameraParameters==null)?1:eyesisCameraParameters.eyesisSubCameras[0].length; int numSubCameras=(eyesisCameraParameters==null)?1:eyesisCameraParameters.eyesisSubCameras[0].length;
this.numSubCameras=numSubCameras; this.numSubCameras=numSubCameras;
...@@ -581,9 +629,6 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -581,9 +629,6 @@ import org.apache.commons.configuration.XMLConfiguration;
for (int i=0;i<stationFilenames.length;i++) numFiles+=stationFilenames[i].length; for (int i=0;i<stationFilenames.length;i++) numFiles+=stationFilenames[i].length;
this.gIP=new GridImageParameters[numFiles]; this.gIP=new GridImageParameters[numFiles];
// this.paths=new String [filenames.length];
// this.timestamps=new double [filenames.length];
// this.channels= new int [filenames.length];
int numFile=0; int numFile=0;
for (int numStation=0;numStation<stationFilenames.length;numStation++){ for (int numStation=0;numStation<stationFilenames.length;numStation++){
...@@ -622,7 +667,6 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -622,7 +667,6 @@ import org.apache.commons.configuration.XMLConfiguration;
} }
} }
// Create parameters array // Create parameters array
// this.pars=new double[this.gIP.length][parameterDescriptions.length];
initPars (this.gIP.length,parameterDescriptions.length); initPars (this.gIP.length,parameterDescriptions.length);
if (this.debugLevel>1) System.out.println("setupDistortionCalibrationData(): Resetting this.gIS"); if (this.debugLevel>1) System.out.println("setupDistortionCalibrationData(): Resetting this.gIS");
this.gIS=null; // so it will be initialized in readAllGrids() this.gIS=null; // so it will be initialized in readAllGrids()
...@@ -630,12 +674,11 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -630,12 +674,11 @@ import org.apache.commons.configuration.XMLConfiguration;
// no orientation // no orientation
} }
// return (Integer) this.images[sensorNum].getProperty("POINTERS");
public DistortionCalibrationData ( public DistortionCalibrationData (
EyesisCameraParameters eyesisCameraParameters EyesisCameraParameters eyesisCameraParameters
) { ) {
setupIndices();
int numSubCameras=(eyesisCameraParameters==null)?1:eyesisCameraParameters.eyesisSubCameras[0].length; int numSubCameras=(eyesisCameraParameters==null)?1:eyesisCameraParameters.eyesisSubCameras[0].length;
this.numSubCameras=numSubCameras; this.numSubCameras=numSubCameras;
...@@ -648,6 +691,7 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -648,6 +691,7 @@ import org.apache.commons.configuration.XMLConfiguration;
PatternParameters patternParameters, PatternParameters patternParameters,
EyesisCameraParameters eyesisCameraParameters EyesisCameraParameters eyesisCameraParameters
) { ) {
setupIndices();
int numSubCameras=(eyesisCameraParameters==null)?1:eyesisCameraParameters.eyesisSubCameras[0].length; int numSubCameras=(eyesisCameraParameters==null)?1:eyesisCameraParameters.eyesisSubCameras[0].length;
this.numSubCameras=numSubCameras; this.numSubCameras=numSubCameras;
this.eyesisCameraParameters=eyesisCameraParameters; this.eyesisCameraParameters=eyesisCameraParameters;
...@@ -745,7 +789,6 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -745,7 +789,6 @@ import org.apache.commons.configuration.XMLConfiguration;
} }
// Create parameters array // Create parameters array
// this.pars=new double[images.length][parameterDescriptions.length];
initPars (this.gIP.length,parameterDescriptions.length); initPars (this.gIP.length,parameterDescriptions.length);
this.gIS=null; // so it will be created in readAllGrids() this.gIS=null; // so it will be created in readAllGrids()
readAllGrids(patternParameters); // prepare grid parameters for LMA readAllGrids(patternParameters); // prepare grid parameters for LMA
...@@ -1141,9 +1184,12 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -1141,9 +1184,12 @@ import org.apache.commons.configuration.XMLConfiguration;
} }
} }
if (bestRating>0){ if (bestRating>0){
EyesisSubCameraParameters esp = this.eyesisCameraParameters.eyesisSubCameras[stationNumber][bestChannel];
if (overwriteAll || Double.isNaN(this.gIS[i].goniometerAxial)){ if (overwriteAll || Double.isNaN(this.gIS[i].goniometerAxial)){
// System.out.println("setInitialOrientation("+overwriteAll+"), Double.isNaN(this.gIS["+i+"].goniometerAxial)="+Double.isNaN(this.gIS[i].goniometerAxial)); // System.out.println("setInitialOrientation("+overwriteAll+"), Double.isNaN(this.gIS["+i+"].goniometerAxial)="+Double.isNaN(this.gIS[i].goniometerAxial));
this.gIS[i].goniometerAxial=-this.eyesisCameraParameters.eyesisSubCameras[stationNumber][bestChannel].azimuth;
double subcam_heading = (esp.heading + (esp.cartesian? 0: esp.azimuth));
this.gIS[i].goniometerAxial=-subcam_heading;
for (int j=0;j<this.gIS[i].imageSet.length;j++) if (this.gIS[i].imageSet[j]!=null) setGA(this.gIS[i].imageSet[j].imgNumber,this.gIS[i].goniometerAxial); for (int j=0;j<this.gIS[i].imageSet.length;j++) if (this.gIS[i].imageSet[j]!=null) setGA(this.gIS[i].imageSet[j].imgNumber,this.gIS[i].goniometerAxial);
this.gIS[i].orientationEstimated=true; this.gIS[i].orientationEstimated=true;
if (this.debugLevel>1) { if (this.debugLevel>1) {
...@@ -1152,7 +1198,7 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -1152,7 +1198,7 @@ import org.apache.commons.configuration.XMLConfiguration;
} }
if (overwriteAll || Double.isNaN(this.gIS[i].goniometerTilt )){ if (overwriteAll || Double.isNaN(this.gIS[i].goniometerTilt )){
// System.out.println("setInitialOrientation("+overwriteAll+"), Double.isNaN(this.gIS["+i+"].goniometerTilt)="+Double.isNaN(this.gIS[i].goniometerTilt)); // System.out.println("setInitialOrientation("+overwriteAll+"), Double.isNaN(this.gIS["+i+"].goniometerTilt)="+Double.isNaN(this.gIS[i].goniometerTilt));
this.gIS[i].goniometerTilt= -this.eyesisCameraParameters.eyesisSubCameras[stationNumber][bestChannel].theta; this.gIS[i].goniometerTilt= -esp.theta;
for (int j=0;j<this.gIS[i].imageSet.length;j++) if (this.gIS[i].imageSet[j]!=null) setGH(this.gIS[i].imageSet[j].imgNumber,this.gIS[i].goniometerTilt); for (int j=0;j<this.gIS[i].imageSet.length;j++) if (this.gIS[i].imageSet[j]!=null) setGH(this.gIS[i].imageSet[j].imgNumber,this.gIS[i].goniometerTilt);
this.gIS[i].orientationEstimated=true; this.gIS[i].orientationEstimated=true;
if (this.debugLevel>1) { if (this.debugLevel>1) {
...@@ -1671,6 +1717,7 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -1671,6 +1717,7 @@ import org.apache.commons.configuration.XMLConfiguration;
EyesisCameraParameters eyesisCameraParameters, EyesisCameraParameters eyesisCameraParameters,
EyesisAberrations.AberrationParameters aberrationParameters, EyesisAberrations.AberrationParameters aberrationParameters,
ImagePlus[] gridImages ){ // null - use specified files ImagePlus[] gridImages ){ // null - use specified files
setupIndices();
String [] extensions={".dcal-xml","-distcal.xml"}; String [] extensions={".dcal-xml","-distcal.xml"};
CalibrationFileManagement.MultipleExtensionsFileFilter parFilter = new CalibrationFileManagement.MultipleExtensionsFileFilter("",extensions,"Distortion calibration *.dcal-xml files"); CalibrationFileManagement.MultipleExtensionsFileFilter parFilter = new CalibrationFileManagement.MultipleExtensionsFileFilter("",extensions,"Distortion calibration *.dcal-xml files");
String pathname=CalibrationFileManagement.selectFile( String pathname=CalibrationFileManagement.selectFile(
...@@ -1732,7 +1779,7 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -1732,7 +1779,7 @@ import org.apache.commons.configuration.XMLConfiguration;
} }
*/ */
public void setFromXML(String pathname, public void setFromXML(String pathname,
EyesisCameraParameters eyesisCameraParameters, EyesisCameraParameters eyesisCameraParameters, // should have cartesian set
EyesisAberrations.AberrationParameters aberrationParameters) { EyesisAberrations.AberrationParameters aberrationParameters) {
this.eyesisCameraParameters=eyesisCameraParameters; this.eyesisCameraParameters=eyesisCameraParameters;
...@@ -1763,9 +1810,13 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -1763,9 +1810,13 @@ import org.apache.commons.configuration.XMLConfiguration;
this.gIS[index].stationNumber= Integer.parseInt(sub.getString("stationNumber")); this.gIS[index].stationNumber= Integer.parseInt(sub.getString("stationNumber"));
int minIndex= this.gIS[index].getMinIndex(); int minIndex= this.gIS[index].getMinIndex();
int maxIndexPlusOne=this.gIS[index].getMaxIndexPlusOne(); int maxIndexPlusOne=this.gIS[index].getMaxIndexPlusOne();
for (int j=minIndex;j<maxIndexPlusOne;j++) if (sub.getString(parameterDescriptions[j][0])!=null) { for (int j=minIndex;j<maxIndexPlusOne;j++){
this.gIS[index].setParameterValue(j,Double.parseDouble(sub.getString(parameterDescriptions[j][0])), false); // if (sub.getString(parameterDescriptions[j][0])!=null) {
if (sub.getString(descrField(j,0)) != null) {
this.gIS[index].setParameterValue(j,Double.parseDouble(sub.getString(descrField(j,0))), false);
}
} }
if (sub.getString("orientationEstimated")!=null) { if (sub.getString("orientationEstimated")!=null) {
this.gIS[i].orientationEstimated=Boolean.parseBoolean(sub.getString("orientationEstimated")); this.gIS[i].orientationEstimated=Boolean.parseBoolean(sub.getString("orientationEstimated"));
/* System.out.println(i+": restored orientationEstimated="+this.gIS[i].orientationEstimated+ /* System.out.println(i+": restored orientationEstimated="+this.gIS[i].orientationEstimated+
...@@ -1802,14 +1853,10 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -1802,14 +1853,10 @@ import org.apache.commons.configuration.XMLConfiguration;
// if (aberrationParameters.trustEnabled && this.gIP[i].enabled) this.gIP[i].hintedMatch=2; // trusted // if (aberrationParameters.trustEnabled && this.gIP[i].enabled) this.gIP[i].hintedMatch=2; // trusted
if (aberrationParameters.trustEnabled) this.gIP[i].hintedMatch= this.gIP[i].enabled?2:-1; // trusted and only trusted to enabled if (aberrationParameters.trustEnabled) this.gIP[i].hintedMatch= this.gIP[i].enabled?2:-1; // trusted and only trusted to enabled
// if (sub.getString("setNumber")!=null) {
// this.gIP[i].setNumber=Integer.parseInt(sub.getString("setNumber"));
// } else {
// this.gIP[i].setNumber=-1;
// }
for (int j=0;j<this.parameterDescriptions.length;j++){ for (int j=0;j<this.parameterDescriptions.length;j++){
if (sub.getString(parameterDescriptions[j][0])!=null) // if (sub.getString(parameterDescriptions[j][0])!=null)
this.pars[i][j] = Double.parseDouble(sub.getString(parameterDescriptions[j][0])); if (sub.getString(descrField(j,0))!=null)
this.pars[i][j] = Double.parseDouble(sub.getString(descrField(j,0)));
else else
if (isNonRadial(j)){ if (isNonRadial(j)){
this.pars[i][j] = 0.0; // old calibration files without non-radial parameters this.pars[i][j] = 0.0; // old calibration files without non-radial parameters
...@@ -1861,7 +1908,8 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -1861,7 +1908,8 @@ import org.apache.commons.configuration.XMLConfiguration;
this.gIS[is].setParameterValue(pi,parVal,false); this.gIS[is].setParameterValue(pi,parVal,false);
} }
if (differs){ if (differs){
System.out.println("ImageSet #"+is+": "+parameterDescriptions[j][0] +" has different values for individual images, skipping"); // System.out.println("ImageSet #"+is+": "+parameterDescriptions[j][0] +" has different values for individual images, skipping");
System.out.println("ImageSet #"+is+": "+descrField(j,0) +" has different values for individual images, skipping");
} }
} }
} }
...@@ -1922,7 +1970,7 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -1922,7 +1970,7 @@ import org.apache.commons.configuration.XMLConfiguration;
hConfig.addProperty("file.gridShiftY",UVShiftRot[1]); hConfig.addProperty("file.gridShiftY",UVShiftRot[1]);
hConfig.addProperty("file.gridRotate",UVShiftRot[2]); hConfig.addProperty("file.gridRotate",UVShiftRot[2]);
for (int j=0;j<this.parameterDescriptions.length;j++){ for (int j=0;j<this.parameterDescriptions.length;j++){
hConfig.addProperty("file."+parameterDescriptions[j][0],this.pars[i][j]); hConfig.addProperty("file."+descrField(j,0),this.pars[i][j]);
} }
} }
// save image sets // save image sets
...@@ -1934,7 +1982,7 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -1934,7 +1982,7 @@ import org.apache.commons.configuration.XMLConfiguration;
hConfig.addProperty("set.orientationEstimated",this.gIS[i].orientationEstimated); hConfig.addProperty("set.orientationEstimated",this.gIS[i].orientationEstimated);
double [] vector = this.gIS[i].updateParameterVectorFromSet(null); // unused parameters will be NaN double [] vector = this.gIS[i].updateParameterVectorFromSet(null); // unused parameters will be NaN
for (int j=0;j<vector.length;j++) if (!Double.isNaN(vector[j])){ for (int j=0;j<vector.length;j++) if (!Double.isNaN(vector[j])){
hConfig.addProperty("set."+parameterDescriptions[j][0],vector[j]); hConfig.addProperty("set."+descrField(j,0),vector[j]);
} }
} }
...@@ -2149,7 +2197,7 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -2149,7 +2197,7 @@ import org.apache.commons.configuration.XMLConfiguration;
this.debugLevel+(thisDebug?3:0), this.debugLevel+(thisDebug?3:0),
thisDebug?("fixBad-"+fileNumber):null thisDebug?("fixBad-"+fileNumber):null
); );
if (this.debugLevel>1) { if (this.debugLevel>-1) {
if (numBadNodes>0) if (numBadNodes>0)
System.out.print(" -- replaced "+numBadNodes+" bad grid nodes"); System.out.print(" -- replaced "+numBadNodes+" bad grid nodes");
int [] uvrot=this.gIP[fileNumber].getUVShiftRot(); int [] uvrot=this.gIP[fileNumber].getUVShiftRot();
...@@ -2671,14 +2719,20 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -2671,14 +2719,20 @@ import org.apache.commons.configuration.XMLConfiguration;
return this.gIP[numImg]; return this.gIP[numImg];
} }
public double [] getAzEl(int imgNum){ // get sensor azimuth and elevation DANGEROUS - absolute indices of parameters // next is just for goniometer - use elevation and heading for cartesian mode?
public double [] getHeadEl(int imgNum){ // get sensor heading +(azimuth) and elevation
if ((imgNum<0) || (imgNum>=this.pars.length)) { if ((imgNum<0) || (imgNum>=this.pars.length)) {
String msg="There are only "+this.pars.length+" images defined, requested #"+imgNum; String msg="There are only "+this.pars.length+" images defined, requested #"+imgNum;
IJ.showMessage("Error",msg); IJ.showMessage("Error",msg);
throw new IllegalArgumentException (msg); throw new IllegalArgumentException (msg);
} }
double [] azel={this.pars[imgNum][0],this.pars[imgNum][4]}; double [] headel={this.pars[imgNum][index_heading],this.pars[imgNum][index_elevation]};
return azel; if (!isCartesian()) {
headel[0] += this.pars[imgNum][index_azimuth];
}
System.out.println("getHeadEl("+imgNum+") "+isCartesian()+" -> "+headel[0]+"/"+ headel[1]+", "+this.pars[imgNum][index_azimuth]+","+
this.pars[imgNum][index_heading]+", "+this.pars[imgNum][index_elevation]);
return headel;
} }
// set goniometer horizontal axis angle and goniometer axial angles in all images // set goniometer horizontal axis angle and goniometer axial angles in all images
public void setGHGA(double gh, double ga){ public void setGHGA(double gh, double ga){
...@@ -2689,21 +2743,21 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -2689,21 +2743,21 @@ import org.apache.commons.configuration.XMLConfiguration;
setGA(imgNum, ga); setGA(imgNum, ga);
} }
public void setGH(int numImg, double gh){ public void setGH(int numImg, double gh){
this.pars[numImg][6]=gh; this.pars[numImg][index_gh]=gh;
if (this.gIP[numImg].gridImageSet!=null) this.gIP[numImg].gridImageSet.goniometerTilt= gh; if (this.gIP[numImg].gridImageSet!=null) this.gIP[numImg].gridImageSet.goniometerTilt= gh;
} }
public void setGA(int numImg, double ga){ public void setGA(int numImg, double ga){
this.pars[numImg][7]=ga; this.pars[numImg][index_ga]=ga;
if (this.gIP[numImg].gridImageSet!=null) this.gIP[numImg].gridImageSet.goniometerAxial= ga; if (this.gIP[numImg].gridImageSet!=null) this.gIP[numImg].gridImageSet.goniometerAxial= ga;
} }
public double getGH(int numImg){ public double getGH(int numImg){
if (this.gIP[numImg].gridImageSet!=null) return this.gIP[numImg].gridImageSet.goniometerTilt; if (this.gIP[numImg].gridImageSet!=null) return this.gIP[numImg].gridImageSet.goniometerTilt;
return this.pars[numImg][6]; return this.pars[numImg][index_gh];
} }
public double getGA(int numImg){ public double getGA(int numImg){
if (this.gIP[numImg].gridImageSet!=null) return this.gIP[numImg].gridImageSet.goniometerAxial; if (this.gIP[numImg].gridImageSet!=null) return this.gIP[numImg].gridImageSet.goniometerAxial;
return this.pars[numImg][7]; return this.pars[numImg][index_ga];
} }
public void setParameters(double [] parameters, int numImg, boolean[] mask){ public void setParameters(double [] parameters, int numImg, boolean[] mask){
...@@ -2765,7 +2819,7 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -2765,7 +2819,7 @@ import org.apache.commons.configuration.XMLConfiguration;
IJ.showMessage("Error",msg); IJ.showMessage("Error",msg);
throw new IllegalArgumentException (msg); throw new IllegalArgumentException (msg);
} }
return parameterDescriptions[num][0]; return descrField(num,0);
} }
public String getParameterDescription(int num){ public String getParameterDescription(int num){
...@@ -2774,7 +2828,7 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -2774,7 +2828,7 @@ import org.apache.commons.configuration.XMLConfiguration;
IJ.showMessage("Error",msg); IJ.showMessage("Error",msg);
throw new IllegalArgumentException (msg); throw new IllegalArgumentException (msg);
} }
return this.parameterDescriptions[num][1]; return descrField(num,1);
} }
public String getParameterUnits(int num){ public String getParameterUnits(int num){
...@@ -2783,8 +2837,7 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -2783,8 +2837,7 @@ import org.apache.commons.configuration.XMLConfiguration;
IJ.showMessage("Error",msg); IJ.showMessage("Error",msg);
throw new IllegalArgumentException (msg); throw new IllegalArgumentException (msg);
} }
return this.parameterDescriptions[num][2]; return descrField(num,2);
} }
public boolean isSubcameraParameter(int num){ public boolean isSubcameraParameter(int num){
if ((num<0) || (num>=this.parameterDescriptions.length)) { if ((num<0) || (num>=this.parameterDescriptions.length)) {
...@@ -2792,7 +2845,7 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -2792,7 +2845,7 @@ import org.apache.commons.configuration.XMLConfiguration;
IJ.showMessage("Error",msg); IJ.showMessage("Error",msg);
throw new IllegalArgumentException (msg); throw new IllegalArgumentException (msg);
} }
return (this.parameterDescriptions[num][3].equals("S")); return (descrField(num,3).equals("S"));
} }
public boolean isLocationParameter(int num){ //X,Y or Z location of the camera public boolean isLocationParameter(int num){ //X,Y or Z location of the camera
...@@ -2801,7 +2854,7 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -2801,7 +2854,7 @@ import org.apache.commons.configuration.XMLConfiguration;
IJ.showMessage("Error",msg); IJ.showMessage("Error",msg);
throw new IllegalArgumentException (msg); throw new IllegalArgumentException (msg);
} }
return (this.parameterDescriptions[num][3].equals("T")); return (descrField(num,3).equals("T"));
} }
public boolean isOrientationParameter(int num){ //one of the 2 goniometer orientation angles public boolean isOrientationParameter(int num){ //one of the 2 goniometer orientation angles
...@@ -2810,7 +2863,7 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -2810,7 +2863,7 @@ import org.apache.commons.configuration.XMLConfiguration;
IJ.showMessage("Error",msg); IJ.showMessage("Error",msg);
throw new IllegalArgumentException (msg); throw new IllegalArgumentException (msg);
} }
return (this.parameterDescriptions[num][3].equals("R")); return (descrField(num,3).equals("R"));
} }
public boolean isIntrinsicParameter(int num){ // updated from image calibration file public boolean isIntrinsicParameter(int num){ // updated from image calibration file
...@@ -2819,7 +2872,7 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -2819,7 +2872,7 @@ import org.apache.commons.configuration.XMLConfiguration;
IJ.showMessage("Error",msg); IJ.showMessage("Error",msg);
throw new IllegalArgumentException (msg); throw new IllegalArgumentException (msg);
} }
return (this.parameterDescriptions[num][4].equals("I")); return (descrField(num,4).equals("I"));
} }
public String getImagePath(int num) { public String getImagePath(int num) {
......
...@@ -2975,8 +2975,10 @@ For each point in the image ...@@ -2975,8 +2975,10 @@ For each point in the image
// double [] parVector=fittingStrategy.distortionCalibrationData.eyesisCameraParameters.getParametersVector(stationNumber,subCamera); // double [] parVector=fittingStrategy.distortionCalibrationData.eyesisCameraParameters.getParametersVector(stationNumber,subCamera);
// System.out.println("setupLensDistortionParameters(): subCamera="+subCamera+", goniometerHorizontal="+goniometerHorizontal+", goniometerAxial="+goniometerAxial); // System.out.println("setupLensDistortionParameters(): subCamera="+subCamera+", goniometerHorizontal="+goniometerHorizontal+", goniometerAxial="+goniometerAxial);
boolean isTripod=this.fittingStrategy.distortionCalibrationData.eyesisCameraParameters.isTripod; boolean isTripod=this.fittingStrategy.distortionCalibrationData.eyesisCameraParameters.isTripod;
boolean cartesian=this.fittingStrategy.distortionCalibrationData.eyesisCameraParameters.cartesian;
LensDistortionParameters lensDistortionParameters = new LensDistortionParameters ( LensDistortionParameters lensDistortionParameters = new LensDistortionParameters (
isTripod, isTripod,
cartesian,
null, //double [][] interParameterDerivatives, //partial derivative matrix from subcamera-camera-goniometer to single camera (12x21) if null - just values, no derivatives null, //double [][] interParameterDerivatives, //partial derivative matrix from subcamera-camera-goniometer to single camera (12x21) if null - just values, no derivatives
// this.fittingStrategy.distortionCalibrationData.pars[numImg], //parVector, // this.fittingStrategy.distortionCalibrationData.pars[numImg], //parVector,
this.fittingStrategy.distortionCalibrationData.getParameters(numImg), //parVector, this.fittingStrategy.distortionCalibrationData.getParameters(numImg), //parVector,
...@@ -3001,8 +3003,10 @@ For each point in the image ...@@ -3001,8 +3003,10 @@ For each point in the image
if (!Double.isNaN(goniometerAxial))parVector[goniometerAxialIndex]=goniometerAxial; if (!Double.isNaN(goniometerAxial))parVector[goniometerAxialIndex]=goniometerAxial;
// System.out.println("setupLensDistortionParameters(): subCamera="+subCamera+", goniometerHorizontal="+goniometerHorizontal+", goniometerAxial="+goniometerAxial); // System.out.println("setupLensDistortionParameters(): subCamera="+subCamera+", goniometerHorizontal="+goniometerHorizontal+", goniometerAxial="+goniometerAxial);
boolean isTripod=this.fittingStrategy.distortionCalibrationData.eyesisCameraParameters.isTripod; boolean isTripod=this.fittingStrategy.distortionCalibrationData.eyesisCameraParameters.isTripod;
boolean cartesian=this.fittingStrategy.distortionCalibrationData.eyesisCameraParameters.cartesian;
LensDistortionParameters lensDistortionParameters = new LensDistortionParameters ( LensDistortionParameters lensDistortionParameters = new LensDistortionParameters (
isTripod, isTripod,
cartesian,
null, //double [][] interParameterDerivatives, //partial derivative matrix from subcamera-camera-goniometer to single camera (12x21) if null - just values, no derivatives null, //double [][] interParameterDerivatives, //partial derivative matrix from subcamera-camera-goniometer to single camera (12x21) if null - just values, no derivatives
parVector, parVector,
null, //boolean [] mask, // calculate only selected derivatives (all parVect values are still null, //boolean [] mask, // calculate only selected derivatives (all parVect values are still
...@@ -3152,6 +3156,7 @@ For each point in the image ...@@ -3152,6 +3156,7 @@ For each point in the image
this.lensDistortionParameters.lensCalcInterParamers( this.lensDistortionParameters.lensCalcInterParamers(
this.lensDistortionParameters, // 22-long parameter vector for the image this.lensDistortionParameters, // 22-long parameter vector for the image
this.fittingStrategy.distortionCalibrationData.eyesisCameraParameters.isTripod, this.fittingStrategy.distortionCalibrationData.eyesisCameraParameters.isTripod,
this.fittingStrategy.distortionCalibrationData.eyesisCameraParameters.cartesian,
null, // this.interParameterDerivatives, // [22][] null, // this.interParameterDerivatives, // [22][]
parVector, parVector,
null); // if no derivatives, null is OK null); // if no derivatives, null is OK
...@@ -3276,6 +3281,7 @@ For each point in the image ...@@ -3276,6 +3281,7 @@ For each point in the image
this.lensDistortionParameters.lensCalcInterParamers( this.lensDistortionParameters.lensCalcInterParamers(
this.lensDistortionParameters, this.lensDistortionParameters,
this.fittingStrategy.distortionCalibrationData.eyesisCameraParameters.isTripod, this.fittingStrategy.distortionCalibrationData.eyesisCameraParameters.isTripod,
this.fittingStrategy.distortionCalibrationData.eyesisCameraParameters.cartesian,
this.interParameterDerivatives, // [22][] this.interParameterDerivatives, // [22][]
imgVector, imgVector,
imgMask); // calculate only selected derivatives (all parVect values are still imgMask); // calculate only selected derivatives (all parVect values are still
...@@ -3299,6 +3305,7 @@ For each point in the image ...@@ -3299,6 +3305,7 @@ For each point in the image
this.lensDistortionParameters.lensCalcInterParamers( this.lensDistortionParameters.lensCalcInterParamers(
this.lensDistortionParameters, this.lensDistortionParameters,
this.fittingStrategy.distortionCalibrationData.eyesisCameraParameters.isTripod, this.fittingStrategy.distortionCalibrationData.eyesisCameraParameters.isTripod,
this.fittingStrategy.distortionCalibrationData.eyesisCameraParameters.cartesian,
null, // this.interParameterDerivatives, // just values, no derivatives null, // this.interParameterDerivatives, // just values, no derivatives
vector_delta, vector_delta,
imgMask); imgMask);
...@@ -3386,6 +3393,7 @@ For each point in the image ...@@ -3386,6 +3393,7 @@ For each point in the image
this.lensDistortionParameters.lensCalcInterParamers( this.lensDistortionParameters.lensCalcInterParamers(
this.lensDistortionParameters, this.lensDistortionParameters,
this.fittingStrategy.distortionCalibrationData.eyesisCameraParameters.isTripod, this.fittingStrategy.distortionCalibrationData.eyesisCameraParameters.isTripod,
this.fittingStrategy.distortionCalibrationData.eyesisCameraParameters.cartesian,
calcJacobian?this.interParameterDerivatives:null, // [22][] calcJacobian?this.interParameterDerivatives:null, // [22][]
imgVector, imgVector,
imgMask); // imgMask may be null if no derivativescalculate only selected derivatives (all parVect values are still imgMask); // imgMask may be null if no derivativescalculate only selected derivatives (all parVect values are still
...@@ -3399,7 +3407,7 @@ For each point in the image ...@@ -3399,7 +3407,7 @@ For each point in the image
if (fullIndex>=this.targetXYZ.length){ if (fullIndex>=this.targetXYZ.length){
System.out.println("BUG: calculateFxAndJacobian() imgNum="+imgNum+" pointNum="+pointNum+" fullIndex="+fullIndex+" this.targetXYZ.length="+this.targetXYZ.length); System.out.println("BUG: calculateFxAndJacobian() imgNum="+imgNum+" pointNum="+pointNum+" fullIndex="+fullIndex+" this.targetXYZ.length="+this.targetXYZ.length);
} }
double [][]derivatives15= lensDistortionParameters.calcPartialDerivatives( double [][]derivatives15= lensDistortionParameters.calcPartialDerivatives( // [NaN, NaN]
this.targetXYZ[fullIndex][0], // target point horizontal, positive - right, mm this.targetXYZ[fullIndex][0], // target point horizontal, positive - right, mm
this.targetXYZ[fullIndex][1], // target point vertical, positive - down, mm this.targetXYZ[fullIndex][1], // target point vertical, positive - down, mm
this.targetXYZ[fullIndex][2], // target point horizontal, positive - away from camera, mm this.targetXYZ[fullIndex][2], // target point horizontal, positive - away from camera, mm
...@@ -3503,6 +3511,7 @@ For each point in the image ...@@ -3503,6 +3511,7 @@ For each point in the image
lensDistortionParameters.lensCalcInterParamers( lensDistortionParameters.lensCalcInterParamers(
lensDistortionParameters, lensDistortionParameters,
this.fittingStrategy.distortionCalibrationData.eyesisCameraParameters.isTripod, this.fittingStrategy.distortionCalibrationData.eyesisCameraParameters.isTripod,
this.fittingStrategy.distortionCalibrationData.eyesisCameraParameters.cartesian,
calcJacobian?interParameterDerivatives:null, // [22][] calcJacobian?interParameterDerivatives:null, // [22][]
imgVector, imgVector,
imgMask); // calculate only selected derivatives (all parVect values are still imgMask); // calculate only selected derivatives (all parVect values are still
...@@ -3586,6 +3595,7 @@ For each point in the image ...@@ -3586,6 +3595,7 @@ For each point in the image
this.lensDistortionParameters.lensCalcInterParamers( this.lensDistortionParameters.lensCalcInterParamers(
this.lensDistortionParameters, this.lensDistortionParameters,
this.fittingStrategy.distortionCalibrationData.eyesisCameraParameters.isTripod, this.fittingStrategy.distortionCalibrationData.eyesisCameraParameters.isTripod,
this.fittingStrategy.distortionCalibrationData.eyesisCameraParameters.cartesian,
null, //this.interParameterDerivatives, // [22][] null, //this.interParameterDerivatives, // [22][]
imgVector, imgVector,
imgMask); // calculate only selected derivatives (all parVect values are still imgMask); // calculate only selected derivatives (all parVect values are still
...@@ -3681,7 +3691,7 @@ List calibration ...@@ -3681,7 +3691,7 @@ List calibration
gd.addCheckbox("Show physical camera parameters", this.showEyesisParameters); gd.addCheckbox("Show physical camera parameters", this.showEyesisParameters);
gd.addCheckbox("Show intrinsic lens/sensor parameters ", this.showIntrinsicParameters); gd.addCheckbox("Show intrinsic lens/sensor parameters ", this.showIntrinsicParameters);
gd.addCheckbox("Show intrinsic lens/sensor parameters", this.showExtrinsicParameters); gd.addCheckbox("Show extrinsic lens/sensor parameters", this.showExtrinsicParameters);
gd.addNumericField("Extra decimal places (precision) in the list", this.extraDecimals, 0); gd.addNumericField("Extra decimal places (precision) in the list", this.extraDecimals, 0);
gd.showDialog(); gd.showDialog();
if (gd.wasCanceled()) return false; if (gd.wasCanceled()) return false;
...@@ -4132,6 +4142,7 @@ List calibration ...@@ -4132,6 +4142,7 @@ List calibration
this.lensDistortionParameters.lensCalcInterParamers( this.lensDistortionParameters.lensCalcInterParamers(
this.lensDistortionParameters, this.lensDistortionParameters,
this.fittingStrategy.distortionCalibrationData.eyesisCameraParameters.isTripod, this.fittingStrategy.distortionCalibrationData.eyesisCameraParameters.isTripod,
this.fittingStrategy.distortionCalibrationData.eyesisCameraParameters.cartesian,
null, //this.interParameterDerivatives, // [22][] null, //this.interParameterDerivatives, // [22][]
// fittingStrategy.distortionCalibrationData.pars[imgNum], // 22-long parameter vector for the image // fittingStrategy.distortionCalibrationData.pars[imgNum], // 22-long parameter vector for the image
fittingStrategy.distortionCalibrationData.getParameters(imgNum), // 22-long parameter vector for the image fittingStrategy.distortionCalibrationData.getParameters(imgNum), // 22-long parameter vector for the image
...@@ -7628,6 +7639,7 @@ D2= ...@@ -7628,6 +7639,7 @@ D2=
final boolean updateStatus final boolean updateStatus
){ ){
final boolean isTripod=this.fittingStrategy.distortionCalibrationData.eyesisCameraParameters.isTripod; final boolean isTripod=this.fittingStrategy.distortionCalibrationData.eyesisCameraParameters.isTripod;
final boolean cartesian=this.fittingStrategy.distortionCalibrationData.eyesisCameraParameters.cartesian;
final int [][] dirs= {{0,0},{-1,0},{1,0},{0,-1},{0,1}}; // possible to make 8 directions final int [][] dirs= {{0,0},{-1,0},{1,0},{0,-1},{0,1}}; // possible to make 8 directions
final double [][][] derivatives={ // for of /du, /dv 3 variants, depending on which neighbors are available final double [][][] derivatives={ // for of /du, /dv 3 variants, depending on which neighbors are available
{ {
...@@ -7680,6 +7692,7 @@ D2= ...@@ -7680,6 +7692,7 @@ D2=
lensDistortionParameters.lensCalcInterParamers( lensDistortionParameters.lensCalcInterParamers(
lensDistortionParameters, lensDistortionParameters,
isTripod, isTripod,
cartesian,
null, //this.interParameterDerivatives, // [22][] null, //this.interParameterDerivatives, // [22][]
// fittingStrategy.distortionCalibrationData.pars[imgNum], // 22-long parameter vector for the image // fittingStrategy.distortionCalibrationData.pars[imgNum], // 22-long parameter vector for the image
fittingStrategy.distortionCalibrationData.getParameters(imgNum), // 22-long parameter vector for the image fittingStrategy.distortionCalibrationData.getParameters(imgNum), // 22-long parameter vector for the image
...@@ -7876,6 +7889,7 @@ D2= ...@@ -7876,6 +7889,7 @@ D2=
this.lensDistortionParameters.lensCalcInterParamers( this.lensDistortionParameters.lensCalcInterParamers(
this.lensDistortionParameters, this.lensDistortionParameters,
this.fittingStrategy.distortionCalibrationData.eyesisCameraParameters.isTripod, this.fittingStrategy.distortionCalibrationData.eyesisCameraParameters.isTripod,
this.fittingStrategy.distortionCalibrationData.eyesisCameraParameters.cartesian,
null, //this.interParameterDerivatives, // [22][] null, //this.interParameterDerivatives, // [22][]
// fittingStrategy.distortionCalibrationData.pars[imgNum], // 22-long parameter vector for the image // fittingStrategy.distortionCalibrationData.pars[imgNum], // 22-long parameter vector for the image
fittingStrategy.distortionCalibrationData.getParameters(imgNum), // 22-long parameter vector for the image fittingStrategy.distortionCalibrationData.getParameters(imgNum), // 22-long parameter vector for the image
......
...@@ -52,7 +52,8 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -52,7 +52,8 @@ import org.apache.commons.configuration.XMLConfiguration;
// non-adjustable parameters, not parts of vector // non-adjustable parameters, not parts of vector
public int numStations; public int numStations;
public double [] stationWeight; // reprojection error weights (close station - relax errors) public double [] stationWeight; // reprojection error weights (close station - relax errors)
public boolean isTripod=false; // when true - make goniometerHorizontal rotation around "vertical" axis and "goniometerAxial" - around public boolean isTripod= false; // when true - make goniometerHorizontal rotation around "vertical" axis and "goniometerAxial" - around
public boolean cartesian=false; //
// rotated horizontal. // rotated horizontal.
public int sensorWidth= 2592; public int sensorWidth= 2592;
public int sensorHeight= 1936; public int sensorHeight= 1936;
...@@ -293,6 +294,7 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -293,6 +294,7 @@ import org.apache.commons.configuration.XMLConfiguration;
public EyesisCameraParameters ( public EyesisCameraParameters (
int numStations, int numStations,
boolean isTripod, boolean isTripod,
boolean cartesian,
double goniometerHorizontal, // goniometer rotation around "horizontal" axis (tilting from the target - positive) double goniometerHorizontal, // goniometer rotation around "horizontal" axis (tilting from the target - positive)
double goniometerAxial, // goniometer rotation around Eyesis axis (clockwise in plan - positive double goniometerAxial, // goniometer rotation around Eyesis axis (clockwise in plan - positive
int numSubCameras, int numSubCameras,
...@@ -329,6 +331,7 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -329,6 +331,7 @@ import org.apache.commons.configuration.XMLConfiguration;
setSameEyesisCameraParameters ( setSameEyesisCameraParameters (
numStations, numStations,
isTripod, isTripod,
cartesian,
goniometerHorizontal, // goniometer rotation around "horizontal" axis (tilting from the target - positive) goniometerHorizontal, // goniometer rotation around "horizontal" axis (tilting from the target - positive)
goniometerAxial, // goniometer rotation around Eyesis axis (clockwise in plan - positive goniometerAxial, // goniometer rotation around Eyesis axis (clockwise in plan - positive
numSubCameras, numSubCameras,
...@@ -363,6 +366,7 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -363,6 +366,7 @@ import org.apache.commons.configuration.XMLConfiguration;
public EyesisCameraParameters ( public EyesisCameraParameters (
int numStations, int numStations,
boolean isTripod, boolean isTripod,
boolean cartesiam,
double goniometerHorizontal, // goniometer rotation around "horizontal" axis (tilting from the target - positive) double goniometerHorizontal, // goniometer rotation around "horizontal" axis (tilting from the target - positive)
double goniometerAxial, // goniometer rotation around Eyesis axis (clockwise in plan - positive double goniometerAxial, // goniometer rotation around Eyesis axis (clockwise in plan - positive
int numSubCameras, int numSubCameras,
...@@ -396,6 +400,7 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -396,6 +400,7 @@ import org.apache.commons.configuration.XMLConfiguration;
setSameEyesisCameraParameters ( setSameEyesisCameraParameters (
numStations, numStations,
isTripod, isTripod,
cartesian,
goniometerHorizontal, // goniometer rotation around "horizontal" axis (tilting from the target - positive) goniometerHorizontal, // goniometer rotation around "horizontal" axis (tilting from the target - positive)
goniometerAxial, // goniometer rotation around Eyesis axis (clockwise in plan - positive goniometerAxial, // goniometer rotation around Eyesis axis (clockwise in plan - positive
numSubCameras, numSubCameras,
...@@ -430,6 +435,7 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -430,6 +435,7 @@ import org.apache.commons.configuration.XMLConfiguration;
void setSameEyesisCameraParameters ( void setSameEyesisCameraParameters (
int numStations, int numStations,
boolean isTripod, boolean isTripod,
boolean cartesian,
double goniometerHorizontal, // goniometer rotation around "horizontal" axis (tilting from the target - positive) double goniometerHorizontal, // goniometer rotation around "horizontal" axis (tilting from the target - positive)
double goniometerAxial, // goniometer rotation around Eyesis axis (clockwise in plan - positive double goniometerAxial, // goniometer rotation around Eyesis axis (clockwise in plan - positive
int numSubCameras, int numSubCameras,
...@@ -462,6 +468,7 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -462,6 +468,7 @@ import org.apache.commons.configuration.XMLConfiguration;
){ ){
this.numStations=numStations; this.numStations=numStations;
this.isTripod=isTripod; this.isTripod=isTripod;
this.cartesian = cartesian; // Need to set each subcamera?
this.sensorWidth=sensorWidth; this.sensorWidth=sensorWidth;
this.sensorHeight=sensorHeight; this.sensorHeight=sensorHeight;
this.shrinkGridForMask=shrinkGridForMask; //shrink detected grids by one point for/vert this number of times before calculating masks this.shrinkGridForMask=shrinkGridForMask; //shrink detected grids by one point for/vert this number of times before calculating masks
...@@ -513,7 +520,7 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -513,7 +520,7 @@ import org.apache.commons.configuration.XMLConfiguration;
/** /**
* Capoy parameters from source EysesisCamerParameters to destination, trimming/expanding nu,ber of stations * Copy parameters from source EysesisCamerParameters to destination, trimming/expanding number of stations
* @param newNumStations new number of stations * @param newNumStations new number of stations
* @param source source EysesisCamerParameters * @param source source EysesisCamerParameters
* @param destination destination EysesisCamerParameters * @param destination destination EysesisCamerParameters
...@@ -573,10 +580,12 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -573,10 +580,12 @@ import org.apache.commons.configuration.XMLConfiguration;
} }
} }
} }
destination.cartesian = source.cartesian;
} }
public void setProperties(String prefix,Properties properties){ public void setProperties(String prefix,Properties properties){
properties.setProperty(prefix+"isTripod",this.isTripod+""); properties.setProperty(prefix+"isTripod",this.isTripod+"");
properties.setProperty(prefix+"cartesian",this.cartesian+"");
properties.setProperty(prefix+"sensorWidth",this.sensorWidth+""); properties.setProperty(prefix+"sensorWidth",this.sensorWidth+"");
properties.setProperty(prefix+"sensorHeight",this.sensorHeight+""); properties.setProperty(prefix+"sensorHeight",this.sensorHeight+"");
properties.setProperty(prefix+"shrinkGridForMask",this.shrinkGridForMask+""); properties.setProperty(prefix+"shrinkGridForMask",this.shrinkGridForMask+"");
...@@ -619,6 +628,8 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -619,6 +628,8 @@ import org.apache.commons.configuration.XMLConfiguration;
public void getProperties(String prefix,Properties properties){ public void getProperties(String prefix,Properties properties){
if (properties.getProperty(prefix+"isTripod")!=null) if (properties.getProperty(prefix+"isTripod")!=null)
this.isTripod=Boolean.parseBoolean(properties.getProperty(prefix+"isTripod")); this.isTripod=Boolean.parseBoolean(properties.getProperty(prefix+"isTripod"));
if (properties.getProperty(prefix+"cartesian")!=null)
this.cartesian=Boolean.parseBoolean(properties.getProperty(prefix+"cartesian"));
if (properties.getProperty(prefix+"sensorWidth")!=null) if (properties.getProperty(prefix+"sensorWidth")!=null)
this.sensorWidth=Integer.parseInt(properties.getProperty(prefix+"sensorWidth")); this.sensorWidth=Integer.parseInt(properties.getProperty(prefix+"sensorWidth"));
if (properties.getProperty(prefix+"sensorHeight")!=null) if (properties.getProperty(prefix+"sensorHeight")!=null)
...@@ -757,6 +768,7 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -757,6 +768,7 @@ import org.apache.commons.configuration.XMLConfiguration;
// public double goniometerHorizontal; // goniometer rotation around "horizontal" axis (tilting from the target - positive) // 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 double goniometerAxial; // goniometer rotation around Eyesis axis (clockwise in plan - positive
//this.isTripod //this.isTripod
gd.addCheckbox("Cartesian coordinates for subcamera (false - cylindrical)", this.cartesian);
String [] modelChoice=new String [distortionModelDescriptions.length+1]; String [] modelChoice=new String [distortionModelDescriptions.length+1];
modelChoice[0]="--- keep current ---"; modelChoice[0]="--- keep current ---";
for (int i=0;i<distortionModelDescriptions.length;i++) modelChoice[i+1]=distortionModelDescriptions[i]; for (int i=0;i<distortionModelDescriptions.length;i++) modelChoice[i+1]=distortionModelDescriptions[i];
...@@ -820,6 +832,7 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -820,6 +832,7 @@ import org.apache.commons.configuration.XMLConfiguration;
WindowTools.addScrollBars(gd); WindowTools.addScrollBars(gd);
gd.showDialog(); gd.showDialog();
if (gd.wasCanceled()) return -1; if (gd.wasCanceled()) return -1;
boolean newCartesian = gd.getNextBoolean();
int modelIndex=gd.getNextChoiceIndex()-1; int modelIndex=gd.getNextChoiceIndex()-1;
if (modelIndex>=0){ if (modelIndex>=0){
for (EyesisSubCameraParameters [] esps:this.eyesisSubCameras){ for (EyesisSubCameraParameters [] esps:this.eyesisSubCameras){
...@@ -874,6 +887,11 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -874,6 +887,11 @@ import org.apache.commons.configuration.XMLConfiguration;
} }
} }
if (numSubCam<0)numSubCam=0; if (numSubCam<0)numSubCam=0;
if (newCartesian != this.cartesian){
this.cartesian = newCartesian;
updateCartesian();
}
return gd.wasOKed()?numSubCam:-1; return gd.wasOKed()?numSubCam:-1;
} }
...@@ -881,6 +899,7 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -881,6 +899,7 @@ import org.apache.commons.configuration.XMLConfiguration;
int numSubCam, int numSubCam,
String title) { String title) {
GenericDialog gd = new GenericDialog(title); GenericDialog gd = new GenericDialog(title);
if (this.numStations > 1) gd.addCheckbox ("Propagate first station parameters to other stations ",false);
for (int numStation=0;numStation<this.numStations;numStation++) { for (int numStation=0;numStation<this.numStations;numStation++) {
EyesisSubCameraParameters subCam=this.eyesisSubCameras[numStation][numSubCam]; EyesisSubCameraParameters subCam=this.eyesisSubCameras[numStation][numSubCam];
if (subCam!=null) { if (subCam!=null) {
...@@ -891,10 +910,20 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -891,10 +910,20 @@ import org.apache.commons.configuration.XMLConfiguration;
if (this.numStations>1) gd.addMessage("--- Station number "+numStation+" ---"); if (this.numStations>1) gd.addMessage("--- Station number "+numStation+" ---");
gd.addNumericField("Subcamera lens distortion model", subCam.lensDistortionModel, 5,0,""); gd.addNumericField("Subcamera lens distortion model", subCam.lensDistortionModel, 5,0,"");
gd.addCheckbox ("Enable matching w/o laser pointers", subCam.enableNoLaser); gd.addCheckbox ("Enable matching w/o laser pointers", subCam.enableNoLaser);
gd.addNumericField("Subcamera azimuth", subCam.azimuth, 5,9,"degrees"); if (subCam.cartesian) {
gd.addNumericField("Subcamera distance from the axis", subCam.radius, 5,9,"mm"); gd.addNumericField("Subcamera right from the axis", subCam.right, 5,9,"mm");
gd.addNumericField("Subcamera forward from the rotation axis", subCam.forward, 5,9,"mm");
} else {
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"); gd.addNumericField("Subcamera height from the 'equator'", subCam.height, 5,9,"mm");
gd.addNumericField("Optical axis heading (relative to azimuth)", subCam.phi, 5,9,"degrees");
if (subCam.cartesian) {
gd.addNumericField("Optical axis heading (absulute, CW positive)", subCam.heading, 5,9,"degrees");
} else {
gd.addNumericField("Optical axis heading (relative to azimuth)", subCam.phi, 5,9,"degrees");
}
gd.addNumericField("Optical axis elevation (up from equator)", subCam.theta, 5,9,"degrees"); gd.addNumericField("Optical axis elevation (up from equator)", subCam.theta, 5,9,"degrees");
gd.addNumericField("Camera roll, positive CW looking to the target",subCam.psi, 5,9,"degrees"); gd.addNumericField("Camera roll, positive CW looking to the target",subCam.psi, 5,9,"degrees");
gd.addNumericField("Lens focal length", subCam.focalLength, 5,8,"mm"); gd.addNumericField("Lens focal length", subCam.focalLength, 5,8,"mm");
...@@ -952,6 +981,7 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -952,6 +981,7 @@ import org.apache.commons.configuration.XMLConfiguration;
gd.showDialog(); gd.showDialog();
if (gd.wasCanceled()) return false; if (gd.wasCanceled()) return false;
double channelWeightDefault=1.0; double channelWeightDefault=1.0;
boolean propagateFirstStation = (this.numStations > 1) ? gd.getNextBoolean() : false;
for (int numStation=0;numStation<this.numStations;numStation++) { for (int numStation=0;numStation<this.numStations;numStation++) {
EyesisSubCameraParameters subCam=this.eyesisSubCameras[numStation][numSubCam]; EyesisSubCameraParameters subCam=this.eyesisSubCameras[numStation][numSubCam];
if (subCam!=null) { if (subCam!=null) {
...@@ -962,10 +992,19 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -962,10 +992,19 @@ import org.apache.commons.configuration.XMLConfiguration;
subCam.channelWeightDefault= channelWeightDefault; // assign to all stations subCam.channelWeightDefault= channelWeightDefault; // assign to all stations
subCam.lensDistortionModel= (int) gd.getNextNumber(); subCam.lensDistortionModel= (int) gd.getNextNumber();
subCam.enableNoLaser = gd.getNextBoolean(); subCam.enableNoLaser = gd.getNextBoolean();
subCam.azimuth= gd.getNextNumber(); if (subCam.cartesian) {
subCam.radius= gd.getNextNumber(); subCam.right= gd.getNextNumber();
subCam.forward= gd.getNextNumber();
} else {
subCam.azimuth= gd.getNextNumber();
subCam.radius= gd.getNextNumber();
}
subCam.height= gd.getNextNumber(); subCam.height= gd.getNextNumber();
subCam.phi= gd.getNextNumber(); if (subCam.cartesian) {
subCam.heading= gd.getNextNumber();
}else {
subCam.phi= gd.getNextNumber();
}
subCam.theta= gd.getNextNumber(); subCam.theta= gd.getNextNumber();
subCam.psi= gd.getNextNumber(); subCam.psi= gd.getNextNumber();
subCam.focalLength= gd.getNextNumber(); subCam.focalLength= gd.getNextNumber();
...@@ -1009,6 +1048,76 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -1009,6 +1048,76 @@ import org.apache.commons.configuration.XMLConfiguration;
subCam.r_od[6][1]= 0.01*gd.getNextNumber(); subCam.r_od[6][1]= 0.01*gd.getNextNumber();
} }
} }
if (propagateFirstStation){
EyesisSubCameraParameters first=this.eyesisSubCameras[0][numSubCam];
if (first != null){
for (int numStation=1;numStation<this.numStations;numStation++) {
EyesisSubCameraParameters subCam=this.eyesisSubCameras[numStation][numSubCam];
if (subCam!=null) {
if (subCam.cartesian) {
subCam.right= first.right;
subCam.forward= first.forward;
} else {
subCam.azimuth= first.azimuth;
subCam.radius= first.radius;
}
subCam.height= first.height;
if (subCam.cartesian) {
subCam.heading= first.heading;
}else {
subCam.phi= first.phi;
}
subCam.theta= first.theta;
subCam.psi= first.psi;
subCam.focalLength= first.focalLength;
subCam.pixelSize= first.pixelSize;
subCam.distortionRadius=first.distortionRadius;
subCam.distortionA8= first.distortionA8;
subCam.distortionA7= first.distortionA7;
subCam.distortionA6= first.distortionA6;
subCam.distortionA5= first.distortionA5;
subCam.distortionA= first.distortionA;
subCam.distortionB= first.distortionB;
subCam.distortionC= first.distortionC;
subCam.px0= first.px0;
subCam.py0= first.py0;
subCam.r_od[0][0]= subCam.r_od[0][0];
subCam.r_od[0][1]= subCam.r_od[0][1];
subCam.r_xy[0][0]= subCam.r_xy[0][0];
subCam.r_xy[0][1]= subCam.r_xy[0][1];
subCam.r_od[1][0]= subCam.r_od[1][0];
subCam.r_od[1][1]= subCam.r_od[1][1];
subCam.r_xy[1][0]= subCam.r_xy[1][0];
subCam.r_xy[1][1]= subCam.r_xy[1][1];
subCam.r_od[2][0]= subCam.r_od[2][0];
subCam.r_od[2][1]= subCam.r_od[2][1];
subCam.r_xy[2][0]= subCam.r_xy[2][0];
subCam.r_xy[2][1]= subCam.r_xy[2][1];
subCam.r_od[3][0]= subCam.r_od[3][0];
subCam.r_od[3][1]= subCam.r_od[3][1];
subCam.r_xy[3][0]= subCam.r_xy[3][0];
subCam.r_xy[3][1]= subCam.r_xy[3][1];
subCam.r_od[4][0]= subCam.r_od[4][0];
subCam.r_od[4][1]= subCam.r_od[4][1];
subCam.r_xy[4][0]= subCam.r_xy[4][0];
subCam.r_xy[4][1]= subCam.r_xy[4][1];
subCam.r_od[5][0]= subCam.r_od[5][0];
subCam.r_od[5][1]= subCam.r_od[5][1];
subCam.r_xy[5][0]= subCam.r_xy[5][0];
subCam.r_xy[5][1]= subCam.r_xy[5][1];
subCam.r_od[6][0]= subCam.r_od[6][0];
subCam.r_od[6][1]= subCam.r_od[6][1];
}
}
}
}
for (int numStation=0;numStation<this.numStations;numStation++) {
EyesisSubCameraParameters subCam=this.eyesisSubCameras[numStation][numSubCam];
if (subCam!=null) {
subCam.updateCartesian();
}
}
return gd.wasOKed(); return gd.wasOKed();
} }
...@@ -1071,12 +1180,12 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -1071,12 +1180,12 @@ import org.apache.commons.configuration.XMLConfiguration;
EyesisSubCameraParameters subCam=this.eyesisSubCameras[stationNumber][subCamNumber]; EyesisSubCameraParameters subCam=this.eyesisSubCameras[stationNumber][subCamNumber];
// System.out.println("getParametersVector("+stationNumber+","+subCamNumber+"), subCam is "+((subCam==null)?"null":"NOT null")); // System.out.println("getParametersVector("+stationNumber+","+subCamNumber+"), subCam is "+((subCam==null)?"null":"NOT null"));
double [] parVect={ double [] parVect={
subCam.azimuth, // 0 azimuth of the lens entrance pupil center, degrees, clockwise looking from top (subCam.cartesian?subCam.right: subCam.azimuth), // 0 azimuth of the lens entrance pupil center, degrees, clockwise looking from top
subCam.radius, // 1 mm, distance from the rotation axis (subCam.cartesian?subCam.forward:subCam.radius), // 1 mm, distance from the rotation axis
subCam.height, // 2 mm, up (was downwards?) - from the origin point subCam.height, // 2 mm, up (was downwards?) - from the origin point
subCam.phi, // 3 degrees, optical axis from azimuth/r vector, clockwise (subCam.cartesian?subCam.heading:subCam.phi), // 3 degrees, optical axis from azimuth/r vector, clockwise
subCam.theta, // 4 degrees, optical axis from the eyesis horizon, positive - up subCam.theta, // 4 degrees, optical axis from the eyesis horizon, positive - up
subCam.psi, // 5 degrees, rotation (of the sensor) around the optical axis. Positive if camera is rotated clockwise looking to the target subCam.psi, // 5 degrees, rotation (of the sensor) around the optical axis. Positive if camera is rotated clockwise looking to the target
this.goniometerHorizontal[stationNumber], // 6 goniometer rotation around "horizontal" axis (tilting from the target - positive) this.goniometerHorizontal[stationNumber], // 6 goniometer rotation around "horizontal" axis (tilting from the target - positive)
this.goniometerAxial[stationNumber], // 7 goniometer rotation around Eyesis axis (clockwise in plan - positive this.goniometerAxial[stationNumber], // 7 goniometer rotation around Eyesis axis (clockwise in plan - positive
this.interAxisDistance[stationNumber], // 8 distance in mm between two goniometer axes this.interAxisDistance[stationNumber], // 8 distance in mm between two goniometer axes
...@@ -1181,10 +1290,19 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -1181,10 +1290,19 @@ import org.apache.commons.configuration.XMLConfiguration;
(this.eyesisSubCameras[stationNumber].length<=subCamNumber)) throw new IllegalArgumentException (this.eyesisSubCameras[stationNumber].length<=subCamNumber)) throw new IllegalArgumentException
("Nonexistent subcamera "+subCamNumber+ " and/or station number="+stationNumber); ("Nonexistent subcamera "+subCamNumber+ " and/or station number="+stationNumber);
EyesisSubCameraParameters subCam=this.eyesisSubCameras[stationNumber][subCamNumber]; EyesisSubCameraParameters subCam=this.eyesisSubCameras[stationNumber][subCamNumber];
if (update[0]) subCam.azimuth=parVect[0]; // 0 azimuth of the lens entrance pupil center, degrees, clockwise looking from top if (subCam.cartesian){
if (update[1]) subCam.radius=parVect[1]; // 1 mm, distance from the rotation axis if (update[0]) subCam.right=parVect[0]; // 0 mm, right of the camera axis from goniometer vertical rotation center to the target
if (update[2]) subCam.height=parVect[2]; // 2 mm, up (was downwards?) - from the origin point if (update[1]) subCam.forward=parVect[1]; // 1 mm, forward from the goniometer vertical rotation center
if (update[2]) subCam.phi=parVect[3]; // 3 degrees, optical axis from azimuth/r vector, clockwise } else {
if (update[0]) subCam.azimuth=parVect[0]; // 0 azimuth of the lens entrance pupil center, degrees, clockwise looking from top
if (update[1]) subCam.radius=parVect[1]; // 1 mm, distance from the rotation axis
}
if (update[2]) subCam.height=parVect[2]; // 2 mm, up (was downwards?) - from the origin point
if (subCam.cartesian){
if (update[2]) subCam.heading=parVect[3]; // 3 degrees, optical axis from Z (to target), clockwise
} else {
if (update[2]) subCam.phi=parVect[3]; // 3 degrees, optical axis from azimuth/r vector, clockwise
}
if (update[4]) subCam.theta=parVect[4]; // 4 degrees, optical axis from the eyesis horizon, positive - up if (update[4]) subCam.theta=parVect[4]; // 4 degrees, optical axis from the eyesis horizon, positive - up
if (update[5]) subCam.psi=parVect[5]; // 5 degrees, rotation (of the sensor) around the optical axis. Positive if camera is rotated clockwise looking to the target if (update[5]) subCam.psi=parVect[5]; // 5 degrees, rotation (of the sensor) around the optical axis. Positive if camera is rotated clockwise looking to the target
if (update[6]) this.goniometerHorizontal[stationNumber]=parVect[6]; // 6 goniometer rotation around "horizontal" axis (tilting from the target - positive) if (update[6]) this.goniometerHorizontal[stationNumber]=parVect[6]; // 6 goniometer rotation around "horizontal" axis (tilting from the target - positive)
...@@ -1236,6 +1354,14 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -1236,6 +1354,14 @@ import org.apache.commons.configuration.XMLConfiguration;
if (update[52]) subCam.r_od[6][1]= parVect[52]; if (update[52]) subCam.r_od[6][1]= parVect[52];
} }
public void updateCartesian(){
for (int numStation = 0; numStation < this.eyesisSubCameras.length; numStation++){
for (int numSub = 0; numSub < this.eyesisSubCameras[numStation].length; numSub++){
this.eyesisSubCameras[numStation][numSub].setCartesian(this.cartesian);
}
}
}
public void initSubCameras( public void initSubCameras(
int numStation, int numStation,
int numSubCameras){ int numSubCameras){
...@@ -1243,9 +1369,12 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -1243,9 +1369,12 @@ import org.apache.commons.configuration.XMLConfiguration;
this.eyesisSubCameras[numStation]=new EyesisSubCameraParameters[numSubCameras]; this.eyesisSubCameras[numStation]=new EyesisSubCameraParameters[numSubCameras];
for (int i=0;i<numSubCameras;i++) this.eyesisSubCameras[numStation][i]=null; for (int i=0;i<numSubCameras;i++) this.eyesisSubCameras[numStation][i]=null;
if (numSubCameras==3) { if (numSubCameras==3) {
this.cartesian = false; // change?
this.eyesisSubCameras[numStation][0]=new EyesisSubCameraParameters( //TODO: modify for lens adjustment defaults? this.eyesisSubCameras[numStation][0]=new EyesisSubCameraParameters( //TODO: modify for lens adjustment defaults?
cartesian,
defaultLensDistortionModel, defaultLensDistortionModel,
true, true,
0.0, 0.0, 0.0, // cartesian righ/forward/heading
0.0, // double azimuth, // azimuth of the lens entrance pupil center, degrees, clockwise looking from top 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 52.53, // double radius, // mm, distance from the rotation axis
34.64, // double height, // mm, up (was downwards) - from the origin point 34.64, // double height, // mm, up (was downwards) - from the origin point
...@@ -1268,8 +1397,10 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -1268,8 +1397,10 @@ import org.apache.commons.configuration.XMLConfiguration;
null, // elongation for c,b,a,a5,a6,a7,a8 null, // elongation for c,b,a,a5,a6,a7,a8
1.0); //channelWeightDefault 1.0); //channelWeightDefault
this.eyesisSubCameras[numStation][1]=new EyesisSubCameraParameters( //TODO: modify for lens adjustment defaults? this.eyesisSubCameras[numStation][1]=new EyesisSubCameraParameters( //TODO: modify for lens adjustment defaults?
cartesian,
defaultLensDistortionModel, defaultLensDistortionModel,
true, true,
0.0, 0.0, 0.0, // cartesian righ/forward/heading
30.0, // double azimuth, // azimuth of the lens entrance pupil center, degrees, clockwise looking from top 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 60.0, // double radius, // mm, distance from the rotation axis
-17.32, // double height, // mm, up (was downwards) - from the origin point -17.32, // double height, // mm, up (was downwards) - from the origin point
...@@ -1292,8 +1423,10 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -1292,8 +1423,10 @@ import org.apache.commons.configuration.XMLConfiguration;
null, // elongation for c,b,a,a5,a6,a7,a8 null, // elongation for c,b,a,a5,a6,a7,a8
1.0); //channelWeightDefault 1.0); //channelWeightDefault
this.eyesisSubCameras[numStation][2]=new EyesisSubCameraParameters( //TODO: modify for lens adjustment defaults? this.eyesisSubCameras[numStation][2]=new EyesisSubCameraParameters( //TODO: modify for lens adjustment defaults?
cartesian,
defaultLensDistortionModel, defaultLensDistortionModel,
true, true,
0.0, 0.0, 0.0, // cartesian righ/forward/heading
-30.0, // double azimuth, // azimuth of the lens entrance pupil center, degrees, clockwise looking from top -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 60.0, // double radius, // mm, distance from the rotation axis
-17.32, // double height, // mm, up (was downwards) - from the origin point -17.32, // double height, // mm, up (was downwards) - from the origin point
...@@ -1316,9 +1449,12 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -1316,9 +1449,12 @@ import org.apache.commons.configuration.XMLConfiguration;
null, // elongation for c,b,a,a5,a6,a7,a8 null, // elongation for c,b,a,a5,a6,a7,a8
1.0); //channelWeightDefault 1.0); //channelWeightDefault
} else if (numSubCameras==1) { } else if (numSubCameras==1) {
this.cartesian = false;
this.eyesisSubCameras[numStation][0]=new EyesisSubCameraParameters( //TODO: modify for lens adjustment defaults? this.eyesisSubCameras[numStation][0]=new EyesisSubCameraParameters( //TODO: modify for lens adjustment defaults?
this.cartesian,
defaultLensDistortionModel, defaultLensDistortionModel,
true, true,
0.0, 0.0, 0.0, // cartesian righ/forward/heading
0.0, // double azimuth, // azimuth of the lens entrance pupil center, degrees, clockwise looking from top 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 radius, // mm, distance from the rotation axis
0.0, // double height, // mm, up (was downwards) - from the origin point 0.0, // double height, // mm, up (was downwards) - from the origin point
...@@ -1344,9 +1480,12 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -1344,9 +1480,12 @@ import org.apache.commons.configuration.XMLConfiguration;
// ================ // ================
// PHG21 parameters // PHG21 parameters
// //
this.cartesian = false; // change
this.eyesisSubCameras[numStation][0]=new EyesisSubCameraParameters( //TODO: modify for lens adjustment defaults? this.eyesisSubCameras[numStation][0]=new EyesisSubCameraParameters( //TODO: modify for lens adjustment defaults?
this.cartesian,
defaultLensDistortionModel, defaultLensDistortionModel,
true, true,
0.0, 0.0, 0.0, // cartesian righ/forward/heading
0.0, // double azimuth, // azimuth of the lens entrance pupil center, degrees, clockwise looking from top 0.0, // double azimuth, // azimuth of the lens entrance pupil center, degrees, clockwise looking from top
46.57, // double radius, // mm, distance from the rotation axis 46.57, // double radius, // mm, distance from the rotation axis
0.0, // double height, // mm, up (was downwards) - from the origin point 0.0, // double height, // mm, up (was downwards) - from the origin point
...@@ -1369,8 +1508,10 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -1369,8 +1508,10 @@ import org.apache.commons.configuration.XMLConfiguration;
null, // elongation for c,b,a,a5,a6,a7,a8 null, // elongation for c,b,a,a5,a6,a7,a8
1.0); //channelWeightDefault 1.0); //channelWeightDefault
this.eyesisSubCameras[numStation][1]=new EyesisSubCameraParameters( //TODO: modify for lens adjustment defaults? this.eyesisSubCameras[numStation][1]=new EyesisSubCameraParameters( //TODO: modify for lens adjustment defaults?
this.cartesian,
defaultLensDistortionModel, defaultLensDistortionModel,
true, true,
0.0, 0.0, 0.0, // cartesian righ/forward/heading
21.0, // double azimuth, // azimuth of the lens entrance pupil center, degrees, clockwise looking from top 21.0, // double azimuth, // azimuth of the lens entrance pupil center, degrees, clockwise looking from top
50.36, // double radius, // mm, distance from the rotation axis 50.36, // double radius, // mm, distance from the rotation axis
-15.0, // double height, // mm, up (was downwards) - from the origin point -15.0, // double height, // mm, up (was downwards) - from the origin point
...@@ -1393,8 +1534,10 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -1393,8 +1534,10 @@ import org.apache.commons.configuration.XMLConfiguration;
null, // elongation for c,b,a,a5,a6,a7,a8 null, // elongation for c,b,a,a5,a6,a7,a8
1.0); //channelWeightDefault 1.0); //channelWeightDefault
this.eyesisSubCameras[numStation][2]=new EyesisSubCameraParameters( //TODO: modify for lens adjustment defaults? this.eyesisSubCameras[numStation][2]=new EyesisSubCameraParameters( //TODO: modify for lens adjustment defaults?
this.cartesian,
defaultLensDistortionModel, defaultLensDistortionModel,
true, true,
0.0, 0.0, 0.0, // cartesian righ/forward/heading
-21.0, // double azimuth, // azimuth of the lens entrance pupil center, degrees, clockwise looking from top -21.0, // double azimuth, // azimuth of the lens entrance pupil center, degrees, clockwise looking from top
50.36, // double radius, // mm, distance from the rotation axis 50.36, // double radius, // mm, distance from the rotation axis
-15.0, // double height, // mm, up (was downwards) - from the origin point -15.0, // double height, // mm, up (was downwards) - from the origin point
...@@ -1417,8 +1560,10 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -1417,8 +1560,10 @@ import org.apache.commons.configuration.XMLConfiguration;
null, // elongation for c,b,a,a5,a6,a7,a8 null, // elongation for c,b,a,a5,a6,a7,a8
1.0); //channelWeightDefault 1.0); //channelWeightDefault
this.eyesisSubCameras[numStation][3]=new EyesisSubCameraParameters( //TODO: modify for lens adjustment defaults? this.eyesisSubCameras[numStation][3]=new EyesisSubCameraParameters( //TODO: modify for lens adjustment defaults?
this.cartesian,
defaultLensDistortionModel, defaultLensDistortionModel,
true, true,
0.0, 0.0, 0.0, // cartesian righ/forward/heading
0.0, // double azimuth, // azimuth of the lens entrance pupil center, degrees, clockwise looking from top 0.0, // double azimuth, // azimuth of the lens entrance pupil center, degrees, clockwise looking from top
46.57, // double radius, // mm, distance from the rotation axis 46.57, // double radius, // mm, distance from the rotation axis
70.0, // double height, // mm, up (was downwards) - from the origin point 70.0, // double height, // mm, up (was downwards) - from the origin point
...@@ -1441,8 +1586,10 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -1441,8 +1586,10 @@ import org.apache.commons.configuration.XMLConfiguration;
null, // elongation for c,b,a,a5,a6,a7,a8 null, // elongation for c,b,a,a5,a6,a7,a8
1.0); //channelWeightDefault 1.0); //channelWeightDefault
this.eyesisSubCameras[numStation][4]=new EyesisSubCameraParameters( //TODO: modify for lens adjustment defaults? this.eyesisSubCameras[numStation][4]=new EyesisSubCameraParameters( //TODO: modify for lens adjustment defaults?
this.cartesian,
defaultLensDistortionModel, defaultLensDistortionModel,
true, true,
0.0, 0.0, 0.0, // cartesian righ/forward/heading
21.0, // double azimuth, // azimuth of the lens entrance pupil center, degrees, clockwise looking from top 21.0, // double azimuth, // azimuth of the lens entrance pupil center, degrees, clockwise looking from top
50.36, // double radius, // mm, distance from the rotation axis 50.36, // double radius, // mm, distance from the rotation axis
55.0, // double height, // mm, up (was downwards) - from the origin point 55.0, // double height, // mm, up (was downwards) - from the origin point
...@@ -1465,8 +1612,10 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -1465,8 +1612,10 @@ import org.apache.commons.configuration.XMLConfiguration;
null, // elongation for c,b,a,a5,a6,a7,a8 null, // elongation for c,b,a,a5,a6,a7,a8
1.0); //channelWeightDefault 1.0); //channelWeightDefault
this.eyesisSubCameras[numStation][5]=new EyesisSubCameraParameters( //TODO: modify for lens adjustment defaults? this.eyesisSubCameras[numStation][5]=new EyesisSubCameraParameters( //TODO: modify for lens adjustment defaults?
this.cartesian,
defaultLensDistortionModel, defaultLensDistortionModel,
true, true,
0.0, 0.0, 0.0, // cartesian righ/forward/heading
-21.0, // double azimuth, // azimuth of the lens entrance pupil center, degrees, clockwise looking from top -21.0, // double azimuth, // azimuth of the lens entrance pupil center, degrees, clockwise looking from top
50.36, // double radius, // mm, distance from the rotation axis 50.36, // double radius, // mm, distance from the rotation axis
55.0, // double height, // mm, up (was downwards) - from the origin point 55.0, // double height, // mm, up (was downwards) - from the origin point
...@@ -1489,8 +1638,10 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -1489,8 +1638,10 @@ import org.apache.commons.configuration.XMLConfiguration;
null, // elongation for c,b,a,a5,a6,a7,a8 null, // elongation for c,b,a,a5,a6,a7,a8
1.0); //channelWeightDefault 1.0); //channelWeightDefault
this.eyesisSubCameras[numStation][6]=new EyesisSubCameraParameters( //TODO: modify for lens adjustment defaults? this.eyesisSubCameras[numStation][6]=new EyesisSubCameraParameters( //TODO: modify for lens adjustment defaults?
this.cartesian,
defaultLensDistortionModel, defaultLensDistortionModel,
true, true,
0.0, 0.0, 0.0, // cartesian righ/forward/heading
52.47, // double azimuth, // azimuth of the lens entrance pupil center, degrees, clockwise looking from top 52.47, // double azimuth, // azimuth of the lens entrance pupil center, degrees, clockwise looking from top
76.45, // double radius, // mm, distance from the rotation axis 76.45, // double radius, // mm, distance from the rotation axis
35.0, // double height, // mm, up (was downwards) - from the origin point 35.0, // double height, // mm, up (was downwards) - from the origin point
...@@ -1513,8 +1664,10 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -1513,8 +1664,10 @@ import org.apache.commons.configuration.XMLConfiguration;
null, // elongation for c,b,a,a5,a6,a7,a8 null, // elongation for c,b,a,a5,a6,a7,a8
1.0); //channelWeightDefault 1.0); //channelWeightDefault
this.eyesisSubCameras[numStation][7]=new EyesisSubCameraParameters( //TODO: modify for lens adjustment defaults? this.eyesisSubCameras[numStation][7]=new EyesisSubCameraParameters( //TODO: modify for lens adjustment defaults?
this.cartesian,
defaultLensDistortionModel, defaultLensDistortionModel,
true, true,
0.0, 0.0, 0.0, // cartesian righ/forward/heading
59.13, // double azimuth, // azimuth of the lens entrance pupil center, degrees, clockwise looking from top 59.13, // double azimuth, // azimuth of the lens entrance pupil center, degrees, clockwise looking from top
91.65, // double radius, // mm, distance from the rotation axis 91.65, // double radius, // mm, distance from the rotation axis
20.0, // double height, // mm, up (was downwards) - from the origin point 20.0, // double height, // mm, up (was downwards) - from the origin point
...@@ -1537,8 +1690,10 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -1537,8 +1690,10 @@ import org.apache.commons.configuration.XMLConfiguration;
null, // elongation for c,b,a,a5,a6,a7,a8 null, // elongation for c,b,a,a5,a6,a7,a8
1.0); //channelWeightDefault 1.0); //channelWeightDefault
this.eyesisSubCameras[numStation][8]=new EyesisSubCameraParameters( //TODO: modify for lens adjustment defaults? this.eyesisSubCameras[numStation][8]=new EyesisSubCameraParameters( //TODO: modify for lens adjustment defaults?
this.cartesian,
defaultLensDistortionModel, defaultLensDistortionModel,
true, true,
0.0, 0.0, 0.0, // cartesian righ/forward/heading
42.16, // double azimuth, // azimuth of the lens entrance pupil center, degrees, clockwise looking from top 42.16, // double azimuth, // azimuth of the lens entrance pupil center, degrees, clockwise looking from top
63.43, // double radius, // mm, distance from the rotation axis 63.43, // double radius, // mm, distance from the rotation axis
20.0, // double height, // mm, up (was downwards) - from the origin point 20.0, // double height, // mm, up (was downwards) - from the origin point
...@@ -1561,8 +1716,10 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -1561,8 +1716,10 @@ import org.apache.commons.configuration.XMLConfiguration;
null, // elongation for c,b,a,a5,a6,a7,a8 null, // elongation for c,b,a,a5,a6,a7,a8
1.0); //channelWeightDefault 1.0); //channelWeightDefault
this.eyesisSubCameras[numStation][9]=new EyesisSubCameraParameters( //TODO: modify for lens adjustment defaults? this.eyesisSubCameras[numStation][9]=new EyesisSubCameraParameters( //TODO: modify for lens adjustment defaults?
this.cartesian,
defaultLensDistortionModel, defaultLensDistortionModel,
true, true,
0.0, 0.0, 0.0, // cartesian righ/forward/heading
52.47, // double azimuth, // azimuth of the lens entrance pupil center, degrees, clockwise looking from top 52.47, // double azimuth, // azimuth of the lens entrance pupil center, degrees, clockwise looking from top
76.45, // double radius, // mm, distance from the rotation axis 76.45, // double radius, // mm, distance from the rotation axis
-35.0, // double height, // mm, up (was downwards) - from the origin point -35.0, // double height, // mm, up (was downwards) - from the origin point
...@@ -1585,8 +1742,10 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -1585,8 +1742,10 @@ import org.apache.commons.configuration.XMLConfiguration;
null, // elongation for c,b,a,a5,a6,a7,a8 null, // elongation for c,b,a,a5,a6,a7,a8
1.0); //channelWeightDefault 1.0); //channelWeightDefault
this.eyesisSubCameras[numStation][10]=new EyesisSubCameraParameters( //TODO: modify for lens adjustment defaults? this.eyesisSubCameras[numStation][10]=new EyesisSubCameraParameters( //TODO: modify for lens adjustment defaults?
this.cartesian,
defaultLensDistortionModel, defaultLensDistortionModel,
true, true,
0.0, 0.0, 0.0, // cartesian righ/forward/heading
59.13, // double azimuth, // azimuth of the lens entrance pupil center, degrees, clockwise looking from top 59.13, // double azimuth, // azimuth of the lens entrance pupil center, degrees, clockwise looking from top
91.65, // double radius, // mm, distance from the rotation axis 91.65, // double radius, // mm, distance from the rotation axis
-50.0, // double height, // mm, up (was downwards) - from the origin point -50.0, // double height, // mm, up (was downwards) - from the origin point
...@@ -1609,8 +1768,10 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -1609,8 +1768,10 @@ import org.apache.commons.configuration.XMLConfiguration;
null, // elongation for c,b,a,a5,a6,a7,a8 null, // elongation for c,b,a,a5,a6,a7,a8
1.0); //channelWeightDefault 1.0); //channelWeightDefault
this.eyesisSubCameras[numStation][11]=new EyesisSubCameraParameters( //TODO: modify for lens adjustment defaults? this.eyesisSubCameras[numStation][11]=new EyesisSubCameraParameters( //TODO: modify for lens adjustment defaults?
this.cartesian,
defaultLensDistortionModel, defaultLensDistortionModel,
true, true,
0.0, 0.0, 0.0, // cartesian righ/forward/heading
42.16, // double azimuth, // azimuth of the lens entrance pupil center, degrees, clockwise looking from top 42.16, // double azimuth, // azimuth of the lens entrance pupil center, degrees, clockwise looking from top
63.43, // double radius, // mm, distance from the rotation axis 63.43, // double radius, // mm, distance from the rotation axis
-50.0, // double height, // mm, up (was downwards) - from the origin point -50.0, // double height, // mm, up (was downwards) - from the origin point
...@@ -1633,8 +1794,10 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -1633,8 +1794,10 @@ import org.apache.commons.configuration.XMLConfiguration;
null, // elongation for c,b,a,a5,a6,a7,a8 null, // elongation for c,b,a,a5,a6,a7,a8
1.0); //channelWeightDefault 1.0); //channelWeightDefault
this.eyesisSubCameras[numStation][12]=new EyesisSubCameraParameters( //TODO: modify for lens adjustment defaults? this.eyesisSubCameras[numStation][12]=new EyesisSubCameraParameters( //TODO: modify for lens adjustment defaults?
this.cartesian,
defaultLensDistortionModel, defaultLensDistortionModel,
true, true,
0.0, 0.0, 0.0, // cartesian righ/forward/heading
0.0, // double azimuth, // azimuth of the lens entrance pupil center, degrees, clockwise looking from top 0.0, // double azimuth, // azimuth of the lens entrance pupil center, degrees, clockwise looking from top
46.57, // double radius, // mm, distance from the rotation axis 46.57, // double radius, // mm, distance from the rotation axis
-70.0, // double height, // mm, up (was downwards) - from the origin point -70.0, // double height, // mm, up (was downwards) - from the origin point
...@@ -1657,8 +1820,10 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -1657,8 +1820,10 @@ import org.apache.commons.configuration.XMLConfiguration;
null, // elongation for c,b,a,a5,a6,a7,a8 null, // elongation for c,b,a,a5,a6,a7,a8
1.0); //channelWeightDefault 1.0); //channelWeightDefault
this.eyesisSubCameras[numStation][13]=new EyesisSubCameraParameters( //TODO: modify for lens adjustment defaults? this.eyesisSubCameras[numStation][13]=new EyesisSubCameraParameters( //TODO: modify for lens adjustment defaults?
this.cartesian,
defaultLensDistortionModel, defaultLensDistortionModel,
true, true,
0.0, 0.0, 0.0, // cartesian righ/forward/heading
21.0, // double azimuth, // azimuth of the lens entrance pupil center, degrees, clockwise looking from top 21.0, // double azimuth, // azimuth of the lens entrance pupil center, degrees, clockwise looking from top
50.36, // double radius, // mm, distance from the rotation axis 50.36, // double radius, // mm, distance from the rotation axis
-85.0, // double height, // mm, up (was downwards) - from the origin point -85.0, // double height, // mm, up (was downwards) - from the origin point
...@@ -1681,8 +1846,10 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -1681,8 +1846,10 @@ import org.apache.commons.configuration.XMLConfiguration;
null, // elongation for c,b,a,a5,a6,a7,a8 null, // elongation for c,b,a,a5,a6,a7,a8
1.0); //channelWeightDefault 1.0); //channelWeightDefault
this.eyesisSubCameras[numStation][14]=new EyesisSubCameraParameters( //TODO: modify for lens adjustment defaults? this.eyesisSubCameras[numStation][14]=new EyesisSubCameraParameters( //TODO: modify for lens adjustment defaults?
this.cartesian,
defaultLensDistortionModel, defaultLensDistortionModel,
true, true,
0.0, 0.0, 0.0, // cartesian righ/forward/heading
-21.0, // double azimuth, // azimuth of the lens entrance pupil center, degrees, clockwise looking from top -21.0, // double azimuth, // azimuth of the lens entrance pupil center, degrees, clockwise looking from top
50.36, // double radius, // mm, distance from the rotation axis 50.36, // double radius, // mm, distance from the rotation axis
-85.0, // double height, // mm, up (was downwards) - from the origin point -85.0, // double height, // mm, up (was downwards) - from the origin point
...@@ -1705,8 +1872,10 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -1705,8 +1872,10 @@ import org.apache.commons.configuration.XMLConfiguration;
null, // elongation for c,b,a,a5,a6,a7,a8 null, // elongation for c,b,a,a5,a6,a7,a8
1.0); //channelWeightDefault 1.0); //channelWeightDefault
this.eyesisSubCameras[numStation][15]=new EyesisSubCameraParameters( //TODO: modify for lens adjustment defaults? this.eyesisSubCameras[numStation][15]=new EyesisSubCameraParameters( //TODO: modify for lens adjustment defaults?
this.cartesian,
defaultLensDistortionModel, defaultLensDistortionModel,
true, true,
0.0, 0.0, 0.0, // cartesian righ/forward/heading
-52.47, // double azimuth, // azimuth of the lens entrance pupil center, degrees, clockwise looking from top -52.47, // double azimuth, // azimuth of the lens entrance pupil center, degrees, clockwise looking from top
76.45, // double radius, // mm, distance from the rotation axis 76.45, // double radius, // mm, distance from the rotation axis
-35.0, // double height, // mm, up (was downwards) - from the origin point -35.0, // double height, // mm, up (was downwards) - from the origin point
...@@ -1729,8 +1898,10 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -1729,8 +1898,10 @@ import org.apache.commons.configuration.XMLConfiguration;
null, // elongation for c,b,a,a5,a6,a7,a8 null, // elongation for c,b,a,a5,a6,a7,a8
1.0); //channelWeightDefault 1.0); //channelWeightDefault
this.eyesisSubCameras[numStation][16]=new EyesisSubCameraParameters( //TODO: modify for lens adjustment defaults? this.eyesisSubCameras[numStation][16]=new EyesisSubCameraParameters( //TODO: modify for lens adjustment defaults?
this.cartesian,
defaultLensDistortionModel, defaultLensDistortionModel,
true, true,
0.0, 0.0, 0.0, // cartesian righ/forward/heading
-42.16, // double azimuth, // azimuth of the lens entrance pupil center, degrees, clockwise looking from top -42.16, // double azimuth, // azimuth of the lens entrance pupil center, degrees, clockwise looking from top
63.43, // double radius, // mm, distance from the rotation axis 63.43, // double radius, // mm, distance from the rotation axis
-50.0, // double height, // mm, up (was downwards) - from the origin point -50.0, // double height, // mm, up (was downwards) - from the origin point
...@@ -1753,8 +1924,10 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -1753,8 +1924,10 @@ import org.apache.commons.configuration.XMLConfiguration;
null, // elongation for c,b,a,a5,a6,a7,a8 null, // elongation for c,b,a,a5,a6,a7,a8
1.0); //channelWeightDefault 1.0); //channelWeightDefault
this.eyesisSubCameras[numStation][17]=new EyesisSubCameraParameters( //TODO: modify for lens adjustment defaults? this.eyesisSubCameras[numStation][17]=new EyesisSubCameraParameters( //TODO: modify for lens adjustment defaults?
this.cartesian,
defaultLensDistortionModel, defaultLensDistortionModel,
true, true,
0.0, 0.0, 0.0, // cartesian righ/forward/heading
-59.13, // double azimuth, // azimuth of the lens entrance pupil center, degrees, clockwise looking from top -59.13, // double azimuth, // azimuth of the lens entrance pupil center, degrees, clockwise looking from top
91.65, // double radius, // mm, distance from the rotation axis 91.65, // double radius, // mm, distance from the rotation axis
-50.0, // double height, // mm, up (was downwards) - from the origin point -50.0, // double height, // mm, up (was downwards) - from the origin point
...@@ -1777,8 +1950,10 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -1777,8 +1950,10 @@ import org.apache.commons.configuration.XMLConfiguration;
null, // elongation for c,b,a,a5,a6,a7,a8 null, // elongation for c,b,a,a5,a6,a7,a8
1.0); //channelWeightDefault 1.0); //channelWeightDefault
this.eyesisSubCameras[numStation][18]=new EyesisSubCameraParameters( //TODO: modify for lens adjustment defaults? this.eyesisSubCameras[numStation][18]=new EyesisSubCameraParameters( //TODO: modify for lens adjustment defaults?
this.cartesian,
defaultLensDistortionModel, defaultLensDistortionModel,
true, true,
0.0, 0.0, 0.0, // cartesian righ/forward/heading
-52.47, // double azimuth, // azimuth of the lens entrance pupil center, degrees, clockwise looking from top -52.47, // double azimuth, // azimuth of the lens entrance pupil center, degrees, clockwise looking from top
76.45, // double radius, // mm, distance from the rotation axis 76.45, // double radius, // mm, distance from the rotation axis
35.0, // double height, // mm, up (was downwards) - from the origin point 35.0, // double height, // mm, up (was downwards) - from the origin point
...@@ -1801,8 +1976,10 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -1801,8 +1976,10 @@ import org.apache.commons.configuration.XMLConfiguration;
null, // elongation for c,b,a,a5,a6,a7,a8 null, // elongation for c,b,a,a5,a6,a7,a8
1.0); //channelWeightDefault 1.0); //channelWeightDefault
this.eyesisSubCameras[numStation][19]=new EyesisSubCameraParameters( //TODO: modify for lens adjustment defaults? this.eyesisSubCameras[numStation][19]=new EyesisSubCameraParameters( //TODO: modify for lens adjustment defaults?
this.cartesian,
defaultLensDistortionModel, defaultLensDistortionModel,
true, true,
0.0, 0.0, 0.0, // cartesian righ/forward/heading
-42.16, // double azimuth, // azimuth of the lens entrance pupil center, degrees, clockwise looking from top -42.16, // double azimuth, // azimuth of the lens entrance pupil center, degrees, clockwise looking from top
63.43, // double radius, // mm, distance from the rotation axis 63.43, // double radius, // mm, distance from the rotation axis
20.0, // double height, // mm, up (was downwards) - from the origin point 20.0, // double height, // mm, up (was downwards) - from the origin point
...@@ -1825,8 +2002,10 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -1825,8 +2002,10 @@ import org.apache.commons.configuration.XMLConfiguration;
null, // elongation for c,b,a,a5,a6,a7,a8 null, // elongation for c,b,a,a5,a6,a7,a8
1.0); //channelWeightDefault 1.0); //channelWeightDefault
this.eyesisSubCameras[numStation][20]=new EyesisSubCameraParameters( //TODO: modify for lens adjustment defaults? this.eyesisSubCameras[numStation][20]=new EyesisSubCameraParameters( //TODO: modify for lens adjustment defaults?
this.cartesian,
defaultLensDistortionModel, defaultLensDistortionModel,
true, true,
0.0, 0.0, 0.0, // cartesian righ/forward/heading
-59.13, // double azimuth, // azimuth of the lens entrance pupil center, degrees, clockwise looking from top -59.13, // double azimuth, // azimuth of the lens entrance pupil center, degrees, clockwise looking from top
91.65, // double radius, // mm, distance from the rotation axis 91.65, // double radius, // mm, distance from the rotation axis
20.0, // double height, // mm, up (was downwards) - from the origin point 20.0, // double height, // mm, up (was downwards) - from the origin point
...@@ -1854,8 +2033,10 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -1854,8 +2033,10 @@ import org.apache.commons.configuration.XMLConfiguration;
} else { } else {
// default setup for the 26 sub-cameras // 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 for (int i=0;i<8;i++) if (i<numSubCameras) this.eyesisSubCameras[numStation][i]=new EyesisSubCameraParameters( // top 8 cameras
this.cartesian,
defaultLensDistortionModel, defaultLensDistortionModel,
true, true,
0.0, 0.0, 0.0, // cartesian righ/forward/heading
45.0*i, // double azimuth, // azimuth of the lens entrance pupil center, degrees, clockwise looking from top 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 41.540, // double radius, // mm, distance from the rotation axis
42.883, // double height, // mm, up (was downwards?) - from the origin point 42.883, // double height, // mm, up (was downwards?) - from the origin point
...@@ -1878,8 +2059,10 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -1878,8 +2059,10 @@ import org.apache.commons.configuration.XMLConfiguration;
null, // elongation for c,b,a,a5,a6,a7,a8 null, // elongation for c,b,a,a5,a6,a7,a8
1.0); //channelWeightDefault 1.0); //channelWeightDefault
for (int i=8;i<16;i++) if (i<numSubCameras) this.eyesisSubCameras[numStation][i]=new EyesisSubCameraParameters( // middle 8 cameras for (int i=8;i<16;i++) if (i<numSubCameras) this.eyesisSubCameras[numStation][i]=new EyesisSubCameraParameters( // middle 8 cameras
this.cartesian,
defaultLensDistortionModel, defaultLensDistortionModel,
true, true,
0.0, 0.0, 0.0, // cartesian righ/forward/heading
45.0*(i-8), // double azimuth, // azimuth of the lens entrance pupil center, degrees, clockwise looking from top 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 54.525, // double radius, // mm, distance from the rotation axis
0.0, // double height, // mm, up (was downwards) - from the origin point 0.0, // double height, // mm, up (was downwards) - from the origin point
...@@ -1902,8 +2085,10 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -1902,8 +2085,10 @@ import org.apache.commons.configuration.XMLConfiguration;
null, // elongation for c,b,a,a5,a6,a7,a8 null, // elongation for c,b,a,a5,a6,a7,a8
1.0); //channelWeightDefault 1.0); //channelWeightDefault
for (int i=16;i<24;i++) if (i<numSubCameras) this.eyesisSubCameras[numStation][i]=new EyesisSubCameraParameters( // bottom eight cameras for (int i=16;i<24;i++) if (i<numSubCameras) this.eyesisSubCameras[numStation][i]=new EyesisSubCameraParameters( // bottom eight cameras
this.cartesian,
defaultLensDistortionModel, defaultLensDistortionModel,
true, true,
0.0, 0.0, 0.0, // cartesian righ/forward/heading
45.0*(i-16), // double azimuth, // azimuth of the lens entrance pupil center, degrees, clockwise looking from top 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 41.540, // double radius, // mm, distance from the rotation axis
-42.883, // double height, // mm, up (was downwards?) - from the origin point -42.883, // double height, // mm, up (was downwards?) - from the origin point
...@@ -1926,8 +2111,10 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -1926,8 +2111,10 @@ import org.apache.commons.configuration.XMLConfiguration;
null, // elongation for c,b,a,a5,a6,a7,a8 null, // elongation for c,b,a,a5,a6,a7,a8
1.0); //channelWeightDefault 1.0); //channelWeightDefault
if (24<numSubCameras) this.eyesisSubCameras[numStation][24]=new EyesisSubCameraParameters( if (24<numSubCameras) this.eyesisSubCameras[numStation][24]=new EyesisSubCameraParameters(
this.cartesian,
defaultLensDistortionModel, defaultLensDistortionModel,
false, false,
0.0, 0.0, 0.0, // cartesian righ/forward/heading
90, // double azimuth, // azimuth of the lens entrance pupil center, degrees, clockwise looking from top 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 12.025, // double radius, // mm, distance from the rotation axis
-807.0, // double height, // mm, up - from the origin point -807.0, // double height, // mm, up - from the origin point
...@@ -1950,8 +2137,10 @@ import org.apache.commons.configuration.XMLConfiguration; ...@@ -1950,8 +2137,10 @@ import org.apache.commons.configuration.XMLConfiguration;
null, // elongation for c,b,a,a5,a6,a7,a8 null, // elongation for c,b,a,a5,a6,a7,a8
8.0); //channelWeightDefault (was 4) 8.0); //channelWeightDefault (was 4)
if (25<numSubCameras) this.eyesisSubCameras[numStation][25]=new EyesisSubCameraParameters( if (25<numSubCameras) this.eyesisSubCameras[numStation][25]=new EyesisSubCameraParameters(
this.cartesian,
defaultLensDistortionModel, defaultLensDistortionModel,
false, false,
0.0, 0.0, 0.0, // cartesian righ/forward/heading
270, // double azimuth, // azimuth of the lens entrance pupil center, degrees, clockwise looking from top 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 12.025, // double radius, // mm, distance from the rotation axis
-841.0, // double height, // mm, up - from the origin point -841.0, // double height, // mm, up - from the origin point
......
...@@ -25,12 +25,17 @@ import java.util.Properties; ...@@ -25,12 +25,17 @@ import java.util.Properties;
public class EyesisSubCameraParameters{ public class EyesisSubCameraParameters{
// origin is on the rotation axis of the tube body closest to the goniometer horizontal axis // origin is on the rotation axis of the tube body closest to the goniometer horizontal axis
public boolean cartesian = false; // cartesian coordinates mode (false - cylindrical)
public int lensDistortionModel=0; public int lensDistortionModel=0;
public boolean enableNoLaser=true; // enable images for this channel w/o matched laser pointer public boolean enableNoLaser=true; // enable images for this channel w/o matched laser pointer
public double right; // distance to the right (radius*sin(azimuth))
public double forward; // distance forward (radius*cos(azimuth))
public double heading; // absolute heading in degrees (used in cartesian mode)
public double azimuth; // azimuth of the lens entrance pupil center, degrees, clockwise looking from top public double azimuth; // azimuth of the lens entrance pupil center, degrees, clockwise looking from top
public double radius; // mm, distance from the rotation axis public double radius; // mm, distance from the rotation axis
public double height; // mm, up - from the origin point public double height; // mm, up - from the origin point
public double phi; // degrees, optical axis from azimuth/r vector, clockwise public double phi; // degrees, optical axis from azimuth/r vector, clockwise (absolute if cylindrical = false)
public double theta; // degrees, optical axis from the eyesis horizon, positive - up public double theta; // degrees, optical axis from the eyesis horizon, positive - up
public double psi; // degrees, rotation (of the sensor) around the optical axis. Positive if camera is rotated clockwise looking to the target public double psi; // degrees, rotation (of the sensor) around the optical axis. Positive if camera is rotated clockwise looking to the target
public double focalLength=4.5; public double focalLength=4.5;
...@@ -68,8 +73,12 @@ import java.util.Properties; ...@@ -68,8 +73,12 @@ import java.util.Properties;
*/ */
public EyesisSubCameraParameters( public EyesisSubCameraParameters(
boolean cartesian,
int lensDistortionModel, int lensDistortionModel,
boolean enableNoLaser, boolean enableNoLaser,
double right, // distance to the right (radius*sin(azimuth))
double forward, // distance forward (radius*cos(azimuth))
double heading, // used in cartesian mode
double azimuth, // azimuth of the lens entrance pupil center, degrees, clockwise looking from top double azimuth, // azimuth of the lens entrance pupil center, degrees, clockwise looking from top
double radius, // mm, distance from the rotation axis double radius, // mm, distance from the rotation axis
double height, // mm, up from the origin point double height, // mm, up from the origin point
...@@ -92,8 +101,13 @@ import java.util.Properties; ...@@ -92,8 +101,13 @@ import java.util.Properties;
double [][] r_od, // elongation for c,b,a,a5,a6,a7,a8 double [][] r_od, // elongation for c,b,a,a5,a6,a7,a8
double channelWeightDefault double channelWeightDefault
){ ){
this.cartesian = cartesian;
this.lensDistortionModel=lensDistortionModel; this.lensDistortionModel=lensDistortionModel;
this.enableNoLaser=enableNoLaser; this.enableNoLaser=enableNoLaser;
this.right = right;
this.forward = forward;
this.heading = heading;
this.azimuth=azimuth; this.azimuth=azimuth;
this.radius=radius; this.radius=radius;
this.height=height; this.height=height;
...@@ -123,12 +137,17 @@ import java.util.Properties; ...@@ -123,12 +137,17 @@ import java.util.Properties;
this.defectsXY=null; // pixel defects coordinates list (starting with worst) this.defectsXY=null; // pixel defects coordinates list (starting with worst)
this.defectsDiff=null; // pixel defects value (diff from average of neighbors), matching defectsXY this.defectsDiff=null; // pixel defects value (diff from average of neighbors), matching defectsXY
updateCartesian(); // set alternative
} }
// defects are not cloned! // defects are not cloned!
public EyesisSubCameraParameters clone() { public EyesisSubCameraParameters clone() {
return new EyesisSubCameraParameters( return new EyesisSubCameraParameters(
this.cartesian,
this.lensDistortionModel, this.lensDistortionModel,
this.enableNoLaser, this.enableNoLaser,
this.right,
this.forward,
this.heading,
this.azimuth, this.azimuth,
this.radius, this.radius,
this.height, this.height,
...@@ -160,8 +179,12 @@ import java.util.Properties; ...@@ -160,8 +179,12 @@ import java.util.Properties;
} }
// TODO: add/restore new properties // TODO: add/restore new properties
public void setProperties(String prefix,Properties properties){ public void setProperties(String prefix,Properties properties){
properties.setProperty(prefix+"cartesian",this.cartesian+"");
properties.setProperty(prefix+"lensDistortionModel",this.lensDistortionModel+""); properties.setProperty(prefix+"lensDistortionModel",this.lensDistortionModel+"");
properties.setProperty(prefix+"enableNoLaser",this.enableNoLaser+""); properties.setProperty(prefix+"enableNoLaser",this.enableNoLaser+"");
properties.setProperty(prefix+"right",this.right+"");
properties.setProperty(prefix+"heading",this.heading+"");
properties.setProperty(prefix+"forward",this.forward+"");
properties.setProperty(prefix+"azimuth",this.azimuth+""); properties.setProperty(prefix+"azimuth",this.azimuth+"");
properties.setProperty(prefix+"radius",this.radius+""); properties.setProperty(prefix+"radius",this.radius+"");
properties.setProperty(prefix+"height",this.height+""); properties.setProperty(prefix+"height",this.height+"");
...@@ -194,8 +217,17 @@ import java.util.Properties; ...@@ -194,8 +217,17 @@ import java.util.Properties;
getProperties(prefix,properties, -1); getProperties(prefix,properties, -1);
} }
public void getProperties(String prefix,Properties properties, int channel){ public void getProperties(String prefix,Properties properties, int channel){
if (properties.getProperty(prefix+"cartesian")!=null)
this.cartesian=Boolean.parseBoolean(properties.getProperty(prefix+"cartesian"));
if (properties.getProperty(prefix+"lensDistortionModel")!=null) if (properties.getProperty(prefix+"lensDistortionModel")!=null)
this.lensDistortionModel=Integer.parseInt(properties.getProperty(prefix+"lensDistortionModel")); this.lensDistortionModel=Integer.parseInt(properties.getProperty(prefix+"lensDistortionModel"));
if (properties.getProperty(prefix+"right")!=null)
this.right=Double.parseDouble(properties.getProperty(prefix+"right"));
if (properties.getProperty(prefix+"forward")!=null)
this.forward=Double.parseDouble(properties.getProperty(prefix+"forward"));
if (properties.getProperty(prefix+"heading")!=null)
this.heading=Double.parseDouble(properties.getProperty(prefix+"heading"));
if (properties.getProperty(prefix+"azimuth")!=null) if (properties.getProperty(prefix+"azimuth")!=null)
this.azimuth=Double.parseDouble(properties.getProperty(prefix+"azimuth")); this.azimuth=Double.parseDouble(properties.getProperty(prefix+"azimuth"));
if (properties.getProperty(prefix+"radius")!=null) if (properties.getProperty(prefix+"radius")!=null)
...@@ -264,4 +296,21 @@ import java.util.Properties; ...@@ -264,4 +296,21 @@ import java.util.Properties;
public double getChannelWeightDefault(){ public double getChannelWeightDefault(){
return this.channelWeightDefault; return this.channelWeightDefault;
} }
public void updateCartesian(){ // set alternative parameters
if (cartesian) {
this.azimuth = Math.atan2(this.right, this.forward)*180.0/Math.PI;
this.radius = Math.sqrt(this.forward*this.forward + this.right*this.right);
this.phi = this.heading - this.azimuth;
} else {
this.forward = this.radius * Math.cos(Math.PI*this.azimuth/180.0);
this.right = this.radius * Math.sin(Math.PI*this.azimuth/180.0);
this.heading = this.phi + this.azimuth;
}
}
public void setCartesian(boolean cartesian){
if (this.cartesian == cartesian) return; // already in this mode
updateCartesian();
this.cartesian = cartesian;
}
} }
...@@ -900,10 +900,11 @@ horizontal axis: ...@@ -900,10 +900,11 @@ horizontal axis:
distortionCalibrationData.initImageSet(eyesisCameraParameters); distortionCalibrationData.initImageSet(eyesisCameraParameters);
// Set initial azimuth and elevation // Set initial azimuth and elevation
double [] initialAzEl=distortionCalibrationData.getAzEl(imgWithMaxPointers); // Set initial heading and elevation
double [] initialHeadEl=distortionCalibrationData.getHeadEl(imgWithMaxPointers);
// set goniometer horizontal axis angle and goniometer axial angles in all images // set goniometer horizontal axis angle and goniometer axial angles in all images
distortionCalibrationData.setGHGA(-initialAzEl[1], -initialAzEl[0]); distortionCalibrationData.setGHGA(-initialHeadEl[1], -initialHeadEl[0]);
if (debug_level > 1) System.out.println("Initial Azimuth and Elevation are set to az="+IJ.d2s(-initialAzEl[0],2)+", elvation="+IJ.d2s(-initialAzEl[1],2)); if (debug_level > 1) System.out.println("Initial Heading and Elevation are set to heading="+IJ.d2s(-initialHeadEl[0],2)+", elvation="+IJ.d2s(-initialHeadEl[1],2));
lensDistortions.copySensorConstants(eyesisCameraParameters); // copy from the first channel lensDistortions.copySensorConstants(eyesisCameraParameters); // copy from the first channel
// lensDistortions.fittingStrategy will be defined later, no need to // lensDistortions.fittingStrategy will be defined later, no need to
......
...@@ -95,6 +95,7 @@ import Jama.Matrix; ...@@ -95,6 +95,7 @@ import Jama.Matrix;
public LensDistortionParameters( public LensDistortionParameters(
// LensDistortionParameters lensDistortionParameters, // LensDistortionParameters lensDistortionParameters,
boolean isTripod, boolean isTripod,
boolean cartesian,
double [][] interParameterDerivatives, //partial derivative matrix from subcamera-camera-goniometer to single camera (12x21) if null - just values, no derivatives double [][] interParameterDerivatives, //partial derivative matrix from subcamera-camera-goniometer to single camera (12x21) if null - just values, no derivatives
double [] parVect, double [] parVect,
boolean [] mask, // calculate only selected derivatives (all parVect values are still boolean [] mask, // calculate only selected derivatives (all parVect values are still
...@@ -105,6 +106,7 @@ import Jama.Matrix; ...@@ -105,6 +106,7 @@ import Jama.Matrix;
lensCalcInterParamers( // changed name to move calcInterParamers method from enclosing class lensCalcInterParamers( // changed name to move calcInterParamers method from enclosing class
this, this,
isTripod, isTripod,
cartesian,
interParameterDerivatives, //partial derivative matrix from subcamera-camera-goniometer to single camera (12x21) if null - just values, no derivatives interParameterDerivatives, //partial derivative matrix from subcamera-camera-goniometer to single camera (12x21) if null - just values, no derivatives
parVect, parVect,
mask // calculate only selected derivatives (all parVect values are still mask // calculate only selected derivatives (all parVect values are still
...@@ -1854,19 +1856,22 @@ dPXmmc/dphi= ...@@ -1854,19 +1856,22 @@ dPXmmc/dphi=
public void lensCalcInterParamers( public void lensCalcInterParamers(
LensDistortionParameters lensDistortionParameters, LensDistortionParameters lensDistortionParameters,
boolean isTripod, boolean isTripod,
boolean cartesian,
double [][] interParameterDerivatives, //partial derivative matrix from subcamera-camera-goniometer to single camera (12x21) if null - just values, no derivatives double [][] interParameterDerivatives, //partial derivative matrix from subcamera-camera-goniometer to single camera (12x21) if null - just values, no derivatives
double [] parVect, double [] parVect,
boolean [] mask // calculate only selected derivatives (all parVect values are still boolean [] mask // calculate only selected derivatives (all parVect values are still
// boolean calculateDerivatives // calculate this.interParameterDerivatives -derivatives array (false - just this.values)
){ ){
// LensDistortionParameters lensDistortionParameters=this;
boolean calculateDerivatives=(interParameterDerivatives!=null); // calculate this.interParameterDerivatives -derivatives array (false - just this.values) boolean calculateDerivatives=(interParameterDerivatives!=null); // calculate this.interParameterDerivatives -derivatives array (false - just this.values)
// change meaning of goniometerHorizontal (tripod vertical) and goniometerAxial (tripod horizontal) // change meaning of goniometerHorizontal (tripod vertical) and goniometerAxial (tripod horizontal)
// boolean isTripod=this.fittingStrategy.distortionCalibrationData.eyesisCameraParameters.isTripod;
double azimuth=parVect[0]; // Alternative variables for cartesian/cylindrical modes
double radius= parVect[1]; double azimuth_cyl= cartesian? Double.NaN: parVect[0];
double height= parVect[2]; double right_cart= cartesian? parVect[0] : Double.NaN;
double phi= parVect[3]; double radius_cyl= cartesian? Double.NaN: parVect[1];
double forward_cart= cartesian? parVect[1]: Double.NaN;
double height= parVect[2];
double phi_cyl= cartesian? Double.NaN: parVect[3];
double heading_cart= cartesian? parVect[3]: Double.NaN;
double theta= parVect[4]; double theta= parVect[4];
double psi= parVect[5]; double psi= parVect[5];
double goniometerHorizontal=parVect[6]; double goniometerHorizontal=parVect[6];
...@@ -1885,10 +1890,14 @@ dPXmmc/dphi= ...@@ -1885,10 +1890,14 @@ dPXmmc/dphi=
double sPS= Math.sin(psi*Math.PI/180); // subCam.psi double sPS= Math.sin(psi*Math.PI/180); // subCam.psi
double cTH= Math.cos(theta*Math.PI/180); // subCam.theta double cTH= Math.cos(theta*Math.PI/180); // subCam.theta
double sTH= Math.sin(theta*Math.PI/180); // subCam.theta double sTH= Math.sin(theta*Math.PI/180); // subCam.theta
double cAZP= Math.cos((azimuth+phi)*Math.PI/180); //subCam.azimuth+subCam.phi
double sAZP= Math.sin((azimuth+phi)*Math.PI/180); //subCam.azimuth+subCam.phi double cAZP= Math.cos((cartesian?heading_cart:(azimuth_cyl+phi_cyl))*Math.PI/180); //subCam.azimuth+subCam.phi
double cAZ= Math.cos(azimuth*Math.PI/180); //subCam.azimuth double sAZP= Math.sin((cartesian?heading_cart:(azimuth_cyl+phi_cyl))*Math.PI/180); //subCam.azimuth+subCam.phi
double sAZ= Math.sin(azimuth*Math.PI/180); //subCam.azimuth
// renaming the following 2 to be replaced for cartesian coordinates
double cAZ_cyl= Math.cos(azimuth_cyl*Math.PI/180); //subCam.azimuth
double sAZ_cyl= Math.sin(azimuth_cyl*Math.PI/180); //subCam.azimuth
double cGA= Math.cos(goniometerAxial*Math.PI/180); //eyesisCameraParameters.goniometerAxial double cGA= Math.cos(goniometerAxial*Math.PI/180); //eyesisCameraParameters.goniometerAxial
double sGA= Math.sin(goniometerAxial*Math.PI/180); //eyesisCameraParameters.goniometerAxial double sGA= Math.sin(goniometerAxial*Math.PI/180); //eyesisCameraParameters.goniometerAxial
double cGH= Math.cos(goniometerHorizontal*Math.PI/180); //eyesisCameraParameters.goniometerHorizontal double cGH= Math.cos(goniometerHorizontal*Math.PI/180); //eyesisCameraParameters.goniometerHorizontal
...@@ -1940,7 +1949,10 @@ dPXmmc/dphi= ...@@ -1940,7 +1949,10 @@ dPXmmc/dphi=
| Yey | = | height+centerAboveHorizontal | + |Yc3| | Yey | = | height+centerAboveHorizontal | + |Yc3|
| Zey | | r * cos (azimuth) | |Zc3| | Zey | | r * cos (azimuth) | |Zc3|
*/ */
double [][] aT1={{radius*sAZ},{(height+centerAboveHorizontal)},{radius*cAZ}}; // {{subCam.radius*sAZ},{subCam.height},{subCam.radius*cAZ}}; double [][] aT1_cyl= {{radius_cyl*sAZ_cyl},{(height+centerAboveHorizontal)},{radius_cyl*cAZ_cyl}}; // {{subCam.radius*sAZ},{subCam.height},{subCam.radius*cAZ}};
double [][] aT1_cart={{right_cart}, {(height+centerAboveHorizontal)},{forward_cart}}; // {{subCam.radius*sAZ},{subCam.height},{subCam.radius*cAZ}};
double [][] aT1= cartesian ? aT1_cart : aT1_cyl;
Matrix T1=new Matrix(aT1); Matrix T1=new Matrix(aT1);
/** /**
...@@ -2047,13 +2059,6 @@ dPXmmc/dphi= ...@@ -2047,13 +2059,6 @@ dPXmmc/dphi=
lensDistortionParameters.pitch=extrinsicParams[4]; lensDistortionParameters.pitch=extrinsicParams[4];
lensDistortionParameters.yaw= extrinsicParams[3]; lensDistortionParameters.yaw= extrinsicParams[3];
lensDistortionParameters.roll= extrinsicParams[5]; lensDistortionParameters.roll= extrinsicParams[5];
// lensDistortionParameters.focalLength=parVect[15]; //subCam.focalLength;
// lensDistortionParameters.px0=parVect[16]; //subCam.px0;
// lensDistortionParameters.py0=parVect[17]; //subCam.py0;
// lensDistortionParameters.distortionA5=parVect[18]; //subCam.distortion5;
// lensDistortionParameters.distortionA=parVect[19]; //subCam.distortionA;
// lensDistortionParameters.distortionB=parVect[20]; //subCam.distortionB;
// lensDistortionParameters.distortionC=parVect[21]; //subCam.distortionC;
lensDistortionParameters.focalLength=parVect[17]; //subCam.focalLength; lensDistortionParameters.focalLength=parVect[17]; //subCam.focalLength;
lensDistortionParameters.px0=parVect[18]; //subCam.px0; lensDistortionParameters.px0=parVect[18]; //subCam.px0;
...@@ -2068,8 +2073,6 @@ dPXmmc/dphi= ...@@ -2068,8 +2073,6 @@ dPXmmc/dphi=
lensDistortionParameters.r_xy=new double [6][2]; lensDistortionParameters.r_xy=new double [6][2];
lensDistortionParameters.r_od=new double [7][2]; lensDistortionParameters.r_od=new double [7][2];
// parVect here is o[0],d[0],{x[0],y[0],o[1],d[1]}, {} = same term
int index=27; int index=27;
for (int i=0;i<lensDistortionParameters.r_od.length;i++){ for (int i=0;i<lensDistortionParameters.r_od.length;i++){
...@@ -2268,10 +2271,13 @@ dPXmmc/dphi= ...@@ -2268,10 +2271,13 @@ dPXmmc/dphi=
Which parameters affect which matrices Which parameters affect which matrices
R1 | R2 | R3 | R4 | R5 | R6 | R7 | R8 || T0 | T1 | T2 | T3 | R1 | R2 | R3 | R4 | R5 | R6 | R7 | R8 || T0 | T1 | T2 | T3 |
0 public double azimuth; // | | + | | | | | || | + | | | 0 public double azimuth_cyl; // | | + | | | | | || | + | | |
1 public double radius; // | | | | | | | || | + | | | 1 public double radius_cyl; // | | | | | | | || | + | | |
0 public double right_cart; // | | | | | | | || | + | | |
1 public double forward_cart; // | | | | | | | || | + | | |
2 public double height; // | | | | | | | || | + | | | 2 public double height; // | | | | | | | || | + | | |
3 public double phi; // | | + | | | | | || | | | | 3 public double phi_cyl; // | | + | | | | | || | | | |
3 public double head_cart; // | | + | | | | | || | | | |
4 public double theta; // | + | | | | | | || | | | | 4 public double theta; // | + | | | | | | || | | | |
5 public double psi; // + | | | | | | | || | | | | 5 public double psi; // + | | | | | | | || | | | |
6 public double goniometerHorizontal; // | | | | | + | | || | | | | 6 public double goniometerHorizontal; // | | | | | + | | || | | | |
...@@ -2293,41 +2299,70 @@ dPXmmc/dphi= ...@@ -2293,41 +2299,70 @@ dPXmmc/dphi=
System.out.println("calcInterParamers(): parVect["+i+"]="+parVect[i]); System.out.println("calcInterParamers(): parVect["+i+"]="+parVect[i]);
} }
} }
//0 public double azimuth; // azimuth of the lens entrance pupil center, degrees, clockwise looking from top //0 public double right_cart; // right displacement of the lens entrance pupil center, mm
if (mask[0]) { if (mask[0]) {
double [][] adR3_azimuth={{-sAZP,0.0,cAZP},{0.0,0.0,0.0},{-cAZP,0.0,-sAZP}}; if (cartesian) {
Matrix dR3_azimuth=new Matrix(adR3_azimuth); double [][] adT1_right_cart={{1.0},{0.0},{0.0}};
// double [][] adT1_azimuth={{radius*cAZ},{height},{-radius*sAZ}}; //{{subCam.radius*cAZ},{subCam.height},{-subCam.radius*sAZ}} Matrix dT1_right_cart=new Matrix(adT1_right_cart);
double [][] adT1_azimuth={{radius*cAZ},{0.0},{-radius*sAZ}}; //{{subCam.radius*cAZ},{subCam.height},{-subCam.radius*sAZ}} Matrix dMA_right_cart=new Matrix(3,3,0.0); // zero
Matrix dT1_azimuth=new Matrix(adT1_azimuth); Matrix dMB_right_cart=R8.times(R7.times(R6.times(R5.times(R4.times(dT1_right_cart)))));
interParameterDerivatives[0]=d_parametersFromMAMB(dMA_right_cart,dMB_right_cart,MA,MB,false);
Matrix dMA_azimuth=R8.times(R7.times(R6.times(R5.times(R4.times(dR3_azimuth.times(R2.times(R1))))))); if (this.debugLevel>2) {
Matrix dMB0_azimuth=R8.times(R7.times(R6.times(R5.times(R4.times(dT1_azimuth))))); System.out.println("dMA_right_cart:");
Matrix dMB_azimuth=dMB0_azimuth.plus(dMA_azimuth.times(T0)); // new term dMA_right_cart.print(10, 5);
interParameterDerivatives[0]=d_parametersFromMAMB(dMA_azimuth,dMB_azimuth,MA,MB,true); // all after 6 are 0; System.out.println("dMB_right_cart:");
if (this.debugLevel>2) { dMB_right_cart.print(10, 5);
System.out.println("dMA_azimuth:"); System.out.println("interParameterDerivatives[0]="+sprintfArray(interParameterDerivatives[0]));
dMA_azimuth.print(10, 5); }
System.out.println("dMB_azimuth:"); } else {
dMB_azimuth.print(10, 5); //0 public double azimuth; // azimuth of the lens entrance pupil center, degrees, clockwise looking from top
System.out.println("interParameterDerivatives[0]="+sprintfArray(interParameterDerivatives[0])); double [][] adR3_azimuth_cyl={{-sAZP,0.0,cAZP},{0.0,0.0,0.0},{-cAZP,0.0,-sAZP}};
} Matrix dR3_azimuth_cyl=new Matrix(adR3_azimuth_cyl);
double [][] adT1_azimuth_cyl={{radius_cyl*cAZ_cyl},{0.0},{-radius_cyl*sAZ_cyl}}; //{{subCam.radius*cAZ},{subCam.height},{-subCam.radius*sAZ}}
Matrix dT1_azimuth_cyl=new Matrix(adT1_azimuth_cyl);
Matrix dMA_azimuth_cyl=R8.times(R7.times(R6.times(R5.times(R4.times(dR3_azimuth_cyl.times(R2.times(R1)))))));
Matrix dMB0_azimuth_cyl=R8.times(R7.times(R6.times(R5.times(R4.times(dT1_azimuth_cyl)))));
Matrix dMB_azimuth_cyl=dMB0_azimuth_cyl.plus(dMA_azimuth_cyl.times(T0)); // new term
interParameterDerivatives[0]=d_parametersFromMAMB(dMA_azimuth_cyl,dMB_azimuth_cyl,MA,MB,true); // all after 6 are 0;
if (this.debugLevel>2) {
System.out.println("dMA_azimuth_cyl:");
dMA_azimuth_cyl.print(10, 5);
System.out.println("dMB_azimuth_cyl:");
dMB_azimuth_cyl.print(10, 5);
System.out.println("interParameterDerivatives[0]="+sprintfArray(interParameterDerivatives[0]));
}
}
} else interParameterDerivatives[0]=null; } else interParameterDerivatives[0]=null;
//1 public double radius; // mm, distance from the rotation axis //1 public double radius; // mm, distance from the rotation axis
if (mask[1]) { if (mask[1]) {
double [][] adT1_radius={{sAZ},{0.0},{cAZ}}; //{{subCam.radius*sAZ},{0.0},{subCam.radius*cAZ}} if (cartesian) {
Matrix dT1_radius=new Matrix(adT1_radius); double [][] adT1_forward_cart={{0.0},{0.0},{1.0}}; //{{subCam.radius*sAZ},{0.0},{subCam.radius*cAZ}}
Matrix dMA_radius=new Matrix(3,3,0.0); Matrix dT1_forward_cart=new Matrix(adT1_forward_cart);
Matrix dMB_radius=R8.times(R7.times(R6.times(R5.times(R4.times(dT1_radius))))); Matrix dMA_forward_cart=new Matrix(3,3,0.0);
interParameterDerivatives[1]=d_parametersFromMAMB(dMA_radius,dMB_radius,MA,MB,false); // all after 6 are 0; Matrix dMB_forward_cart=R8.times(R7.times(R6.times(R5.times(R4.times(dT1_forward_cart)))));
if (this.debugLevel>2) { interParameterDerivatives[1]=d_parametersFromMAMB(dMA_forward_cart,dMB_forward_cart,MA,MB,false); // all after 6 are 0;
System.out.println("dMA_radius:"); if (this.debugLevel>2) {
dMA_radius.print(10, 5); System.out.println("dMA_forward_cart:");
System.out.println("dMB_radius:"); dMA_forward_cart.print(10, 5);
dMB_radius.print(10, 5); System.out.println("dMB_forward_cart:");
System.out.println("interParameterDerivatives[1]="+sprintfArray(interParameterDerivatives[1])); dMB_forward_cart.print(10, 5);
} System.out.println("interParameterDerivatives[1]="+sprintfArray(interParameterDerivatives[1]));
}
} else {
double [][] adT1_radius_cyl={{sAZ_cyl},{0.0},{cAZ_cyl}}; //{{subCam.radius*sAZ},{0.0},{subCam.radius*cAZ}}
Matrix dT1_radius_cyl=new Matrix(adT1_radius_cyl);
Matrix dMA_radius_cyl=new Matrix(3,3,0.0);
Matrix dMB_radius_cyl=R8.times(R7.times(R6.times(R5.times(R4.times(dT1_radius_cyl)))));
interParameterDerivatives[1]=d_parametersFromMAMB(dMA_radius_cyl,dMB_radius_cyl,MA,MB,false); // all after 6 are 0;
if (this.debugLevel>2) {
System.out.println("dMA_radius_cyl:");
dMA_radius_cyl.print(10, 5);
System.out.println("dMB_radius_cyl:");
dMB_radius_cyl.print(10, 5);
System.out.println("interParameterDerivatives[1]="+sprintfArray(interParameterDerivatives[1]));
}
}
} else interParameterDerivatives[1]=null; } else interParameterDerivatives[1]=null;
//2 public double height; // mm, downwards - from the origin point //2 public double height; // mm, downwards - from the origin point
if (mask[2]) { if (mask[2]) {
...@@ -2345,7 +2380,7 @@ dPXmmc/dphi= ...@@ -2345,7 +2380,7 @@ dPXmmc/dphi=
} }
} else interParameterDerivatives[2]=null; } else interParameterDerivatives[2]=null;
//3 public double phi; // degrees, optical axis from azimuth/r vector, clockwise //3 public double phi; // degrees, optical axis from azimuth/r vector, clockwise
if (mask[3]) { if (mask[3]) { // here the same for cartesian
double [][] adR3_phi={{-sAZP,0.0,cAZP},{0.0,0.0,0.0},{-cAZP,0.0,-sAZP}}; // same as adR3_azimuth double [][] adR3_phi={{-sAZP,0.0,cAZP},{0.0,0.0,0.0},{-cAZP,0.0,-sAZP}}; // same as adR3_azimuth
Matrix dR3_phi=new Matrix(adR3_phi); // same as dR3_azimuth Matrix dR3_phi=new Matrix(adR3_phi); // same as dR3_azimuth
Matrix dMA_phi=R8.times(R7.times(R6.times(R5.times(R4.times(dR3_phi.times(R2.times(R1))))))); //same as dMA_azimuth Matrix dMA_phi=R8.times(R7.times(R6.times(R5.times(R4.times(dR3_phi.times(R2.times(R1))))))); //same as dMA_azimuth
......
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