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

SCM Repository

[diderot] Annotation of /tests/lamont-tests/ridge3d.diderot
ViewVC logotype

Annotation of /tests/lamont-tests/ridge3d.diderot

Parent Directory Parent Directory | Revision Log Revision Log


Revision 4640 - (view) (download)

1 : glk 4640 /*! \file ridge3d.diderot
2 :     *
3 :     * \author Gordon Kindlmann
4 :     */
5 :    
6 :     /*
7 :     * This code is part of the Diderot Project (http://diderot-language.cs.uchicago.edu)
8 :     *
9 :     * COPYRIGHT (c) 2015 The University of Chicago
10 :     * All rights reserved.
11 :     */
12 :    
13 :     /* possible computation and post-processing:
14 :    
15 :     foreach S ( 170 190 210 230 250 270 290 )
16 :     echo $S
17 :     ./ridge3d -gridSize 120 -strnMin $S
18 :     mv pos.nrrd pos-${S}.nrrd
19 :     end
20 :    
21 :     unu join -i pos-{170,190,210,230,250,270,290}.nrrd -a 1 \
22 :     | unu jhisto -min 21.6401 -175.8792 -188.0000 \
23 :     -max 91.6401 -75.8792 -118.0000 -b 70 140 70 -t float \
24 :     | unu 1op log1p \
25 :     | ../../bin/dnorm -i - \
26 :     | unu 2op gt - 3 \
27 :     | unu dist -th 0.5 -inv -sgn \
28 :     | unu 2op gt - -1 \
29 :     | unu quantize -b 8 \
30 :     | unu ccfind -c 1 -v vals.nrrd \
31 :     | unu ccmerge -s 2000 -c 1 -d -1 -v vals.nrrd -revalue \
32 :     | unu ccfind -c 1 -v vals.nrrd \
33 :     | unu ccmerge -s 2000 -c 1 -d -1 -v vals.nrrd -revalue \
34 :     | unu dist -th 128 -inv -sgn \
35 :     | unu pad -min -1 -1 -1 -max M+1 M+1 M+1 -b pad -v -3 \
36 :     | unu resample -s x2 x2 x2 -k bspln3 -o lung-vis.nrrd
37 :     rm -f vals.nrrd
38 :    
39 :     echo with fog
40 :     ~/Deft/src/Deft_iso -i lung-vis.nrrd \
41 :     -usecam -fr -514.784 1271.16 -1262.16 -at 61.5794 -112.78 -148.393 \
42 :     -up 0.570448 0.645888 0.507364 -rh -ar \
43 :     -dn -38.7956 -df 50 -fv 2.18834 -is 1280 960
44 :    
45 :     overrgb -i 000000.png -b 0.1 0.15 0.2 -o lung-vis.png
46 :    
47 :     */
48 :    
49 :     input int gridSize = 120;
50 :     field#2(3)[] F = bspln3 ⊛ image("data/lungcrop.nrrd");
51 :     input int stepsMax = 30;
52 :     input real epsilon = 0.001;
53 :     input real travelMax = 5.0;
54 :     input real strnMin = 170.0;
55 :    
56 :     strand sample (int ui, int vi, int wi) {
57 :     output vec3 pos = [lerp(21.6401, 21.6401 + 140.0*0.5,
58 :     -0.5, real(ui), real(gridSize)-0.5),
59 :     lerp(-175.8792, -175.8792 + 200.0*0.5,
60 :     -0.5, real(vi), real(gridSize)-0.5),
61 :     lerp(-188.0000, -188.0000 + 140.0*0.5,
62 :     -0.5, real(wi), real(gridSize)-0.5)];
63 :     int steps = 0;
64 :     real travel = 0.0;
65 :     update {
66 :     if (!inside(pos, F) || steps > stepsMax || travel > travelMax)
67 :     die;
68 :     real gmag = |∇F(pos)|;
69 :     if (gmag == 0.0) // can't compute step if |∇F|, so have to bail
70 :     die;
71 :     vec3 grad = ∇F(pos);
72 :     tensor[3,3] hess = ∇⊗∇F(pos);
73 :    
74 :     real{3} eval = evals(hess);
75 :     real strn = -eval{1};
76 :     vec3{3} evec = evecs(hess);
77 :     vec3 dir = normalize((evec{2}⊗evec{2} + evec{1}⊗evec{1})•grad);
78 :    
79 :     real fdd = grad•dir;
80 :     real sdd = dir•hess•dir;
81 :     vec3 delta = (0.1 if sdd >= 0.0 else -fdd/sdd)*dir;
82 :     if (|delta| < epsilon) {
83 :     if (strn >= strnMin)
84 :     stabilize;
85 :     die;
86 :     }
87 :     pos += delta;
88 :     steps += 1;
89 :     travel += |delta|;
90 :     }
91 :     }
92 :    
93 :     initially { sample(ui, vi, wi) |
94 :     wi in 0..(gridSize-1),
95 :     vi in 0..(gridSize-1),
96 :     ui in 0..(gridSize-1) };

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