Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
I
imagej-elphel
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
3
Issues
3
List
Board
Labels
Milestones
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Elphel
imagej-elphel
Commits
5f0e3426
Commit
5f0e3426
authored
Jun 09, 2015
by
Andrey Filippov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
more on 2-sensor focusing machine
parent
76bf54e4
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
236 additions
and
32 deletions
+236
-32
Aberration_Calibration.java
src/main/java/Aberration_Calibration.java
+85
-24
CalibrationHardwareInterface.java
src/main/java/CalibrationHardwareInterface.java
+10
-2
DistortionCalibrationData.java
src/main/java/DistortionCalibrationData.java
+61
-0
LensAdjustment.java
src/main/java/LensAdjustment.java
+72
-4
PatternParameters.java
src/main/java/PatternParameters.java
+8
-2
No files found.
src/main/java/Aberration_Calibration.java
View file @
5f0e3426
...
...
@@ -374,10 +374,10 @@ public static MatchSimulatedPattern.DistortionParameters DISTORTION =new MatchSi
public static PatternParameters PATTERN_PARAMETERS=new PatternParameters(
viewMap,
1, // initial number of stations
3022.6, // double patternWidth; // pattern full width in mm
2667.0, // double patternHeight; // pattern full height in mm
41.6667, // patternHalfPeriod; // distance between opposite sign nodes
5.0 // double patternTilt; // pattern tilt (degrees) - U clockwise from X-right (V clockwise from Y-down)
7010.0, //
3022.6, // double patternWidth; // pattern full width in mm
3073.0, //
2667.0, // double patternHeight; // pattern full height in mm
41.
570, //41.
6667, // patternHalfPeriod; // distance between opposite sign nodes
5.0
// double patternTilt; // pattern tilt (degrees) - U clockwise from X-right (V clockwise from Y-down)
);
// public static LensDistortionParameters LENS_DISTORTION_PARAMETERS=new LensDistortionParameters(
...
...
@@ -450,10 +450,16 @@ public static MatchSimulatedPattern.DistortionParameters DISTORTION =new MatchSi
// {-27.5,35.5}, // bottom left
// {32.5,29.5}}; // bottom right
// settings for the office wall
{-30.5,-20.5}, // top left
{26.5,-25.5}, // top right
// {-30.5,-20.5}, // top left
// {26.5,-25.5}, // top right
// {-27.5,26.5}, // bottom left
// {32.5,20.5}}; // bottom right
{-32.5,-20.5}, // top left
{30.5,-25.5}, // top right
{-27.5,26.5}, // bottom left
{32.5,20.5}}; // bottom right
public static MatchSimulatedPattern.LaserPointer LASER_POINTERS= new MatchSimulatedPattern.LaserPointer (
1.06, // public double headLasersTilt= 1.06; // degrees, right laser lower than left laser
0.05, // minimalIntensity
...
...
@@ -470,7 +476,7 @@ public static MatchSimulatedPattern.DistortionParameters DISTORTION =new MatchSi
0.6, // double greenFloor; // when dividing by green, add this fraction of maximal value (decrease green accordingly)
true, // boolean useOther=false; // when true - use red and other color, when false - only red
true, // boolean otherGreen=true; // other color is green (false - blue)
0.
1
, // public double threshold;
0.
5
, // public double threshold;
false, // public boolean swapUV; // first
false, // public boolean flipU;
false, // public boolean flipV;
...
...
@@ -792,7 +798,7 @@ if (MORE_BUTTONS) {
// if (MORE_BUTTONS) {
addButton("Find Grid",panelFocusing,color_process);
// }
addButton("Select WOI",panelFocusing,color_lenses);
// addButton("Select WOI",panelFocusing,color_lenses); // will not be used - now WOI is run-time calcualted according to specified center
addButton("Reset Histories",panelFocusing,color_lenses);
addButton("Motors Home",panelFocusing,color_lenses);
addButton("Auto Pre-focus",panelFocusing,color_process);
...
...
@@ -2652,7 +2658,8 @@ if (MORE_BUTTONS) {
checkSerialAndRestore(); // returns true if did not change or was restored
long startTime=System.nanoTime();
if (!FOCUS_MEASUREMENT_PARAMETERS.cameraIsConfigured) {
if (CAMERAS.showDialog("Configure cameras interface", 1, true)){
// if (CAMERAS.showDialog("Configure cameras interface", 1, true)){
if (CAMERAS.showDialog("Configure cameras interface", FOCUS_MEASUREMENT_PARAMETERS.useExtraSensor?2:1, true)){
FOCUS_MEASUREMENT_PARAMETERS.cameraIsConfigured=true;
if (!FOCUS_MEASUREMENT_PARAMETERS.getLensSerial()) return;
// reset histories
...
...
@@ -2673,6 +2680,22 @@ if (MORE_BUTTONS) {
IJ.showMessage("Error","Failed to get camera image\nProcess canceled");
return;
}
// Show ROI
System.out.println("ROI="+FOCUS_MEASUREMENT_PARAMETERS.getMargins());
if (FOCUS_MEASUREMENT_PARAMETERS.showROI) imp_sel.setRoi(FOCUS_MEASUREMENT_PARAMETERS.getMargins());
// set all samples
if (FOCUS_MEASUREMENT_PARAMETERS.showSamples) {
int sampleHalfSize=FOCUS_MEASUREMENT_PARAMETERS.sampleSize/2;
double [][][] sampleCoord=FOCUS_MEASUREMENT_PARAMETERS.sampleCoordinates(FOCUS_MEASUREMENT_PARAMETERS.result_PX0,FOCUS_MEASUREMENT_PARAMETERS.result_PY0);
Overlay overlay=new Overlay();
for (int i=0; i<sampleCoord.length; i++) for (int j=0; j<sampleCoord[i].length; j++) {
int xc=(int) Math.round(sampleCoord[i][j][0]);
int yc=(int) Math.round(sampleCoord[i][j][1]);
overlay.add(new Roi(xc-sampleHalfSize,yc-sampleHalfSize,2*sampleHalfSize,2*sampleHalfSize));
}
imp_sel.setOverlay(overlay);
}
imp_sel.show();
imp_sel.updateAndDraw();
if (DEBUG_LEVEL>0) System.out.println("Image acquisition (@"+FOCUS_MEASUREMENT_PARAMETERS.sensorTemperature+"C) done at "+ IJ.d2s(0.000000001*(System.nanoTime()-startTime),3));
...
...
@@ -3378,7 +3401,9 @@ if (MORE_BUTTONS) {
MOTORS.setDebug(FOCUS_MEASUREMENT_PARAMETERS.motorDebug);
if (FOCUS_MEASUREMENT_PARAMETERS.configureCamera) {
if (CAMERAS.showDialog("Configure cameras interface", 1, true)) FOCUS_MEASUREMENT_PARAMETERS.cameraIsConfigured=true;
if (CAMERAS.showDialog("Configure cameras interface", FOCUS_MEASUREMENT_PARAMETERS.useExtraSensor?2:1, true)) {
FOCUS_MEASUREMENT_PARAMETERS.cameraIsConfigured=true;
}
}
return;
}
...
...
@@ -3574,7 +3599,7 @@ if (MORE_BUTTONS) {
if (label.equals("Focusing Acquire PSF")) {
// FOCUS_MEASUREMENT_PARAMETERS.showDialog("Focus Measurement Parameters");
if (!FOCUS_MEASUREMENT_PARAMETERS.cameraIsConfigured) {
if (CAMERAS.showDialog("Configure cameras interface", 1, true)){
if (CAMERAS.showDialog("Configure cameras interface",
FOCUS_MEASUREMENT_PARAMETERS.useExtraSensor?2:
1, true)){
FOCUS_MEASUREMENT_PARAMETERS.cameraIsConfigured=true;
if (!FOCUS_MEASUREMENT_PARAMETERS.getLensSerial()) return;
// IJ.showMessage("Notice","Make sure camera is in TRIG=4 mode, JP4, correct exposure/white balance...");
...
...
@@ -3676,9 +3701,10 @@ if (MORE_BUTTONS) {
IJ.showMessage("Error","Image with selection is required");
return;
}
Rectangle oldWOI=FOCUS_MEASUREMENT_PARAMETERS.margins;
System.out.println("Old WOI="+oldWOI);
FOCUS_MEASUREMENT_PARAMETERS.margins=imp_sel.getRoi().getBounds();
Rectangle oldWOI=FOCUS_MEASUREMENT_PARAMETERS.getMargins();
System.out.println("Old WOI="+oldWOI);
System.out.println("Setting WOI is not supported anymore, it is calculated from required center and configured margins jit");
// FOCUS_MEASUREMENT_PARAMETERS.margins=imp_sel.getRoi().getBounds();
return;
}
// addButton("Head Orientation",panelFocusing);
...
...
@@ -3688,7 +3714,7 @@ if (MORE_BUTTONS) {
UV_LED_LASERS.debugLevel=DEBUG_LEVEL;
UV_LED_LASERS.setParameters(FOCUS_MEASUREMENT_PARAMETERS);
if (!FOCUS_MEASUREMENT_PARAMETERS.cameraIsConfigured) {
if (CAMERAS.showDialog("Configure cameras interface", 1, true)){
if (CAMERAS.showDialog("Configure cameras interface",
FOCUS_MEASUREMENT_PARAMETERS.useExtraSensor?2:
1, true)){
FOCUS_MEASUREMENT_PARAMETERS.cameraIsConfigured=true;
if (!FOCUS_MEASUREMENT_PARAMETERS.getLensSerial()) return;
// IJ.showMessage("Notice","Make sure camera is in TRIG=4 mode, JP4, correct exposure/white balance...");
...
...
@@ -3744,7 +3770,7 @@ if (MORE_BUTTONS) {
boolean findCenter=label.equals("Lens Center");
DEBUG_LEVEL=MASTER_DEBUG_LEVEL;
if (!FOCUS_MEASUREMENT_PARAMETERS.cameraIsConfigured) {
if (CAMERAS.showDialog("Configure cameras interface", 1, true)){
if (CAMERAS.showDialog("Configure cameras interface",
FOCUS_MEASUREMENT_PARAMETERS.useExtraSensor?2:
1, true)){
FOCUS_MEASUREMENT_PARAMETERS.cameraIsConfigured=true;
// IJ.showMessage("Notice","Make sure camera is in TRIG=4 mode, JP4, correct exposure/white balance...");
if (!FOCUS_MEASUREMENT_PARAMETERS.getLensSerial()) return;
...
...
@@ -3801,11 +3827,16 @@ if (MORE_BUTTONS) {
System.out.println("Failed to locate optical head laser pointers");
return;
}
if (
DEBUG_LEVEL>1
){
if (
(DEBUG_LEVEL>1) || (headPointers.length <2)
){
for (int n=0;n<headPointers.length;n++) if (headPointers[n]!=null){
System.out.println("Head pointer "+n+": X="+IJ.d2s(headPointers[n][0],2)+", Y="+IJ.d2s(headPointers[n][1],2));
}
}
if (headPointers.length<2) {
System.out.println("Failed to locate optical head laser pointers. Needed 2, "+headPointers.length+" got.");
return;
}
if ((headPointers[0]!=null) && (headPointers[1]!=null)){
headPointersTilt=180.0/Math.PI*Math.atan2(headPointers[1][1]-headPointers[0][1], headPointers[1][0]-headPointers[0][0])-LASER_POINTERS.headLasersTilt;
if (DEBUG_LEVEL>0){
...
...
@@ -3854,6 +3885,7 @@ if (MORE_BUTTONS) {
if (DEBUG_LEVEL>0) System.out.println("Matched "+numAbsolutePoints+" laser pointers, grid generated at "+ IJ.d2s(0.000000001*(System.nanoTime()-startTime),3));
imp_calibrated[imgCounter] = matchSimulatedPatternSet[imgCounter].getCalibratedPatternAsImage(imp_set[imgCounter],"grid-",numAbsolutePoints);
}
matchSimulatedPattern= matchSimulatedPatternSet[0]; // global matchSimulatedPattern is used for Focus/Tilt LMA and many others
if (FOCUS_MEASUREMENT_PARAMETERS.showAcquiredImages) imp_calibrated[0].show(); // DISTORTION_PROCESS_CONFIGURATION.showGridImages
if (findCenter){
// Read required calibration files
...
...
@@ -3914,6 +3946,7 @@ if (MORE_BUTTONS) {
// Calculate Sensor Masks
DISTORTION_CALIBRATION_DATA.debugLevel=DEBUG_LEVEL;
DISTORTION_CALIBRATION_DATA.updateStatus=UPDATE_STATUS;
DISTORTION_CALIBRATION_DATA.calculateSensorMasks();
if (DEBUG_LEVEL>0) System.out.println("Starting LMA at "+ IJ.d2s(0.000000001*(System.nanoTime()-startTime),3));
...
...
@@ -3932,6 +3965,34 @@ if (MORE_BUTTONS) {
// Read camera parameters
EyesisCameraParameters camPars=
LENS_DISTORTIONS.fittingStrategy.distortionCalibrationData.eyesisCameraParameters;
// boolean enRoundOff=true; // TODO: Move to configurable parameters
// public double [] roundOffMask(int chn, double xCenter, double yCenter){
if (FOCUS_MEASUREMENT_PARAMETERS.enRoundOff) {
if (DEBUG_LEVEL>0) System.out.println("First XC="+camPars.eyesisSubCameras[stationNumber][0].px0+
"\n YC="+camPars.eyesisSubCameras[stationNumber][0].py0);
DISTORTION_CALIBRATION_DATA.roundOffMask(
0, // int chn,
camPars.eyesisSubCameras[stationNumber][0].px0, // double xCenter,
camPars.eyesisSubCameras[stationNumber][0].py0); // double yCenter);
if (DEBUG_LEVEL>0) System.out.println("Starting second LMA at "+ IJ.d2s(0.000000001*(System.nanoTime()-startTime),3));
LENS_DISTORTIONS.seriesNumber= 1; // start from 1; (no need to repeat series 1)
LENS_DISTORTIONS.stopEachStep= false;
LENS_DISTORTIONS.stopEachSeries= false;
// TODO: configure through FOCUS_MEASUREMENT_PARAMETERS
LENS_DISTORTIONS.thresholdFinish=FOCUS_MEASUREMENT_PARAMETERS.thresholdFinish;
LENS_DISTORTIONS.numIterations=FOCUS_MEASUREMENT_PARAMETERS.numIterations;
LENS_DISTORTIONS.LevenbergMarquardt(false); // skip dialog
if (DEBUG_LEVEL>0) System.out.println("Finished second LMA at "+ IJ.d2s(0.000000001*(System.nanoTime()-startTime),3));
if (!FOCUS_MEASUREMENT_PARAMETERS.keepCircularMask) {
DISTORTION_CALIBRATION_DATA.calculateSensorMasks(); // TODO: save/restore original mask for channel 0
if (DEBUG_LEVEL>0) System.out.println("Recalculated sensor masks at "+ IJ.d2s(0.000000001*(System.nanoTime()-startTime),3));
}
}
double threadPitch=0.35; // M1.6
double dPx0=camPars.eyesisSubCameras[stationNumber][0].px0-(camPars.sensorWidth/2)-FOCUS_MEASUREMENT_PARAMETERS.centerDeltaX;
double dPy0=camPars.eyesisSubCameras[stationNumber][0].py0-(camPars.sensorHeight/2)-FOCUS_MEASUREMENT_PARAMETERS.centerDeltaY;
...
...
@@ -4044,7 +4105,7 @@ if (MORE_BUTTONS) {
boolean autoMove=label.equals("Auto Pre-focus");
DEBUG_LEVEL=MASTER_DEBUG_LEVEL;
if (!FOCUS_MEASUREMENT_PARAMETERS.cameraIsConfigured) {
if (CAMERAS.showDialog("Configure cameras interface", 1, true)){
if (CAMERAS.showDialog("Configure cameras interface",
FOCUS_MEASUREMENT_PARAMETERS.useExtraSensor?2:
1, true)){
FOCUS_MEASUREMENT_PARAMETERS.cameraIsConfigured=true;
if (!FOCUS_MEASUREMENT_PARAMETERS.getLensSerial()) return;
// IJ.showMessage("Notice","Make sure camera is in TRIG=4 mode, JP4, correct exposure/white balance...");
...
...
@@ -4391,7 +4452,7 @@ if (MORE_BUTTONS) {
boolean fineFocus=label.equals("Fine Focus");
DEBUG_LEVEL=MASTER_DEBUG_LEVEL;
if (!FOCUS_MEASUREMENT_PARAMETERS.cameraIsConfigured) {
if (CAMERAS.showDialog("Configure cameras interface", 1, true)){
if (CAMERAS.showDialog("Configure cameras interface",
FOCUS_MEASUREMENT_PARAMETERS.useExtraSensor?2:
1, true)){
FOCUS_MEASUREMENT_PARAMETERS.cameraIsConfigured=true;
if (!FOCUS_MEASUREMENT_PARAMETERS.getLensSerial()) return;
// IJ.showMessage("Notice","Make sure camera is in TRIG=4 mode, JP4, correct exposure/white balance...");
...
...
@@ -4600,7 +4661,7 @@ if (MORE_BUTTONS) {
MOTORS.setDebug(FOCUS_MEASUREMENT_PARAMETERS.motorDebug);
DEBUG_LEVEL=MASTER_DEBUG_LEVEL;
if (!FOCUS_MEASUREMENT_PARAMETERS.cameraIsConfigured) {
if (CAMERAS.showDialog("Configure cameras interface", 1, true)){
if (CAMERAS.showDialog("Configure cameras interface",
FOCUS_MEASUREMENT_PARAMETERS.useExtraSensor?2:
1, true)){
FOCUS_MEASUREMENT_PARAMETERS.cameraIsConfigured=true;
if (!FOCUS_MEASUREMENT_PARAMETERS.getLensSerial()) return;
// IJ.showMessage("Notice","Make sure camera is in TRIG=4 mode, JP4, correct exposure/white balance...");
...
...
@@ -4954,7 +5015,7 @@ if (MORE_BUTTONS) {
}
FOCUSING_FIELD.setDebugLevel(DEBUG_LEVEL);
if (!FOCUS_MEASUREMENT_PARAMETERS.cameraIsConfigured) {
if (CAMERAS.showDialog("Configure cameras interface", 1, true)){
if (CAMERAS.showDialog("Configure cameras interface",
FOCUS_MEASUREMENT_PARAMETERS.useExtraSensor?2:
1, true)){
FOCUS_MEASUREMENT_PARAMETERS.cameraIsConfigured=true;
if (!FOCUS_MEASUREMENT_PARAMETERS.getLensSerial()) return;
// reset histories
...
...
@@ -5411,7 +5472,7 @@ if (MORE_BUTTONS) {
if (label.equals("No-move measure")) {
DEBUG_LEVEL=MASTER_DEBUG_LEVEL;
if (!FOCUS_MEASUREMENT_PARAMETERS.cameraIsConfigured) {
if (CAMERAS.showDialog("Configure cameras interface", 1, true)){
if (CAMERAS.showDialog("Configure cameras interface",
FOCUS_MEASUREMENT_PARAMETERS.useExtraSensor?2:
1, true)){
FOCUS_MEASUREMENT_PARAMETERS.cameraIsConfigured=true;
if (!FOCUS_MEASUREMENT_PARAMETERS.getLensSerial()) return;
// reset histories
...
...
@@ -5982,7 +6043,7 @@ if (MORE_BUTTONS) {
MOTORS.setDebug(FOCUS_MEASUREMENT_PARAMETERS.motorDebug);
if (FOCUS_MEASUREMENT_PARAMETERS.configureCamera) {
if (CAMERAS.showDialog("Configure cameras interface", 1, true)) FOCUS_MEASUREMENT_PARAMETERS.cameraIsConfigured=true;
if (CAMERAS.showDialog("Configure cameras interface",
FOCUS_MEASUREMENT_PARAMETERS.useExtraSensor?2:
1, true)) FOCUS_MEASUREMENT_PARAMETERS.cameraIsConfigured=true;
}
*/
return;
...
...
@@ -10404,7 +10465,7 @@ if (MORE_BUTTONS) {
if (DEBUG_LEVEL>0) System.out.println("Autolading grid file "+configPaths[2]);
patternParameters.selectAndRestore(true,configPaths[2],dcd.eyesisCameraParameters.numStations); // returns path or null on failure
}
if (
configPaths[3] !=null
){ // load sensor
if (
(configPaths[3] !=null) && (configPaths[3] != "")
){ // load sensor
if (distortions.fittingStrategy==null) return false;
if (DEBUG_LEVEL>0) System.out.println("Autoloading sensor calibration files "+configPaths[3]);
distortions.setDistortionFromImageStack(
src/main/java/CalibrationHardwareInterface.java
View file @
5f0e3426
...
...
@@ -161,6 +161,8 @@ public class CalibrationHardwareInterface {
private
int
[][]
channelMap1
={
// ip index, channel number
// {0,-1}}; // negative channel - single camera
{
0
,
0
}};
// Try with 0
private
int
[][]
channelMap2
={
// ip index, channel number
{
0
,
0
},{
0
,
1
}};
private
int
[][]
channelMap3
={
// ip index, channel number
// {0,-1}}; // negative channel - single camera
{
0
,
0
},{
1
,
0
},{
2
,
0
}};
...
...
@@ -260,9 +262,15 @@ public class CalibrationHardwareInterface {
private
void
initDefaultMap
(
int
size
){
this
.
channelMap
=
new
int
[
size
][];
this
.
flipImages
=
new
boolean
[
size
];
if
(
size
==
1
)
{
if
(
size
==
1
)
{
// single camera - old lens focusing
this
.
channelMap
[
0
]=
channelMap1
[
0
].
clone
();
this
.
flipImages
[
0
]=
true
;
}
else
if
(
size
==
2
){
// New lens focusing machine
this
.
channelMap
[
0
]=
channelMap2
[
0
].
clone
();
this
.
flipImages
[
0
]=
true
;
// main sensor under test
this
.
channelMap
[
1
]=
channelMap2
[
1
].
clone
();
this
.
flipImages
[
1
]=
false
;
// extra sensor for location
}
else
if
(
size
==
3
){
for
(
int
i
=
0
;
i
<
size
;
i
++){
this
.
flipImages
[
i
]=
false
;
...
...
@@ -1829,7 +1837,7 @@ public class CalibrationHardwareInterface {
public
String
[]
groups
={
"heater"
,
"fan"
,
"light"
,
"light1"
,
"light2"
};
public
int
debugLevel
=
1
;
private
String
powerIP
=
"192.168.0.80"
;
private
double
lightsDelay
=
5
.0
;
private
double
lightsDelay
=
1
.0
;
private
final
String
urlFormat
=
"http://%s/insteon/index.php?cmd=%s&group=%s×tamp=%d"
;
private
final
String
rootElement
=
"Document"
;
public
boolean
powerConrtolEnabled
=
false
;
...
...
src/main/java/DistortionCalibrationData.java
View file @
5f0e3426
...
...
@@ -3123,6 +3123,67 @@ import org.apache.commons.configuration.XMLConfiguration;
}
return
this
.
sensorMasks
;
}
/**
* Create round mask inside the actual one, with the provided center. Blur result with the same sigma as original
* @param chn sensor number
* @param xCenter X of the center (before decimation)
* @param yCenter Y of the center (before decimation)
* @return this channel mask, also sets the round mask instead of the original
*/
public
double
[]
roundOffMask
(
int
chn
,
double
xCenter
,
double
yCenter
){
int
dWidth
=
(
eyesisCameraParameters
.
sensorWidth
-
1
)/
eyesisCameraParameters
.
decimateMasks
+
1
;
int
dHeight
=
(
eyesisCameraParameters
.
sensorHeight
-
1
)/
eyesisCameraParameters
.
decimateMasks
+
1
;
DoubleGaussianBlur
gb
=
new
DoubleGaussianBlur
();
int
iXC
=(
int
)
Math
.
round
(
xCenter
/
eyesisCameraParameters
.
decimateMasks
);
int
iYC
=(
int
)
Math
.
round
(
yCenter
/
eyesisCameraParameters
.
decimateMasks
);
// int dcW=eyesisCameraParameters.sensorWidth/eyesisCameraParameters.decimateMasks;
// int dcH=eyesisCameraParameters.sensorHeight/eyesisCameraParameters.decimateMasks;
double
r0
=
iXC
;
r0
=
Math
.
min
(
r0
,
iYC
);
r0
=
Math
.
min
(
r0
,
dWidth
-
iXC
);
r0
=
Math
.
min
(
r0
,
dHeight
-
iYC
);
int
ir02
=(
int
)
Math
.
round
(
r0
*
r0
);
System
.
out
.
println
(
"iXC="
+
iXC
);
System
.
out
.
println
(
"iYC="
+
iYC
);
System
.
out
.
println
(
"initial ir02="
+
ir02
+
"("
+
Math
.
sqrt
(
ir02
)+
")"
);
for
(
int
i
=
0
;
i
<
this
.
sensorMasks
[
chn
].
length
;
i
++)
if
(
this
.
sensorMasks
[
chn
][
i
]<
0.5
)
{
int
ix
=
(
i
%
dWidth
)
-
iXC
;
int
iy
=
(
i
/
dWidth
)
-
iYC
;
int
ir2
=
ix
*
ix
+
iy
*
iy
;
if
(
ir2
<
ir02
)
ir02
=
ir2
;
}
System
.
out
.
println
(
"second ir02="
+
ir02
+
"("
+
Math
.
sqrt
(
ir02
)+
")"
);
double
[]
mask
=
new
double
[
this
.
sensorMasks
[
chn
].
length
];
for
(
int
i
=
0
;
i
<
mask
.
length
;
i
++)
{
int
ix
=
(
i
%
dWidth
)
-
iXC
;
int
iy
=
(
i
/
dWidth
)
-
iYC
;
mask
[
i
]=((
ix
*
ix
+
iy
*
iy
)
>
ir02
)?
0.0
:
1.0
;
}
// blur result
double
[][]
preMask
=
preCalculateSingleImageMask
(
chn
,
eyesisCameraParameters
.
decimateMasks
,
eyesisCameraParameters
.
sensorWidth
,
eyesisCameraParameters
.
sensorHeight
,
eyesisCameraParameters
.
shrinkGridForMask
);
if
(
preMask
==
null
)
return
null
;
//nothing in this channel
double
rAverage
=
preMask
[
0
][
0
];
double
rAverageNum
=
preMask
[
0
][
1
];
if
(
rAverageNum
==
0.0
)
return
null
;
// nothing to blur/process for this channel
rAverage
/=
rAverageNum
;
// average distance to the fartherst node from the current
double
sigma
=
eyesisCameraParameters
.
maskBlurSigma
;
if
(
sigma
<
0
)
sigma
*=-
rAverage
;
gb
.
blurDouble
(
mask
,
dWidth
,
dHeight
,
sigma
/
eyesisCameraParameters
.
decimateMasks
,
sigma
/
eyesisCameraParameters
.
decimateMasks
,
0.01
);
for
(
int
i
=
0
;
i
<
mask
.
length
;
i
++){
this
.
sensorMasks
[
chn
][
i
]
=
Math
.
min
(
this
.
sensorMasks
[
chn
][
i
],
mask
[
i
]);
}
return
this
.
sensorMasks
[
chn
];
}
public
double
[]
calculateImageGridMask
(
int
imgNum
)
{
return
calculateImageGridMask
(
imgNum
,
...
...
src/main/java/LensAdjustment.java
View file @
5f0e3426
...
...
@@ -206,7 +206,7 @@ public class LensAdjustment {
public
String
resultsSuperDirectory
=
""
;
// directory with subdirectories named as serial numbers to stro results
public
int
EEPROM_channel
=
1
;
// EEPROM channel to read serial number from
public
boolean
saveResults
=
true
;
// save focusing results
public
boolean
showResults
=
true
;
// show focusing (including
h
intermediate) results
public
boolean
showResults
=
true
;
// show focusing (including intermediate) results
public
String
serialNumber
=
""
;
// camera serial number string
public
double
sensorTemperature
=
Double
.
NaN
;
// last measured sensor temperature
...
...
@@ -238,7 +238,9 @@ public class LensAdjustment {
public
double
centerDeltaX
=
0.0
;
// required X-difference between lens center and sensor center
public
double
centerDeltaY
=
0.0
;
// required Y-difference between lens center and sensor center
// with the seam in the middle - make even # of samples horizontally
public
Rectangle
margins
=
new
Rectangle
(
100
,
100
,
2392
,
1736
)
;
// maximal height 1816 (1936-120)
// to be made private or removed
// public Rectangle margins=new Rectangle (100,100,2392,1736) ; // maximal height 1816 (1936-120)
private
Rectangle
margins
=
new
Rectangle
(
100
,
100
,
2392
,
1736
)
;
// maximal height 1816 (1936-120)
public
int
[]
numSamples
={
8
,
5
};
// number of samples in x and y directions
public
int
sampleSize
=
256
;
// 512; // size of square (2^n), in sensor pixels (twice FFT size)
public
int
numInCenter
=(
numSamples
[
0
]-
2
)*(
numSamples
[
1
]-
2
);
// 2 - number of "center" samples
...
...
@@ -249,6 +251,9 @@ public class LensAdjustment {
public
boolean
showHistorySamples
=
true
;
// show individual samples
public
boolean
showHistorySingleLine
=
true
;
// all parameters in a single line (easier to copy to spreadsheet)
public
boolean
showAcquiredImages
=
false
;
public
boolean
showROI
=
false
;
public
boolean
showSamples
=
true
;
public
boolean
showFittedParameters
=
true
;
public
boolean
useHeadLasers
=
true
;
...
...
@@ -384,12 +389,31 @@ public class LensAdjustment {
public
int
numIterations
=
100
;
// maximal number of iterations
public
boolean
cameraIsConfigured
=
false
;
public
boolean
useExtraSensor
=
true
;
public
boolean
enRoundOff
=
true
;
// create round mask to refine lens center position (second LMA run)
public
boolean
keepCircularMask
=
false
;
// keep sensor 0 round mask after running LMA, false - recalculate actual mask
public
boolean
configureCamera
=
false
;
// only valid after dialog
public
int
[]
motorPos
=
null
;
// will point to
public
double
[]
ampsSeconds
={
0.0
,
0.0
,
0.0
,
0.0
};
// cumulative Amps*seconds (read only, but will be saved/restored)
public
int
manufacturingState
=
0
;
// temporary - will re-calculate according to required lens center
public
Rectangle
getMargins
(){
int
iXC
=
(
int
)
Math
.
round
(
centerDeltaX
);
int
iYC
=
(
int
)
Math
.
round
(
centerDeltaY
);
Rectangle
margins
=
new
Rectangle
(
this
.
margins
);
if
((
iXC
!=
0
)
||
(
iYC
!=
0
)){
int
hw
=
this
.
margins
.
width
/
2
;
int
hh
=
this
.
margins
.
height
/
2
;
int
ix0
=
this
.
margins
.
x
+
hw
;
int
iy0
=
this
.
margins
.
y
+
hh
;
hw
+=
(
iXC
<
0
)?
iXC:
(-
iXC
);
hh
+=
(
iYC
<
0
)?
iYC:
(-
iYC
);
margins
=
new
Rectangle
(
ix0
+
iXC
-
hw
,
iy0
+
iYC
-
hh
,
2
*
hw
,
2
*
hh
);
}
return
margins
;
}
public
String
[]
manufacturingStateNames
={
"New SFE"
,
...
...
@@ -494,6 +518,9 @@ public class LensAdjustment {
boolean
showHistorySamples
,
boolean
showHistorySingleLine
,
// all parameters in a single line (easier to copy to spreadsheet)
boolean
showAcquiredImages
,
boolean
showROI
,
boolean
showSamples
,
boolean
showFittedParameters
,
boolean
useHeadLasers
,
double
psf_cutoffEnergy
,
// disregard pixels outside of this fraction of the total energy
...
...
@@ -604,6 +631,9 @@ public class LensAdjustment {
double
thresholdFinish
,
// (copied from series) stop iterations if 2 last steps had less improvement (but not worsening )
int
numIterations
,
// maximal number of iterations
boolean
cameraIsConfigured
,
boolean
useExtraSensor
,
boolean
enRoundOff
,
boolean
keepCircularMask
,
int
[]
motorPos
,
double
[]
ampsSeconds
,
// cumulative Amps*seconds (read only, but will be saved/restored)
double
reportTemperature
,
// temperature to report focal length
...
...
@@ -655,6 +685,8 @@ public class LensAdjustment {
this
.
showHistorySamples
=
showHistorySamples
;
this
.
showHistorySingleLine
=
showHistorySingleLine
;
// all parameters in a single line (easier to copy to spreadsheet)
this
.
showAcquiredImages
=
showAcquiredImages
;
this
.
showROI
=
showROI
;
this
.
showSamples
=
showSamples
;
this
.
showFittedParameters
=
showFittedParameters
;
this
.
useHeadLasers
=
useHeadLasers
;
this
.
psf_cutoffEnergy
=
psf_cutoffEnergy
;
...
...
@@ -761,6 +793,9 @@ public class LensAdjustment {
this
.
thresholdFinish
=
thresholdFinish
;
// (copied from series) stop iterations if 2 last steps had less improvement (but not worsening )
this
.
numIterations
=
numIterations
;
// maximal number of iterations
this
.
cameraIsConfigured
=
cameraIsConfigured
;
this
.
useExtraSensor
=
useExtraSensor
;
this
.
enRoundOff
=
enRoundOff
;
this
.
keepCircularMask
=
keepCircularMask
;
this
.
motorPos
=
motorPos
;
this
.
ampsSeconds
=
ampsSeconds
;
// cumulative Amps*seconds (read only, but will be saved/restored)
this
.
reportTemperature
=
reportTemperature
;
...
...
@@ -812,6 +847,8 @@ public class LensAdjustment {
this
.
showHistorySamples
,
this
.
showHistorySingleLine
,
// all parameters in a single line (easier to copy to spreadsheet)
this
.
showAcquiredImages
,
this
.
showROI
,
this
.
showSamples
,
this
.
showFittedParameters
,
this
.
useHeadLasers
,
this
.
psf_cutoffEnergy
,
...
...
@@ -920,6 +957,9 @@ public class LensAdjustment {
this
.
thresholdFinish
,
this
.
numIterations
,
this
.
cameraIsConfigured
,
this
.
useExtraSensor
,
this
.
enRoundOff
,
this
.
keepCircularMask
,
this
.
motorPos
,
this
.
ampsSeconds
,
// cumulative Amps*seconds (read only, but will be saved/restored)
this
.
reportTemperature
,
...
...
@@ -977,8 +1017,13 @@ public class LensAdjustment {
properties
.
setProperty
(
prefix
+
"showHistorySingleLine"
,
this
.
showHistorySingleLine
+
""
);
properties
.
setProperty
(
prefix
+
"showAcquiredImages"
,
this
.
showAcquiredImages
+
""
);
properties
.
setProperty
(
prefix
+
"showROI"
,
this
.
showROI
+
""
);
properties
.
setProperty
(
prefix
+
"showSamples"
,
this
.
showSamples
+
""
);
properties
.
setProperty
(
prefix
+
"showFittedParameters"
,
this
.
showFittedParameters
+
""
);
properties
.
setProperty
(
prefix
+
"useHeadLasers"
,
this
.
useHeadLasers
+
""
);
properties
.
setProperty
(
prefix
+
"useExtraSensor"
,
this
.
useExtraSensor
+
""
);
properties
.
setProperty
(
prefix
+
"enRoundOff"
,
this
.
enRoundOff
+
""
);
properties
.
setProperty
(
prefix
+
"keepCircularMask"
,
this
.
keepCircularMask
+
""
);
properties
.
setProperty
(
prefix
+
"psf_cutoffEnergy"
,
this
.
psf_cutoffEnergy
+
""
);
properties
.
setProperty
(
prefix
+
"psf_cutoffLevel"
,
this
.
psf_cutoffLevel
+
""
);
properties
.
setProperty
(
prefix
+
"psf_minArea"
,
this
.
psf_minArea
+
""
);
...
...
@@ -1198,10 +1243,21 @@ public class LensAdjustment {
this
.
showHistorySingleLine
=
Boolean
.
parseBoolean
(
properties
.
getProperty
(
prefix
+
"showHistorySingleLine"
));
if
(
properties
.
getProperty
(
prefix
+
"showAcquiredImages"
)!=
null
)
this
.
showAcquiredImages
=
Boolean
.
parseBoolean
(
properties
.
getProperty
(
prefix
+
"showAcquiredImages"
));
if
(
properties
.
getProperty
(
prefix
+
"showROI"
)!=
null
)
this
.
showROI
=
Boolean
.
parseBoolean
(
properties
.
getProperty
(
prefix
+
"showROI"
));
if
(
properties
.
getProperty
(
prefix
+
"showSamples"
)!=
null
)
this
.
showSamples
=
Boolean
.
parseBoolean
(
properties
.
getProperty
(
prefix
+
"showSamples"
));
if
(
properties
.
getProperty
(
prefix
+
"showFittedParameters"
)!=
null
)
this
.
showFittedParameters
=
Boolean
.
parseBoolean
(
properties
.
getProperty
(
prefix
+
"showFittedParameters"
));
if
(
properties
.
getProperty
(
prefix
+
"useHeadLasers"
)!=
null
)
this
.
useHeadLasers
=
Boolean
.
parseBoolean
(
properties
.
getProperty
(
prefix
+
"useHeadLasers"
));
if
(
properties
.
getProperty
(
prefix
+
"useExtraSensor"
)!=
null
)
this
.
useExtraSensor
=
Boolean
.
parseBoolean
(
properties
.
getProperty
(
prefix
+
"useExtraSensor"
));
if
(
properties
.
getProperty
(
prefix
+
"enRoundOff"
)!=
null
)
this
.
enRoundOff
=
Boolean
.
parseBoolean
(
properties
.
getProperty
(
prefix
+
"enRoundOff"
));
if
(
properties
.
getProperty
(
prefix
+
"keepCircularMask"
)!=
null
)
this
.
keepCircularMask
=
Boolean
.
parseBoolean
(
properties
.
getProperty
(
prefix
+
"keepCircularMask"
));
if
(
properties
.
getProperty
(
prefix
+
"psf_cutoffEnergy"
)!=
null
)
this
.
psf_cutoffEnergy
=
Double
.
parseDouble
(
properties
.
getProperty
(
prefix
+
"psf_cutoffEnergy"
));
if
(
properties
.
getProperty
(
prefix
+
"psf_cutoffLevel"
)!=
null
)
...
...
@@ -1559,6 +1615,9 @@ public class LensAdjustment {
gd
.
addCheckbox
(
"Save SFE focusing results (including intermediate) "
,
this
.
saveResults
);
gd
.
addCheckbox
(
"Show SFE focusing results (including intermediate) "
,
this
.
showResults
);
gd
.
addCheckbox
(
"Configure camera"
,
!
this
.
cameraIsConfigured
);
gd
.
addCheckbox
(
"Use extra sensor for 3d-location of the optical head"
,
this
.
useExtraSensor
);
gd
.
addCheckbox
(
"Use circular sensor mask to refine lens center (second LMA run)"
,
this
.
enRoundOff
);
gd
.
addCheckbox
(
"Keep circular sensor mask after finding lens center"
,
this
.
keepCircularMask
);
gd
.
addNumericField
(
"Camera FOV left margin (clear WOI)"
,
this
.
margins
.
x
,
0
,
4
,
"pix"
);
gd
.
addNumericField
(
"Camera FOV top margin (clear WOI)"
,
this
.
margins
.
y
,
0
,
4
,
"pix"
);
gd
.
addNumericField
(
"Camera FOV width (clear WOI)"
,
this
.
margins
.
width
,
0
,
4
,
"pix"
);
...
...
@@ -1573,6 +1632,8 @@ public class LensAdjustment {
gd
.
addCheckbox
(
"Show history details for each FOV sample"
,
this
.
showHistorySamples
);
gd
.
addCheckbox
(
"Show history details in a single line (for spreadheets)"
,
this
.
showHistorySingleLine
);
gd
.
addCheckbox
(
"Show acquired images"
,
this
.
showAcquiredImages
);
// false;
gd
.
addCheckbox
(
"Mark ROI on \"Quick get&show\""
,
this
.
showROI
);
// false;
gd
.
addCheckbox
(
"Mark individual samples on \"Quick get&show\""
,
this
.
showSamples
);
// false;
gd
.
addCheckbox
(
"Show LMA fitted parameters"
,
this
.
showFittedParameters
);
// true;
gd
.
addCheckbox
(
"Use optical head lasers to determine SFE rotation"
,
this
.
useHeadLasers
);
// true;
// gd.addCheckbox ("Measure SFE rotation with optical head lasers", this.useHeadLasers); // true;
...
...
@@ -1766,6 +1827,9 @@ public class LensAdjustment {
this
.
showResults
=
gd
.
getNextBoolean
();
// this.comment= gd.getNextString().replace(' ','_'); //TODO: - add escape
this
.
configureCamera
=
gd
.
getNextBoolean
();
this
.
useExtraSensor
=
gd
.
getNextBoolean
();
this
.
enRoundOff
=
gd
.
getNextBoolean
();
this
.
keepCircularMask
=
gd
.
getNextBoolean
();
this
.
margins
.
x
=
(
int
)
gd
.
getNextNumber
();
this
.
margins
.
y
=
(
int
)
gd
.
getNextNumber
();
this
.
margins
.
width
=
(
int
)
gd
.
getNextNumber
();
...
...
@@ -1781,6 +1845,8 @@ public class LensAdjustment {
this
.
showHistorySamples
=
gd
.
getNextBoolean
();
this
.
showHistorySingleLine
=
gd
.
getNextBoolean
();
this
.
showAcquiredImages
=
gd
.
getNextBoolean
();
this
.
showROI
=
gd
.
getNextBoolean
();
this
.
showSamples
=
gd
.
getNextBoolean
();
this
.
showFittedParameters
=
gd
.
getNextBoolean
();
this
.
useHeadLasers
=
gd
.
getNextBoolean
();
this
.
psf_cutoffEnergy
=
0.01
*
gd
.
getNextNumber
();
...
...
@@ -1904,7 +1970,9 @@ public class LensAdjustment {
double
y0
){
// lens center on the sensor
int
ix0
=(
int
)
Math
.
round
(
x0
);
int
iy0
=(
int
)
Math
.
round
(
y0
);
Rectangle
woi
=
new
Rectangle
(
this
.
margins
);
// Rectangle woi=new Rectangle(this.margins);
Rectangle
woi
=
this
.
getMargins
();
// System.out.println("Selection Rectangle("+woi.x+", "+woi.y+", "+woi.width+", "+woi.height+ ")");
int
extra
=
this
.
sampleSize
+
2
*(
this
.
numSamples
[
1
]+
this
.
numSamples
[
0
]);
if
((
this
.
centerSamples
)
&&
...
...
src/main/java/PatternParameters.java
View file @
5f0e3426
...
...
@@ -888,14 +888,20 @@ import java.util.Properties;
if
(
nView
>=
this
.
photometricByView
[
station
].
length
){
// OOB 1// NUll pointer - need to run F-field first? (oob1 when grid had less than now
nView
=
this
.
photometricByView
.
length
-
1
;
}
if
(
index
>
this
.
photometricByView
[
station
][
nView
][
0
].
length
){
System
.
out
.
println
(
"getXYZMPE ("
+
u
+
","
+
v
+
","
+
station
+
","
+
channel
+
")"
);
System
.
out
.
println
(
"this.photometricByView[station][nView][0].length="
+
this
.
photometricByView
[
station
][
nView
][
0
].
length
);
System
.
out
.
println
(
"index="
+
index
+
" vView="
+
nView
);
System
.
out
.
println
();
}
double
[]
result
=
{
// null
double
[]
result
=
{
// null
this
.
gridGeometry
[
v1
][
u1
][
0
],
this
.
gridGeometry
[
v1
][
u1
][
1
],
// this.gridGeometry[v1][u1][2]+((this.stationZCorr!=null)?this.stationZCorr[v1][u1][station]:0.0), // per-station correction
this
.
gridGeometry
[
v1
][
u1
][
2
]+((
this
.
stationZCorr
!=
null
)?
this
.
stationZCorr
[
v1
][
u1
][
useStation
]:
0.0
),
// per-station correction
this
.
gridGeometry
[
v1
][
u1
][
3
],
this
.
photometricByView
[
station
][
nView
][
0
][
index
],
this
.
photometricByView
[
station
][
nView
][
0
][
index
],
// java.lang.ArrayIndexOutOfBoundsException: 14215
this
.
photometricByView
[
station
][
nView
][
1
][
index
],
this
.
photometricByView
[
station
][
nView
][
2
][
index
],
this
.
photometricByView
[
station
][
nView
][
3
][
index
],
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment