Skip to content

Commit 568e4d8

Browse files
committed
fixes for GUI and crash fix
1 parent 38f7c57 commit 568e4d8

File tree

4 files changed

+30
-23
lines changed

4 files changed

+30
-23
lines changed

src/BlobFinder.cpp

+6-6
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,12 @@ void BlobFinder::setup(ofxGui &gui){
3535
sensorBoxBottom.addListener(this, &BlobFinder::updateSensorBox);
3636

3737
sensorBoxGuiGroup.setName("SensorBox");
38-
sensorBoxGuiGroup.add(sensorBoxLeft.set("left", -500, 0, -4000));
39-
sensorBoxGuiGroup.add(sensorBoxRight.set("right", 500, 0, 4000));
38+
sensorBoxGuiGroup.add(sensorBoxLeft.set("left", -500, 1000, -4000));
39+
sensorBoxGuiGroup.add(sensorBoxRight.set("right", 500, -1000, 4000));
4040
sensorBoxGuiGroup.add(sensorBoxFront.set("front", 0, 0, 10000));
41-
sensorBoxGuiGroup.add(sensorBoxBack.set("back", 2000, 0, 7000));
42-
sensorBoxGuiGroup.add(sensorBoxTop.set("top", 2200, 0, 3000));
43-
sensorBoxGuiGroup.add(sensorBoxBottom.set("bottom", 1000, 0, 3000));
41+
sensorBoxGuiGroup.add(sensorBoxBack.set("back", 2000, 0, 10000));
42+
sensorBoxGuiGroup.add(sensorBoxTop.set("top", 2200, 0, 5000));
43+
sensorBoxGuiGroup.add(sensorBoxBottom.set("bottom", 1000, 0, 5000));
4444
panel->addGroup(sensorBoxGuiGroup);
4545

4646
blobGuiGroup.setName("Blobs");
@@ -251,7 +251,7 @@ void BlobFinder::update(){
251251
ofRectangle bounds = contourEyeFinder.blobs[i].boundingRect;
252252
for(int bid = 0; bid < trackedBlobs.size(); bid++){
253253
// find the blob
254-
if(trackedBlobs[bid].finder(bounds)){
254+
if(trackedBlobs[bid].isAlive() & trackedBlobs[bid].finder(bounds)){
255255

256256
//calculate the blob pos in worldspace
257257
ofVec3f headBlobCenter = ofVec3f(((float)bounds.getCenter().x / captureScreenSize.x) * sensorFieldWidth + sensorFieldLeft, sensorFieldBack - ((float)bounds.getCenter().y / captureScreenSize.y ) * sensorFieldDepth, trackedBlobs[bid].headCenter.z);

src/BlobTracker.cpp

+9-9
Original file line numberDiff line numberDiff line change
@@ -74,20 +74,20 @@ ofVec3f BlobTracker::getCurrentHeadCenter(){
7474
}
7575

7676
void BlobTracker::updateHead(ofVec3f _headBlobCenter, ofVec2f _headBlobSize, ofVec3f _eyeCenter){
77-
if(!hasHeadUpdated){
78-
tracker[0].headBlobCenter = _headBlobCenter;
79-
tracker[0].headBlobSize = _headBlobSize;
80-
tracker[0].eyeCenter = _eyeCenter;
81-
} else {
82-
// this means the previous blob was split up.
83-
if(tracker.size() > 0 && tracker[0].headBlobCenter.z < _headBlobCenter.z){ //if this new blob is higher then take it
77+
if(tracker.size() > 0){
78+
if(!hasHeadUpdated){
79+
tracker[0].headBlobCenter = _headBlobCenter;
80+
tracker[0].headBlobSize = _headBlobSize;
81+
tracker[0].eyeCenter = _eyeCenter;
82+
} else if(tracker[0].headBlobCenter.z < _headBlobCenter.z){
83+
//if this new blob is higher then take it
8484
tracker[0].headBlobCenter = _headBlobCenter;
8585
tracker[0].headBlobSize = _headBlobSize;
8686
tracker[0].eyeCenter = _eyeCenter;
8787
}
88+
89+
hasHeadUpdated = true;
8890
}
89-
90-
hasHeadUpdated = true;
9191
}
9292

9393
void BlobTracker::updateEnd(ofVec3f _kinectPos, int _smoothOffset, float _smoothFactor){

src/ofApp.cpp

+15-8
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ void ofApp::setup(){
106106
intrinsicGuiGroup.setName("Corrections");
107107
intrinsicGuiGroup.add(depthCorrectionBase.set("base", 1.0, 0.9, 1.1));
108108
intrinsicGuiGroup.add(depthCorrectionDivisor.set("divisor", 100000, 90000, 110000));
109-
intrinsicGuiGroup.add(pixelSizeCorrector.set("pixl factor", 1.0, 0.9, 1.1));
109+
intrinsicGuiGroup.add(pixelSizeCorrector.set("pixl factor", 1.0, 0.9, 1.2));
110110
deviceCalib->addGroup(intrinsicGuiGroup);
111111

112112
deviceCalib->loadFromFile(kinectSerialID + ".xml");
@@ -674,6 +674,17 @@ void ofApp::updatePointCloud(ofVboMesh & mesh, int step, bool useFrustumCone, bo
674674
float sensorFieldTop = blobFinder.sensorBoxTop .get();
675675
float sensorFieldBottom = blobFinder.sensorBoxBottom.get();
676676

677+
float centerH = (sensorFieldLeft + sensorFieldRight) / 2.0;
678+
float centerK = (sensorFieldFront + sensorFieldBack) / 2.0;
679+
float radiusX = (sensorFieldRight - sensorFieldLeft) / 2.0;
680+
float radiusY = (sensorFieldBack - sensorFieldFront) / 2.0;
681+
682+
radiusX = radiusX * radiusX;
683+
radiusY = radiusY * radiusY;
684+
685+
//https://math.stackexchange.com/questions/76457/check-if-a-point-is-within-an-ellipse#76463
686+
//(x−h)^2/rx^2+(y−k)^2/ry^2≤1.
687+
677688
for(int y = 0; y < h; y += step) {
678689
for(int x = 0; x < w; x += step) {
679690
vertex.z = 0;
@@ -690,13 +701,9 @@ void ofApp::updatePointCloud(ofVboMesh & mesh, int step, bool useFrustumCone, bo
690701
}
691702
if(vertex.z != 0){
692703
if(sensorFieldLeft < vertex.x && vertex.x < sensorFieldRight &&
693-
sensorFieldFront < vertex.y && vertex.y < sensorFieldBack &&
694-
sensorFieldBottom < vertex.z && vertex.z < sensorFieldTop){
695-
mesh.addColor((vertex.z - sensorFieldBottom) / (sensorFieldTop - sensorFieldBottom));
696-
} else if(sensorFieldLeft < vertex.x && vertex.x < sensorFieldRight &&
697-
sensorFieldFront < vertex.y && vertex.y < sensorFieldBack &&
698-
sensorFieldBottom < vertex.z && vertex.z < sensorFieldTop){
699-
mesh.addColor((vertex.z - sensorFieldBottom) / (sensorFieldTop - sensorFieldBottom));
704+
sensorFieldFront < vertex.y && vertex.y < sensorFieldBack &&
705+
sensorFieldBottom < vertex.z && vertex.z < sensorFieldTop){
706+
mesh.addColor((vertex.z - sensorFieldBottom) / (sensorFieldTop - sensorFieldBottom));
700707
} else {
701708
if(useVideoColor)
702709
mesh.addColor(kinect.getColorAt(x,y));

0 commit comments

Comments
 (0)