Text archives Help
- From: abhinav@sci.utah.edu
- To: manta@sci.utah.edu
- Subject: [MANTA] r518 - in branches/AFR/Engine/ImageTraversers: . AFR
- Date: Tue, 30 Aug 2005 21:54:36 -0600 (MDT)
Author: abhinav
Date: Tue Aug 30 21:54:34 2005
New Revision: 518
Modified:
branches/AFR/Engine/ImageTraversers/AFImageTraverser.h
branches/AFR/Engine/ImageTraversers/AFR/kdtree.cc
branches/AFR/Engine/ImageTraversers/AFR/sample.h
branches/AFR/Engine/ImageTraversers/AFR/tiles.cc
branches/AFR/Engine/ImageTraversers/AFR/tiles.h
Log:
added rgb variance rather than single intensity variance, made t hings a tad
slower but much better tiling.
added #define COARSE_UPDATES in kdtree.cc. it disabple leaf updates and
recomputing during split/merge. seems to work okay with slightly poor tiling
but with some speedup. comment it if it is not suitable.
Modified: branches/AFR/Engine/ImageTraversers/AFImageTraverser.h
==============================================================================
--- branches/AFR/Engine/ImageTraversers/AFImageTraverser.h (original)
+++ branches/AFR/Engine/ImageTraversers/AFImageTraverser.h Tue Aug 30
21:54:34 2005
@@ -62,7 +62,7 @@
void write_Tile_and_Camera(RenderContext& context);
inline int setSamplingRate(unsigned int srate)
{
- static int numUpdates=0;
+ static unsigned int numUpdates=0;
//cout << "srate = " << srate << endl;
float rate = (float)srate/(float)num_clients;
if(numUpdates==0)
@@ -72,8 +72,11 @@
samplingrate =
(int)(((float)samplingrate*numUpdates + rate)/(float)(numUpdates+1));
}
numUpdates++;
- qSize = (int)(samplingrate*0.1);
- if(qSize>maxQSize) qSize = maxQSize;
+ if(numUpdates%1000==0)
+ {
+ qSize = (int)(samplingrate*0.1);
+ if(qSize>maxQSize) qSize = maxQSize;
+ }
}
static ImageTraverser* create(const vector<string>&
args);
Modified: branches/AFR/Engine/ImageTraversers/AFR/kdtree.cc
==============================================================================
--- branches/AFR/Engine/ImageTraversers/AFR/kdtree.cc (original)
+++ branches/AFR/Engine/ImageTraversers/AFR/kdtree.cc Tue Aug 30 21:54:34
2005
@@ -9,6 +9,7 @@
#include <Engine/ImageTraversers/AFR/kdtree.h>
#include <assert.h>
#define ONLY_NODE_UPDATE
+#define COARSE_UPDATES
using namespace Manta;
using namespace Manta::Afr;
KDTree::KDTree()
@@ -201,9 +202,12 @@
tile[index*2].setValidTile();
tile[index*2].setTimeLastDerivativeSet(currenttime);
#ifdef ONLY_NODE_UPDATE
- //tile[index*2].copystats(tile[index]);
+#ifdef COARSE_UPDATES
+ tile[index*2].copystats(tile[index]);
+#else
tile[index*2].recomputeStats(tile);
#endif
+#endif
tile[index*2].updateCommon(currenttime, tile, numTiles, samplingrate);
// insert right child in the random list; we do it first because we
do not want it to be valid yet
insertRandom(index*2+1);
@@ -211,9 +215,12 @@
tile[index*2+1].setValidTile();
tile[index*2+1].setTimeLastDerivativeSet(currenttime);
#ifdef ONLY_NODE_UPDATE
- //tile[index*2+1].copystats(tile[index]);
+#ifdef COARSE_UPDATES
+ tile[index*2+1].copystats(tile[index]);
+#else
tile[index*2+1].recomputeStats(tile);
#endif
+#endif
tile[index*2+1].updateCommon(currenttime, tile, numTiles,
samplingrate);
numTiles+=2; // update valid tile counter
@@ -272,8 +279,12 @@
// set parent as a valid tile
tile[index].setValidTile();
#ifdef ONLY_NODE_UPDATE
+#ifdef COARSE_UPDATES
+ tile[index/2].copystats(tile[index]);
+#else
tile[index/2].recomputeStats(tile);
#endif
+#endif
tile[index].setTimeLastDerivativeSet(currenttime);
// increment valid tile counter
numTiles++;
@@ -496,16 +507,19 @@
else
updateMinMax(vtileindex);
#else
+#ifndef COARSE_UPDATES
int x, y;
x = (int)newsampleset->viewX;
y = (int)newsampleset->viewY;
int index = Tile::leafMapping[x/2][y/2];
if(!tile[index].checkBounds(x,y)) return;
tile[index].updateStatsAddSampleSet(newsampleset, currenttime, A, B,
tile, numTiles, samplingrate);
+#else
tile[newsampleset->tileindex].updateStatsAddSampleSet(newsampleset,
currenttime, A, B, tile, numTiles, samplingrate);
tile[newsampleset->tileindex/2].updateStatsAddSampleSet(newsampleset,
currenttime, A, B, tile, numTiles, samplingrate);
updateMinMax(newsampleset->tileindex);
#endif
+#endif
}
void KDTree::updateStatsAddSample(Sample *newsample, Timestamp currenttime,
@@ -532,6 +546,7 @@
else
updateMinMax(vtileindex);
#else
+#ifndef COARSE_UPDATES
int x, y;
x = (int)newsample->viewCoord[0];
y = (int)newsample->viewCoord[1];
@@ -539,9 +554,11 @@
if(!tile[index].checkBounds(x,y)) return;
tile[index].updateStatsAddSample(newsample, currenttime, A, B, tile,
numTiles, tgrad, occ, samplingrate);
+#else
tile[newsample->tileindex].updateStatsAddSample(newsample,
currenttime, A, B, tile, numTiles, tgrad, occ, samplingrate);
tile[newsample->tileindex/2].updateStatsAddSample(newsample,
currenttime, A, B, tile, numTiles, tgrad, occ, samplingrate);
updateMinMax(newsample->tileindex);
+#endif
#endif
}
Modified: branches/AFR/Engine/ImageTraversers/AFR/sample.h
==============================================================================
--- branches/AFR/Engine/ImageTraversers/AFR/sample.h (original)
+++ branches/AFR/Engine/ImageTraversers/AFR/sample.h Tue Aug 30 21:54:34
2005
@@ -285,6 +285,9 @@
}
float getIntensity(CrosshairSampleLoc
sloc) { return sample[sloc].intensity(); }
+ float getR(CrosshairSampleLoc sloc) {
return sample[sloc].c[0]; }
+ float getG(CrosshairSampleLoc sloc) {
return sample[sloc].c[1]; }
+ float getB(CrosshairSampleLoc sloc) {
return sample[sloc].c[2]; }
Timestamp
getSampleTimeStamp(CrosshairSampleLoc sloc) { return sample[sloc].t; }
inline bool isOccluded() {
const static float epsilon = 0.001;
Modified: branches/AFR/Engine/ImageTraversers/AFR/tiles.cc
==============================================================================
--- branches/AFR/Engine/ImageTraversers/AFR/tiles.cc (original)
+++ branches/AFR/Engine/ImageTraversers/AFR/tiles.cc Tue Aug 30 21:54:34
2005
@@ -43,16 +43,16 @@
nextrandom=prevrandom=0;
}
-void Tile::initialize(int l, int b, int r, int t,
+void Tile::initialize(int lft, int btm, int rht, int tp,
int currlevel, int address,
int width, int height,
float A, float B)
{
- left = l;
- right = r;
- bottom = b;
- top = t;
- num_pixels = (r-l)*(t-b);
+ left = lft;
+ right = rht;
+ bottom = btm;
+ top = tp;
+ num_pixels = (right-left)*(top-bottom);
//if(num_pixels==0) exit(1);
if(num_pixels<=MIN_VALID_TILE_AREA) min_size_violation = true;
else min_size_violation = false;
@@ -60,16 +60,17 @@
index = address;
max_index = index;
min_index = index;
- intensity.reset();
+ //intensity.reset();
+ r.reset(); g.reset(); b.reset();
xGradient.reset();
yGradient.reset();
tGradient.reset();
occlusion.reset();
error = AMBIENT_ERROR;
sum_tstamps.reset();
- color[0] = drand48();
- color[1] = drand48();
- color[2] = drand48();
+ color[0] = drand48();
+ color[1] = drand48();
+ color[2] = drand48();
}
@@ -126,7 +127,8 @@
//error = (0.25*getUnderSampling(currenttime, samplingrate)
// + 2.0*(intensity.getVariance()+AMBIENT_ERROR)
// +0.25*getOcclusionMeasure(tree, nTiles))*num_pixels ;
- error = 2.0*(intensity.getVariance()+AMBIENT_ERROR)*num_pixels;
+ //error =
2.0*(intensity.getVariance()+AMBIENT_ERROR)*num_pixels;
+ error = 2.0*(r.getVariance() + g.getVariance() + b.getVariance() +
AMBIENT_ERROR)*num_pixels;
//error += 0.25*getUnderSampling(currenttime, samplingrate,
tree)*num_pixels;
error += 0.25*getOcclusionMeasure(tree, nTiles)*num_pixels;
}
@@ -165,7 +167,8 @@
for(int i=lindex; i<rindex; i++)
{
- intensity += tree[i].intensity;
+ //intensity += tree[i].intensity;
+ r += tree[i].r; g += tree[i].g; b += tree[i].b;
xGradient += tree[i].xGradient;
yGradient += tree[i].yGradient;
tGradient += tree[i].tGradient;
@@ -182,11 +185,29 @@
float temptime = newsampleset->getSampleTimeStamp(TEMPORAL_SAMPLE);
float stime = newsampleset->timestamp;
- intensity.addElement(newsampleset->getIntensity(CENTER_SAMPLE),
wt_new, ratio);
- intensity.addElement(newsampleset->getIntensity(TOP_SAMPLE), wt_new,
1.0);
- intensity.addElement(newsampleset->getIntensity(BOTTOM_SAMPLE),
wt_new, 1.0);
- intensity.addElement(newsampleset->getIntensity(LEFT_SAMPLE), wt_new,
1.0);
- intensity.addElement(newsampleset->getIntensity(RIGHT_SAMPLE),
wt_new, 1.0);
+ //intensity.addElement(newsampleset->getIntensity(CENTER_SAMPLE),
wt_new, ratio);
+ //intensity.addElement(newsampleset->getIntensity(TOP_SAMPLE),
wt_new, 1.0);
+ //intensity.addElement(newsampleset->getIntensity(BOTTOM_SAMPLE),
wt_new, 1.0);
+ //intensity.addElement(newsampleset->getIntensity(LEFT_SAMPLE),
wt_new, 1.0);
+ //intensity.addElement(newsampleset->getIntensity(RIGHT_SAMPLE),
wt_new, 1.0);
+
+ r.addElement(newsampleset->getR(CENTER_SAMPLE), wt_new, ratio);
+ r.addElement(newsampleset->getR(TOP_SAMPLE), wt_new, 1.0);
+ r.addElement(newsampleset->getR(BOTTOM_SAMPLE), wt_new, 1.0);
+ r.addElement(newsampleset->getR(LEFT_SAMPLE), wt_new, 1.0);
+ r.addElement(newsampleset->getR(RIGHT_SAMPLE), wt_new, 1.0);
+
+ g.addElement(newsampleset->getG(CENTER_SAMPLE), wt_new, ratio);
+ g.addElement(newsampleset->getG(TOP_SAMPLE), wt_new, 1.0);
+ g.addElement(newsampleset->getG(BOTTOM_SAMPLE), wt_new, 1.0);
+ g.addElement(newsampleset->getG(LEFT_SAMPLE), wt_new, 1.0);
+ g.addElement(newsampleset->getG(RIGHT_SAMPLE), wt_new, 1.0);
+
+ b.addElement(newsampleset->getB(CENTER_SAMPLE), wt_new, ratio);
+ b.addElement(newsampleset->getB(TOP_SAMPLE), wt_new, 1.0);
+ b.addElement(newsampleset->getB(BOTTOM_SAMPLE), wt_new, 1.0);
+ b.addElement(newsampleset->getB(LEFT_SAMPLE), wt_new, 1.0);
+ b.addElement(newsampleset->getB(RIGHT_SAMPLE), wt_new, 1.0);
xGradient.addElement(newsampleset->xgrad, wt_new, ratio);
yGradient.addElement(newsampleset->ygrad, wt_new, ratio);
@@ -206,7 +227,10 @@
{
float wt_new = 1.0;
float ratio = getWeight(A, B, (currenttime - time_last_updated));
- intensity.addElement(newsample->intensity(), wt_new, ratio);
+ //intensity.addElement(newsample->intensity(), wt_new, ratio);
+ r.addElement(newsample->c[0], wt_new, ratio);
+ g.addElement(newsample->c[1], wt_new, ratio);
+ b.addElement(newsample->c[2], wt_new, ratio);
//sum_tstamps.addElement(newsample->t, wt_new, ratio);
sum_tstamps.uniformDecrease(ratio);
xGradient.uniformDecrease(ratio);
Modified: branches/AFR/Engine/ImageTraversers/AFR/tiles.h
==============================================================================
--- branches/AFR/Engine/ImageTraversers/AFR/tiles.h (original)
+++ branches/AFR/Engine/ImageTraversers/AFR/tiles.h Tue Aug 30 21:54:34
2005
@@ -60,7 +60,8 @@
Stats2 xGradient, yGradient, tGradient,
sum_tstamps, occlusion;
- Stats intensity;
+ //Stats intensity;
+ Stats r,g,b;
float error, previous_error, total_error;
Timestamp time_last_derivative_set, time_last_updated;
int derivative_gap_count;
@@ -84,12 +85,16 @@
yGradient = t.yGradient;
tGradient = t.tGradient;
- intensity = t.intensity;
+ //intensity = t.intensity;
+ r = t.r;
+ g = t.g;
+ b = t.b;
+
sum_tstamps = t.sum_tstamps;
occlusion = t.occlusion;
}
void print( int nTiles, Tile *tree, Timestamp currenttime);
- void initialize(int l, int b, int r, int t,
+ void initialize(int lft, int btm, int rht, int top,
int currlevel, int address,
int width, int height,
float A, float B);
- [MANTA] r518 - in branches/AFR/Engine/ImageTraversers: . AFR, abhinav, 08/30/2005
Archive powered by MHonArc 2.6.16.