summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Redfern <tim@eclectronics.org>2014-03-13 17:32:30 +0000
committerTim Redfern <tim@eclectronics.org>2014-03-13 17:32:30 +0000
commit8072eb4d248debf2d049548dd5dec21cc0152c52 (patch)
tree0f257a0d4521c0945fb6b693531c3b19d960b895
parentc062e52ad21440b69ec7096e37b0fc3346465328 (diff)
matrix size adjustment
-rw-r--r--offsetProject/src/imageStore.h34
-rw-r--r--offsetProject/src/ofApp.cpp28
-rw-r--r--offsetProject/src/ofApp.h2
3 files changed, 49 insertions, 15 deletions
diff --git a/offsetProject/src/imageStore.h b/offsetProject/src/imageStore.h
index 8d1b584..a2bd39d 100644
--- a/offsetProject/src/imageStore.h
+++ b/offsetProject/src/imageStore.h
@@ -5,6 +5,8 @@
#define MIN_TILE_SIZE 8
#define MAX_TILE_SIZE 16
+#define FLANN_MATRIX_SIZE 3
+
#include "ofMain.h"
#include "ofxJSONElement.h"
#include "ofxOpenCv.h"
@@ -51,7 +53,7 @@ class imageStore : public ofThread{
img.setUseTexture(true);
img.update();
images["000000"]=img;
- colours["000000"]=ofColor(0,0,0);
+ //colours["000000"]=ofColor(0,0,0);
}
~imageStore(){
@@ -113,6 +115,22 @@ class imageStore : public ofThread{
Matrix<float> query(test,1,3);
Matrix<int> indices(new int[1], query.rows, 1);
Matrix<float> dists(new float[1], query.rows, 1);
+ index->knnSearch(query, indices, dists, 1,SearchParams(10));
+ im=*imageptrs[*indices[0]];
+ //int i=rand()%imageptrs.size();
+ //im=images[imageptrs[i]];
+ //cerr<<"returning image "<<i<<endl;
+ unlock();
+ }
+ return im;
+ }
+
+ ofImage& get_image(float* data){
+ ofImage& im=images.begin()->second;
+ if( lock() ){
+ Matrix<float> query(data,1,FLANN_MATRIX_SIZE*FLANN_MATRIX_SIZE*3);
+ Matrix<int> indices(new int[1], query.rows, 1);
+ Matrix<float> dists(new float[1], query.rows, 1);
index->knnSearch(query, indices, dists, 1,SearchParams(4));
im=*imageptrs[*indices[0]];
//int i=rand()%imageptrs.size();
@@ -131,10 +149,14 @@ class imageStore : public ofThread{
void add_data(const ofImage& _img){
ofImage img=_img;
- img.resize(1,1);
- data.push_back(img.getPixels()[0]);
- data.push_back(img.getPixels()[1]);
- data.push_back(img.getPixels()[2]);
+ img.resize(FLANN_MATRIX_SIZE,FLANN_MATRIX_SIZE);
+ for (int i=0;i<FLANN_MATRIX_SIZE;i++){
+ for (int j=0;j<FLANN_MATRIX_SIZE;j++){
+ data.push_back(img.getPixels()[(j*FLANN_MATRIX_SIZE+i)*3]);
+ data.push_back(img.getPixels()[(j*FLANN_MATRIX_SIZE+i)*3+1]);
+ data.push_back(img.getPixels()[(j*FLANN_MATRIX_SIZE+i)*3+2]);
+ }
+ }
}
//--------------------------
@@ -168,7 +190,7 @@ class imageStore : public ofThread{
}
//build the flann index
- Matrix<float> dataset(&data[0],data.size()/3,3);
+ Matrix<float> dataset(&data[0],data.size()/(3*FLANN_MATRIX_SIZE*FLANN_MATRIX_SIZE),3*FLANN_MATRIX_SIZE*FLANN_MATRIX_SIZE);
index= new Index<L2<float> >(dataset, KDTreeIndexParams(4));
index->buildIndex();
diff --git a/offsetProject/src/ofApp.cpp b/offsetProject/src/ofApp.cpp
index 63b0791..51795f5 100644
--- a/offsetProject/src/ofApp.cpp
+++ b/offsetProject/src/ofApp.cpp
@@ -76,6 +76,8 @@ void ofApp::setup() {
mode=MODE_COLOURTILES;
fullscreen=false;
+
+ tiledata=new float[FLANN_MATRIX_SIZE*FLANN_MATRIX_SIZE*3];
}
//--------------------------------------------------------------
@@ -103,7 +105,7 @@ void ofApp::update() {
int h=ceil(ofGetHeight()/MAX_TILE_SIZE);
int w=(h*4)/3;
depthImage.resize(w,h);
- colourImage.resize(w,h);
+ colourImage.resize(w*FLANN_MATRIX_SIZE,h*FLANN_MATRIX_SIZE);
// mark pixels and texture dirty
depthImage.flagImageChanged();
@@ -145,22 +147,29 @@ void ofApp::draw() {
switch(mode){
case MODE_COLOURTILES:
//store.draw();
- xstart=(ofGetWidth()/2)-((colourImage.getHeight()/2)*MAX_TILE_SIZE);
- ystart=(ofGetHeight()/2)-((colourImage.getHeight()/2)*MAX_TILE_SIZE);
+ xstart=(ofGetWidth()/2)-((depthImage.getHeight()/2)*MAX_TILE_SIZE);
+ ystart=(ofGetHeight()/2)-((depthImage.getHeight()/2)*MAX_TILE_SIZE);
kinexstart=(colourImage.getWidth()/2)-(colourImage.getHeight()/2);
ofPushMatrix();
ofTranslate(xstart,ystart);
w=colourImage.getWidth();
for (int i=0;i<depthImage.getHeight();i++){
for (int j=0;j<depthImage.getHeight();j++){
- uint8_t* ppt=&colourImage.getPixels()[(j*w+(w-(i+kinexstart)))*3];
-
+ //uint8_t* ppt=&colourImage.getPixels()[((j*FLANN_MATRIX_SIZE)*w+(w-((i*FLANN_MATRIX_SIZE)+kinexstart)))*3];
- //store.get_image(ofColor(ppt[0],ppt[1],ppt[2])).draw(i*MAX_TILE_SIZE,j*MAX_TILE_SIZE);
+ for (int k=0;k<FLANN_MATRIX_SIZE;k++){
+ for (int l=0;l<FLANN_MATRIX_SIZE;l++){
+ tiledata[(l*FLANN_MATRIX_SIZE+k)*3]=colourImage.getPixels()[((j*FLANN_MATRIX_SIZE+l)*w+(w-((i*FLANN_MATRIX_SIZE+k)+kinexstart)))*3];
+ tiledata[(l*FLANN_MATRIX_SIZE+k)*3+1]=colourImage.getPixels()[((j*FLANN_MATRIX_SIZE+l)*w+(w-((i*FLANN_MATRIX_SIZE+k)+kinexstart)))*3+1];
+ tiledata[(l*FLANN_MATRIX_SIZE+k)*3+2]=colourImage.getPixels()[((j*FLANN_MATRIX_SIZE+l)*w+(w-((i*FLANN_MATRIX_SIZE+k)+kinexstart)))*3+2];
+ }
+ }
+ //ofImage& im=store.get_image(ofColor(ppt[0],ppt[1],ppt[2]));
//ofSetColor(ppt[0],ppt[1],ppt[2]);
//ofRect(i*MAX_TILE_SIZE,j*MAX_TILE_SIZE,MAX_TILE_SIZE,MAX_TILE_SIZE);
- ofImage& im=store.get_image(ppt[0],ppt[1],ppt[2]);
+ //ofImage& im=store.get_image(ppt[0],ppt[1],ppt[2]);
+ ofImage& im=store.get_image(tiledata);
if (im.isUsingTexture()) im.draw(i*MAX_TILE_SIZE,j*MAX_TILE_SIZE);
}
}
@@ -186,8 +195,9 @@ void ofApp::draw() {
//--------------------------------------------------------------
void ofApp::exit() {
-
-
+ delete tiledata;
+ kinect.setCameraTiltAngle(0); // zero the tilt on exit
+ kinect.close();
}
//--------------------------------------------------------------
diff --git a/offsetProject/src/ofApp.h b/offsetProject/src/ofApp.h
index a718aa1..f3aa3be 100644
--- a/offsetProject/src/ofApp.h
+++ b/offsetProject/src/ofApp.h
@@ -37,5 +37,7 @@ public:
ofxCvGrayscaleImage depthImage,depthImage2;
ofxKinect kinect;
+ float* tiledata;
+
bool fullscreen;
};