Home My Page Projects Code Snippets Project Openings diderot
 Summary Activity Tracker Tasks SCM

SCM Repository

[diderot] View of /branches/lamont/test/iso2d.diderot
 [diderot] / branches / lamont / test / iso2d.diderot

View of /branches/lamont/test/iso2d.diderot

Thu Mar 21 09:06:39 2013 UTC (6 years, 7 months ago) by jhr
File size: 1893 byte(s)
```  merge some changes from vis12/test.
```
```// iso2d
//
// Demo of finding isocontours via Newton-Raphson method.
// Initializes positions on a grid, and each update applies one
// step of Newton-Raphson.
//
// Process output with:
// unu jhisto -i pos.nrrd -b 512 512 -min 0 0 -max 1 1 | unu 2op neq - 0 | unu quantize -b 8  -o iso2d.png

int gridSize = 300;
field#1(2)[] F = ctmr ⊛ image("../data/ddro-80.nrrd");
int stepsMax = 10;
real epsilon = 0.0001;

strand sample (int ui, int vi) {
output vec2 pos = [lerp(0.0, 1.0, -0.5, real(ui), real(gridSize)-0.5),
lerp(0.0, 1.0, -0.5, real(vi), real(gridSize)-0.5)];
// set the isvalue to 50, 30, or 10, depending on whichever we're closest to
real isoval = 50.0 if F(pos) >= 40.0
else 30.0 if F(pos) >= 20.0
else 10.0;
// the following won't work, because the compiler doesn't know how to deal with state vars that
// are fields (really just a local binding)!
//    field#1(2)[] G = F - isoval;
int steps = 0;
update {
field#1(2)[] G = F - isoval;
// We bail if we're no longer inside or taken too many steps.
if (!inside(pos, G) || steps > stepsMax) {
die;
}
// GLKs recent changes (revision 1329) were made to make the code
// a more obvious implementation of Newton-Raphson, and also to create
// some obvious and not-so-obvious opportunties for optimization
vec2 grad = ∇G(pos);
if (|grad| == 0.0) {    // can't compute step if |∇F|, so have to bail
die;
}
vec2 norm = normalize(grad);
vec2 delta = -(G(pos)/|grad|)*norm;  // Newton-Raphson step
if (|delta| < epsilon) {    // we've converged if step is small enough
stabilize;
}
pos += delta;
steps += 1;
}
}

initially { sample(ui, vi) | vi in 0..(gridSize-1), ui in 0..(gridSize-1) };
```

 root@smlnj-gforge.cs.uchicago.edu ViewVC Help Powered by ViewVC 1.0.0