Loading src/main/java/Eyesis_Correction.java +2 −2 Original line number Original line Diff line number Diff line Loading @@ -2835,8 +2835,8 @@ private Panel panel1,panel2,panel3,panel4,panel5,panel5a, panel6,panel7,panelPos factorConvKernel.setDebugLevel(DEBUG_LEVEL); factorConvKernel.setDebugLevel(DEBUG_LEVEL); factorConvKernel.numIterations = DCT_PARAMETERS.LMA_steps; factorConvKernel.numIterations = DCT_PARAMETERS.LMA_steps; factorConvKernel.setCompactnessWeight(DCT_PARAMETERS.compactness); factorConvKernel.setCompactnessWeight(DCT_PARAMETERS.compactness); //// int target_kernel_size = 2*DCT_PARAMETERS.dct_size + DCT_PARAMETERS.asym_size -1; int target_kernel_size = 2*DCT_PARAMETERS.dct_size + DCT_PARAMETERS.asym_size -1; int target_kernel_size = 2*DCT_PARAMETERS.dct_size + DCT_PARAMETERS.asym_size -2; double [] target_kernel = new double [target_kernel_size * target_kernel_size]; double [] target_kernel = new double [target_kernel_size * target_kernel_size]; for (int ii=0; ii < target_kernel.length; ii++) target_kernel[ii]=0.0; for (int ii=0; ii < target_kernel.length; ii++) target_kernel[ii]=0.0; // for (int ii = -2; ii<=2; ii++) { // for (int ii = -2; ii<=2; ii++) { Loading src/main/java/FactorConvKernel.java +21 −17 Original line number Original line Diff line number Diff line Loading @@ -150,8 +150,8 @@ public class FactorConvKernel { private double [] setInitialVector( private double [] setInitialVector( double [] target_kernel) // should be (asym_size + 2*sym_radius-1)**2 double [] target_kernel) // should be (asym_size + 2*sym_radius-1)**2 { { int conv_size = asym_size + 2*sym_radius-1; // int conv_size = asym_size + 2*sym_radius-1; // int sym_size = 2*sym_radius - 1; int conv_size = asym_size + 2*sym_radius-2; int sym_rad_m1 = sym_radius - 1; // 7 int sym_rad_m1 = sym_radius - 1; // 7 // find center of the target kernel squared value // find center of the target kernel squared value double s0=0.0,sx=0.0,sy=0.0; double s0=0.0,sx=0.0,sy=0.0; Loading @@ -170,7 +170,8 @@ public class FactorConvKernel { int j0= (int) Math.round(sx/s0 - sym_rad_m1); // should be ~ async_center int j0= (int) Math.round(sx/s0 - sym_rad_m1); // should be ~ async_center int i0= (int) Math.round(sy/s0 - sym_rad_m1); // should be ~ async_center int i0= (int) Math.round(sy/s0 - sym_rad_m1); // should be ~ async_center if (debugLevel>1){ if (debugLevel>1){ System.out.println("setInitialVector(): fi0 = "+(sy/s0 - sym_radius)+" fj0 = "+(sx/s0 - sym_radius)); System.out.println("setInitialVector(): conv_size = "+conv_size+" fj0 = "+(sx/s0 - sym_radius)); System.out.println("setInitialVector(): fi0 = "+(sy/s0 - sym_radius)+" asym_size = "+asym_size+" sym_radius = "+sym_radius); System.out.println("setInitialVector(): i0 = "+i0+" j0 = "+j0 + " asym_size="+asym_size); System.out.println("setInitialVector(): i0 = "+i0+" j0 = "+j0 + " asym_size="+asym_size); } } // fit i0,j0 to asym_kernel (it should be larger) // fit i0,j0 to asym_kernel (it should be larger) Loading Loading @@ -245,10 +246,12 @@ public class FactorConvKernel { private double [] convKernels( private double [] convKernels( double [] kvect) // first - all elements of sym kernel but [0] (replaced by 1.0), then - asym ones double [] kvect) // first - all elements of sym kernel but [0] (replaced by 1.0), then - asym ones { { int conv_size = asym_size + 2*sym_radius-1; //// int conv_size = asym_size + 2*sym_radius-1; double [] conv_data = new double [conv_size*conv_size]; int conv_size = asym_size + 2*sym_radius-2; // int asym_start= (2 * sym_radius - 1) * (2 * sym_radius - 1)-1; int asym_start= sym_radius * sym_radius - 1; int asym_start= sym_radius * sym_radius - 1; int sym_radius_m1 = sym_radius -1; double [] conv_data = new double [conv_size*conv_size]; if (this.debugLevel>2){ if (this.debugLevel>2){ System.out.println("convKernels(): vector_length= "+kvect.length); System.out.println("convKernels(): vector_length= "+kvect.length); System.out.println("convKernels(): sym_radius= "+sym_radius); System.out.println("convKernels(): sym_radius= "+sym_radius); Loading @@ -258,14 +261,15 @@ public class FactorConvKernel { System.out.println("convKernels(): asym_start= "+asym_start); System.out.println("convKernels(): asym_start= "+asym_start); } } for (int i = 0; i < conv_data.length; i++) conv_data[i] = 0.0; for (int i = 0; i < conv_data.length; i++) conv_data[i] = 0.0; for (int i = -sym_radius+1; i < sym_radius; i++) { for (int i = -sym_radius_m1; i <= sym_radius_m1; i++) { for (int j = -sym_radius+1; j < sym_radius; j++) { for (int j = -sym_radius_m1; j <= sym_radius_m1; j++) { int indx = ((i < 0)? -i : i) * sym_radius + ((j < 0)? -j : j); int indx = ((i < 0)? -i : i) * sym_radius + ((j < 0)? -j : j); double sd = (indx >0)? kvect[indx -1] : 1.0; double sd = (indx >0)? kvect[indx -1] : 1.0; int base_indx = conv_size * (i + sym_radius -1) + (j + sym_radius -1); int base_indx = conv_size * (i + sym_radius_m1) + (j + sym_radius_m1); for (int ia=0; ia < asym_size; ia++) { for (int ia=0; ia < asym_size; ia++) { for (int ja=0; ja < asym_size; ja++) { for (int ja=0; ja < asym_size; ja++) { conv_data[base_indx + conv_size * ia + ja] += sd* kvect[asym_size * ia + ja + asym_start]; int async_index = asym_size*ia + ja + asym_start; conv_data[base_indx + conv_size * ia + ja] += sd* kvect[async_index]; } } } } } } Loading Loading @@ -316,14 +320,15 @@ public class FactorConvKernel { private double [][] getJacobian( private double [][] getJacobian( double [] kvect) double [] kvect) { { int conv_size = asym_size + 2*sym_radius-1; //// int conv_size = asym_size + 2*sym_radius-1; // int asym_start = (2 * sym_radius - 1) * (2 * sym_radius - 1)-1; int conv_size = asym_size + 2*sym_radius-2; int asym_start= sym_radius * sym_radius - 1; int asym_start= sym_radius * sym_radius - 1; int sym_radius_m1 = sym_radius -1; double cw = getCompactWeight(); double cw = getCompactWeight(); double [][] jacob = new double [kvect.length][conv_size*conv_size + asym_size*asym_size]; double [][] jacob = new double [kvect.length][conv_size*conv_size + asym_size*asym_size]; int asym_terms_start=conv_size*conv_size; int asym_terms_start=conv_size*conv_size; for (int i = -sym_radius+1; i < sym_radius; i++) { for (int i = -sym_radius_m1; i <= sym_radius_m1; i++) { for (int j = -sym_radius+1; j < sym_radius; j++) { for (int j = -sym_radius_m1; j <=sym_radius_m1; j++) { int indx = ((i < 0)? -i : i) * sym_radius + ((j < 0)? -j : j); int indx = ((i < 0)? -i : i) * sym_radius + ((j < 0)? -j : j); double sd = (indx >0)? kvect[indx -1] : 1.0; double sd = (indx >0)? kvect[indx -1] : 1.0; int base_indx = conv_size * (i + sym_radius -1) + (j + sym_radius -1); int base_indx = conv_size * (i + sym_radius -1) + (j + sym_radius -1); Loading @@ -333,8 +338,6 @@ public class FactorConvKernel { int conv_index = base_indx + conv_size * ia + ja; int conv_index = base_indx + conv_size * ia + ja; if (indx > 0) jacob[indx-1][conv_index] += kvect[async_index]; if (indx > 0) jacob[indx-1][conv_index] += kvect[async_index]; jacob[async_index][conv_index] += sd; jacob[async_index][conv_index] += sd; // conv_data[base_indx + conv_size * ia + ja] += sd* kvect[asym_size * ia + ja + asym_start]; } } } } } } Loading Loading @@ -382,8 +385,9 @@ public class FactorConvKernel { jTByDiff[i] += jacob[i][k]*(target_kernel[k]-conv_data[k]); jTByDiff[i] += jacob[i][k]*(target_kernel[k]-conv_data[k]); } } } } //// int conv_size = asym_size + 2*sym_radius-1; int conv_size = asym_size + 2*sym_radius-2; int asym_start= sym_radius * sym_radius - 1; int asym_start= sym_radius * sym_radius - 1; int conv_size = asym_size + 2*sym_radius-1; int asym_terms_start= conv_size*conv_size; int asym_terms_start= conv_size*conv_size; double cw = getCompactWeight(); double cw = getCompactWeight(); for (int ia=0; ia <asym_size;ia++){ for (int ia=0; ia <asym_size;ia++){ Loading Loading
src/main/java/Eyesis_Correction.java +2 −2 Original line number Original line Diff line number Diff line Loading @@ -2835,8 +2835,8 @@ private Panel panel1,panel2,panel3,panel4,panel5,panel5a, panel6,panel7,panelPos factorConvKernel.setDebugLevel(DEBUG_LEVEL); factorConvKernel.setDebugLevel(DEBUG_LEVEL); factorConvKernel.numIterations = DCT_PARAMETERS.LMA_steps; factorConvKernel.numIterations = DCT_PARAMETERS.LMA_steps; factorConvKernel.setCompactnessWeight(DCT_PARAMETERS.compactness); factorConvKernel.setCompactnessWeight(DCT_PARAMETERS.compactness); //// int target_kernel_size = 2*DCT_PARAMETERS.dct_size + DCT_PARAMETERS.asym_size -1; int target_kernel_size = 2*DCT_PARAMETERS.dct_size + DCT_PARAMETERS.asym_size -1; int target_kernel_size = 2*DCT_PARAMETERS.dct_size + DCT_PARAMETERS.asym_size -2; double [] target_kernel = new double [target_kernel_size * target_kernel_size]; double [] target_kernel = new double [target_kernel_size * target_kernel_size]; for (int ii=0; ii < target_kernel.length; ii++) target_kernel[ii]=0.0; for (int ii=0; ii < target_kernel.length; ii++) target_kernel[ii]=0.0; // for (int ii = -2; ii<=2; ii++) { // for (int ii = -2; ii<=2; ii++) { Loading
src/main/java/FactorConvKernel.java +21 −17 Original line number Original line Diff line number Diff line Loading @@ -150,8 +150,8 @@ public class FactorConvKernel { private double [] setInitialVector( private double [] setInitialVector( double [] target_kernel) // should be (asym_size + 2*sym_radius-1)**2 double [] target_kernel) // should be (asym_size + 2*sym_radius-1)**2 { { int conv_size = asym_size + 2*sym_radius-1; // int conv_size = asym_size + 2*sym_radius-1; // int sym_size = 2*sym_radius - 1; int conv_size = asym_size + 2*sym_radius-2; int sym_rad_m1 = sym_radius - 1; // 7 int sym_rad_m1 = sym_radius - 1; // 7 // find center of the target kernel squared value // find center of the target kernel squared value double s0=0.0,sx=0.0,sy=0.0; double s0=0.0,sx=0.0,sy=0.0; Loading @@ -170,7 +170,8 @@ public class FactorConvKernel { int j0= (int) Math.round(sx/s0 - sym_rad_m1); // should be ~ async_center int j0= (int) Math.round(sx/s0 - sym_rad_m1); // should be ~ async_center int i0= (int) Math.round(sy/s0 - sym_rad_m1); // should be ~ async_center int i0= (int) Math.round(sy/s0 - sym_rad_m1); // should be ~ async_center if (debugLevel>1){ if (debugLevel>1){ System.out.println("setInitialVector(): fi0 = "+(sy/s0 - sym_radius)+" fj0 = "+(sx/s0 - sym_radius)); System.out.println("setInitialVector(): conv_size = "+conv_size+" fj0 = "+(sx/s0 - sym_radius)); System.out.println("setInitialVector(): fi0 = "+(sy/s0 - sym_radius)+" asym_size = "+asym_size+" sym_radius = "+sym_radius); System.out.println("setInitialVector(): i0 = "+i0+" j0 = "+j0 + " asym_size="+asym_size); System.out.println("setInitialVector(): i0 = "+i0+" j0 = "+j0 + " asym_size="+asym_size); } } // fit i0,j0 to asym_kernel (it should be larger) // fit i0,j0 to asym_kernel (it should be larger) Loading Loading @@ -245,10 +246,12 @@ public class FactorConvKernel { private double [] convKernels( private double [] convKernels( double [] kvect) // first - all elements of sym kernel but [0] (replaced by 1.0), then - asym ones double [] kvect) // first - all elements of sym kernel but [0] (replaced by 1.0), then - asym ones { { int conv_size = asym_size + 2*sym_radius-1; //// int conv_size = asym_size + 2*sym_radius-1; double [] conv_data = new double [conv_size*conv_size]; int conv_size = asym_size + 2*sym_radius-2; // int asym_start= (2 * sym_radius - 1) * (2 * sym_radius - 1)-1; int asym_start= sym_radius * sym_radius - 1; int asym_start= sym_radius * sym_radius - 1; int sym_radius_m1 = sym_radius -1; double [] conv_data = new double [conv_size*conv_size]; if (this.debugLevel>2){ if (this.debugLevel>2){ System.out.println("convKernels(): vector_length= "+kvect.length); System.out.println("convKernels(): vector_length= "+kvect.length); System.out.println("convKernels(): sym_radius= "+sym_radius); System.out.println("convKernels(): sym_radius= "+sym_radius); Loading @@ -258,14 +261,15 @@ public class FactorConvKernel { System.out.println("convKernels(): asym_start= "+asym_start); System.out.println("convKernels(): asym_start= "+asym_start); } } for (int i = 0; i < conv_data.length; i++) conv_data[i] = 0.0; for (int i = 0; i < conv_data.length; i++) conv_data[i] = 0.0; for (int i = -sym_radius+1; i < sym_radius; i++) { for (int i = -sym_radius_m1; i <= sym_radius_m1; i++) { for (int j = -sym_radius+1; j < sym_radius; j++) { for (int j = -sym_radius_m1; j <= sym_radius_m1; j++) { int indx = ((i < 0)? -i : i) * sym_radius + ((j < 0)? -j : j); int indx = ((i < 0)? -i : i) * sym_radius + ((j < 0)? -j : j); double sd = (indx >0)? kvect[indx -1] : 1.0; double sd = (indx >0)? kvect[indx -1] : 1.0; int base_indx = conv_size * (i + sym_radius -1) + (j + sym_radius -1); int base_indx = conv_size * (i + sym_radius_m1) + (j + sym_radius_m1); for (int ia=0; ia < asym_size; ia++) { for (int ia=0; ia < asym_size; ia++) { for (int ja=0; ja < asym_size; ja++) { for (int ja=0; ja < asym_size; ja++) { conv_data[base_indx + conv_size * ia + ja] += sd* kvect[asym_size * ia + ja + asym_start]; int async_index = asym_size*ia + ja + asym_start; conv_data[base_indx + conv_size * ia + ja] += sd* kvect[async_index]; } } } } } } Loading Loading @@ -316,14 +320,15 @@ public class FactorConvKernel { private double [][] getJacobian( private double [][] getJacobian( double [] kvect) double [] kvect) { { int conv_size = asym_size + 2*sym_radius-1; //// int conv_size = asym_size + 2*sym_radius-1; // int asym_start = (2 * sym_radius - 1) * (2 * sym_radius - 1)-1; int conv_size = asym_size + 2*sym_radius-2; int asym_start= sym_radius * sym_radius - 1; int asym_start= sym_radius * sym_radius - 1; int sym_radius_m1 = sym_radius -1; double cw = getCompactWeight(); double cw = getCompactWeight(); double [][] jacob = new double [kvect.length][conv_size*conv_size + asym_size*asym_size]; double [][] jacob = new double [kvect.length][conv_size*conv_size + asym_size*asym_size]; int asym_terms_start=conv_size*conv_size; int asym_terms_start=conv_size*conv_size; for (int i = -sym_radius+1; i < sym_radius; i++) { for (int i = -sym_radius_m1; i <= sym_radius_m1; i++) { for (int j = -sym_radius+1; j < sym_radius; j++) { for (int j = -sym_radius_m1; j <=sym_radius_m1; j++) { int indx = ((i < 0)? -i : i) * sym_radius + ((j < 0)? -j : j); int indx = ((i < 0)? -i : i) * sym_radius + ((j < 0)? -j : j); double sd = (indx >0)? kvect[indx -1] : 1.0; double sd = (indx >0)? kvect[indx -1] : 1.0; int base_indx = conv_size * (i + sym_radius -1) + (j + sym_radius -1); int base_indx = conv_size * (i + sym_radius -1) + (j + sym_radius -1); Loading @@ -333,8 +338,6 @@ public class FactorConvKernel { int conv_index = base_indx + conv_size * ia + ja; int conv_index = base_indx + conv_size * ia + ja; if (indx > 0) jacob[indx-1][conv_index] += kvect[async_index]; if (indx > 0) jacob[indx-1][conv_index] += kvect[async_index]; jacob[async_index][conv_index] += sd; jacob[async_index][conv_index] += sd; // conv_data[base_indx + conv_size * ia + ja] += sd* kvect[asym_size * ia + ja + asym_start]; } } } } } } Loading Loading @@ -382,8 +385,9 @@ public class FactorConvKernel { jTByDiff[i] += jacob[i][k]*(target_kernel[k]-conv_data[k]); jTByDiff[i] += jacob[i][k]*(target_kernel[k]-conv_data[k]); } } } } //// int conv_size = asym_size + 2*sym_radius-1; int conv_size = asym_size + 2*sym_radius-2; int asym_start= sym_radius * sym_radius - 1; int asym_start= sym_radius * sym_radius - 1; int conv_size = asym_size + 2*sym_radius-1; int asym_terms_start= conv_size*conv_size; int asym_terms_start= conv_size*conv_size; double cw = getCompactWeight(); double cw = getCompactWeight(); for (int ia=0; ia <asym_size;ia++){ for (int ia=0; ia <asym_size;ia++){ Loading