publicclassHorizonExtractor2{//scalethecurvaturetermpublicvoidsetWeight(floatw){_weight=w;}publicvoidsetSmoothing(floatsigma1){_sigma1=sigma1;}publicvoidsetCG(floatsmall,...
public class HorizonExtractor2{
// scale the curvature term
public void setWeight(float w){
_weight = w;
}
public void setSmoothing(float sigma1){
_sigma1 = sigma1;
}
public void setCG(float small, int niter){
_small = small;
_niter = niter;
}
public void setExternalIterations(int exniter){
_exniter = exniter;
}
// find the peak or trough nearest to each control point
public float[] refineConstraints(
float[] k1, float[] k2, float[] k3, float[][][] u)
{
int np = k1.length;
int n1 = u[0][0].length;
for (int ip=0; ip
float k1i = k1[ip];
int i1 = (int)k1i;
int i2 = (int)k2[ip];
int i3 = (int)k3[ip];
int i1m = i1-1;
int i1p = i1+1;
if(i1m<0 ){i1m=0; i1=1; i1p=2;}
if(i1p>=n1){i1m=n1-3;i1=n1-2;i1p=n1-1;}
float um = u[i3][i2][i1m];
float ui = u[i3][i2][i1 ];
float up = u[i3][i2][i1p];
float kp = parabolicPeak(k1i,um,ui,up);
if(abs(kp-k1i)<2.0 && k1i*kp>=0.0f){k1[ip]=kp;}
}
return k1;
展开