7 Commits

Author SHA1 Message Date
Jamie Allen 327830a581 beginning to integrate dviid's code 2012-04-08 20:18:44 +02:00
Jamie Allen 877123a2db changes to colorsingleanalysis
colorsingleanalysis has some initial vectorisation code
2012-04-06 17:13:39 +02:00
Jamie Allen feedecfe04 implementing colorsingleanalysis
a start at the new colorsingleanalysis design...
2012-04-06 16:29:54 +02:00
Jamie Allen daec77d2be some memory leak fixes in RelaxRate
still have problem with image.allocation not letting go of memory
properly... and image.load(image.jpg);
2012-03-02 11:37:24 +00:00
Jamie Allen 6d0f6422bf mar 2nd trying to fix memory leaks 2012-03-02 10:27:45 +00:00
Jamie Allen 1728a128e4 trying to fix memory probs - blobs / images clearings 2012-03-02 01:31:21 +00:00
Jamie Allen e43b78cc5a Revert 884e55abd48d4efa0c6bfe06469e7b1abea51c14^..HEAD 2012-03-02 01:01:53 +00:00
13 changed files with 351 additions and 176 deletions
+39 -39
View File
@@ -1,45 +1,45 @@
<!-- THIS FILE NEEDS TO GO IN THE APPLICATION /data/ folder --> <!-- THIS FILE NEEDS TO GO IN THE APPLICATION /data/ folder -->
<config> <config>
<camera> <camera>
<id>1</id> <id>1</id>
<width>640</width> <width>640</width>
<height>480</height> <height>480</height>
</camera> </camera>
<display> <display>
<fps>30</fps> <fps>30</fps>
</display> </display>
<locale> <locale>
<name>SWANSEA</name> <name>SWANSEA</name>
</locale> </locale>
<analysis_NUM_RUN> <analysis_NUM_RUN>
<NUM_RUN_shadowscapes> 3 </NUM_RUN_shadowscapes> <NUM_RUN_shadowscapes> 3 </NUM_RUN_shadowscapes>
<NUM_RUN_relaxrate> 3 </NUM_RUN_relaxrate> <NUM_RUN_relaxrate> 3 </NUM_RUN_relaxrate>
<NUM_RUN_iresponse> 3 </NUM_RUN_iresponse> <NUM_RUN_iresponse> 3 </NUM_RUN_iresponse>
<NUM_RUN_shapefromshading> 3 </NUM_RUN_shapefromshading> <NUM_RUN_shapefromshading> 3 </NUM_RUN_shapefromshading>
<NUM_RUN_strobe> 5 </NUM_RUN_strobe> <NUM_RUN_strobe> 5 </NUM_RUN_strobe>
<NUM_RUN_camnoise> 5 </NUM_RUN_camnoise> <NUM_RUN_camnoise> 5 </NUM_RUN_camnoise>
<NUM_RUN_colorsingle> 5 </NUM_RUN_colorsingle> <NUM_RUN_colorsingle> 5 </NUM_RUN_colorsingle>
<NUM_RUN_colormulti> 5 </NUM_RUN_colormulti> <NUM_RUN_colormulti> 5 </NUM_RUN_colormulti>
<NUM_RUN_diffnoise> 3 </NUM_RUN_diffnoise> <NUM_RUN_diffnoise> 3 </NUM_RUN_diffnoise>
</analysis_NUM_RUN> </analysis_NUM_RUN>
<analysis_time>
<acquiretime_shadowscapes> 30 </acquiretime_shadowscapes>
<acquiretime_relaxrate> 30 </acquiretime_relaxrate>
<acquiretime_iresponse> 30 </acquiretime_iresponse>
<acquiretime_shapefromshading> 30 </acquiretime_shapefromshading>
<acquiretime_strobe> 30 </acquiretime_strobe>
<acquiretime_camnoise> 30 </acquiretime_camnoise>
<acquiretime_colorsingle> 40 </acquiretime_colorsingle>
<acquiretime_colormulti> 40 </acquiretime_colormulti>
<acquiretime_diffnoise> 30 </acquiretime_diffnoise>
</analysis_time>
<relaxrate>
<threshold>51</threshold>
<maxblobs>25</maxblobs>
</relaxrate>
<analysis_time>
<acquiretime_shadowscapes> 30 </acquiretime_shadowscapes>
<acquiretime_relaxrate> 30 </acquiretime_relaxrate>
<acquiretime_iresponse> 30 </acquiretime_iresponse>
<acquiretime_shapefromshading> 30 </acquiretime_shapefromshading>
<acquiretime_strobe> 30 </acquiretime_strobe>
<acquiretime_camnoise> 30 </acquiretime_camnoise>
<acquiretime_colorsingle> 40 </acquiretime_colorsingle>
<acquiretime_colormulti> 40 </acquiretime_colormulti>
<acquiretime_diffnoise> 30 </acquiretime_diffnoise>
</analysis_time>
<relaxrate>
<treshold>51</treshold>
<maxblobs>25</maxblobs>
</relaxrate>
</config> </config>
+64 -52
View File
@@ -27,8 +27,10 @@
#define ISTATE_TRANSITION 0xCCCC #define ISTATE_TRANSITION 0xCCCC
#define ISTATE_END 0xDDDD #define ISTATE_END 0xDDDD
int _state = ISTATE_UNDEF; int _state = ISTATE_UNDEF;
int RefractiveIndex::_mode;
ofPixels RefractiveIndex::_pixels; ofPixels RefractiveIndex::_pixels;
ofVideoGrabber RefractiveIndex::_vidGrabber; ofVideoGrabber RefractiveIndex::_vidGrabber;
int RefractiveIndex::_vid_w, RefractiveIndex::_vid_h, RefractiveIndex::_vid_id; int RefractiveIndex::_vid_w, RefractiveIndex::_vid_h, RefractiveIndex::_vid_id;
@@ -49,7 +51,11 @@ void RefractiveIndex::setup()
} else { } else {
XML.loadFile("config.refindx"); XML.loadFile("config.refindx");
} }
// <mode>
string m = XML.getValue("config:mode", "analysing");
_mode = (m == "analysing" ? MODE_ANALYSING : (m == "drawing" ? MODE_DRAWING : MODE_ANALYSING));
// <camera> // <camera>
_vid_id = XML.getValue("config:camera:id", CAMERA_ID); _vid_id = XML.getValue("config:camera:id", CAMERA_ID);
cout << "_vid_id: " << _vid_id << endl; cout << "_vid_id: " << _vid_id << endl;
@@ -59,12 +65,12 @@ void RefractiveIndex::setup()
// <display> // <display>
int fps = XML.getValue("config:display:fps", 30); int fps = XML.getValue("config:display:fps", 30);
// <location> // <location>
_location = XML.getValue("config:locale:name", LOCATION); _location = XML.getValue("config:locale:name", LOCATION);
cout << "Configuring..." << endl; cout << "Configuring..." << endl;
// display // display
cout << "> display" << endl; cout << "> display" << endl;
ofSetFrameRate(fps); ofSetFrameRate(fps);
@@ -82,13 +88,15 @@ void RefractiveIndex::setup()
cout << "* cam width = " << _vid_w << endl; cout << "* cam width = " << _vid_w << endl;
cout << "* cam height = " << _vid_h << endl; cout << "* cam height = " << _vid_h << endl;
_vid_stream_open = false; if(_mode == MODE_ANALYSING) {
setup_camera(); _vid_stream_open = false;
setup_camera();
}
cout << "RRRRRREADY!" << endl; cout << "RRRRRREADY!" << endl;
_analysisAdapator = NULL; _analysisAdapator = NULL;
//getting a warning from the OFlog that the pixels aren't allocated //getting a warning from the OFlog that the pixels aren't allocated
//void ofPixels::allocate(int w, int h, ofImageType type) //void ofPixels::allocate(int w, int h, ofImageType type)
_pixels.allocate(_vid_w, _vid_h, OF_IMAGE_COLOR); _pixels.allocate(_vid_w, _vid_h, OF_IMAGE_COLOR);
@@ -99,7 +107,7 @@ void RefractiveIndex::setup()
_analysisVector.push_back(new ShadowScapesAnalysis(V)); _analysisVector.push_back(new ShadowScapesAnalysis(V));
_analysisVector.push_back(new ShadowScapesAnalysis(H)); _analysisVector.push_back(new ShadowScapesAnalysis(H));
_analysisVector.push_back(new ShadowScapesAnalysis(D)); _analysisVector.push_back(new ShadowScapesAnalysis(D));
_analysisVector.push_back(new RelaxRateAnalysis()); _analysisVector.push_back(new RelaxRateAnalysis());
@@ -117,7 +125,7 @@ void RefractiveIndex::setup()
_analysisVector.push_back(new DiffNoiseAnalysis()); _analysisVector.push_back(new DiffNoiseAnalysis());
//_currentAnalysisIndx = 0; //_currentAnalysisIndx = 0;
//_currentAnalysis = _analysisVector.at(_currentAnalysisIndx++); //_currentAnalysis = _analysisVector.at(_currentAnalysisIndx++);
//_state = ISTATE_START; //_state = ISTATE_START;
@@ -173,10 +181,14 @@ void RefractiveIndex::state_analysis()
break; break;
case ISTATE_STOP: case ISTATE_STOP:
stop_analysis(); // blocking stop_analysis(); // blocking
_state = ISTATE_TRANSITION; if(_mode == MODE_DRAWING)
_state = ISTATE_UNDEF;
else
_state = ISTATE_TRANSITION;
break; break;
case ISTATE_END: case ISTATE_END:
stop_camera(); if(_mode == MODE_ANALYSING)
stop_camera();
::exit(1); ::exit(1);
break; break;
case ISTATE_UNDEF: case ISTATE_UNDEF:
@@ -198,7 +210,7 @@ void RefractiveIndex::draw()
// black // black
ofBackground(0, 0, 0); ofBackground(0, 0, 0);
if(_currentAnalysis) if(_currentAnalysis)
_currentAnalysis->draw(); _currentAnalysis->draw();
} }
@@ -259,7 +271,7 @@ void RefractiveIndex::keyPressed (int key)
if(!_currentAnalysis) if(!_currentAnalysis)
_state = ISTATE_TRANSITION; _state = ISTATE_TRANSITION;
} }
else if(key == '2') else if(key == '2')
{ {
if(_currentAnalysis) if(_currentAnalysis)
@@ -268,7 +280,7 @@ void RefractiveIndex::keyPressed (int key)
if(!_currentAnalysis) if(!_currentAnalysis)
_state = ISTATE_TRANSITION; _state = ISTATE_TRANSITION;
} }
else if(key == '3') else if(key == '3')
{ {
if(_currentAnalysis) if(_currentAnalysis)
@@ -340,7 +352,7 @@ void RefractiveIndex::keyPressed (int key)
if(!_currentAnalysis) if(!_currentAnalysis)
_state = ISTATE_TRANSITION; _state = ISTATE_TRANSITION;
} }
else if(key == 'q') else if(key == 'q')
{ {
if(_currentAnalysis) if(_currentAnalysis)
@@ -354,42 +366,42 @@ void RefractiveIndex::keyPressed (int key)
TO DO: add a file dialog so we can save images to another hard drive... TO DO: add a file dialog so we can save images to another hard drive...
e.g.: http://dev.openframeworks.cc/pipermail/of-dev-openframeworks.cc/2011-April/003125.html e.g.: http://dev.openframeworks.cc/pipermail/of-dev-openframeworks.cc/2011-April/003125.html
>> case 's': >> case 's':
>> doSave ^= true; >> doSave ^= true;
>> doLoad = false; >> doLoad = false;
>> if(doSave) { >> if(doSave) {
>> ofFileDialogResult r = ofSystemLoadDialog("Select path to save to", true); >> ofFileDialogResult r = ofSystemLoadDialog("Select path to save to", true);
>> if(r.bSuccess) { >> if(r.bSuccess) {
>> saveCounter = 0; >> saveCounter = 0;
>> savePath = r.getPath(); >> savePath = r.getPath();
>> ofDirectory::createDirectory(savePath + "/color/"); >> ofDirectory::createDirectory(savePath + "/color/");
>> ofDirectory::createDirectory(savePath + "/depth/"); >> ofDirectory::createDirectory(savePath + "/depth/");
>> printf("SAVE %s %s\n", r.getPath().c_str(), r.getName().c_str()); >> printf("SAVE %s %s\n", r.getPath().c_str(), r.getName().c_str());
>> } else { >> } else {
>> doSave = false; >> doSave = false;
>> } >> }
>> >>
>> } >> }
>> break; >> break;
>> >>
>> case 'l': >> case 'l':
>> doLoad ^= true; >> doLoad ^= true;
>> doSave = false; >> doSave = false;
>> if(doLoad) { >> if(doLoad) {
>> ofFileDialogResult r = ofSystemLoadDialog("Select path to load from", true); >> ofFileDialogResult r = ofSystemLoadDialog("Select path to load from", true);
>> if(r.bSuccess) { >> if(r.bSuccess) {
>> loadCounter = 0; >> loadCounter = 0;
>> loadPath = r.getPath(); >> loadPath = r.getPath();
>> ofDirectory dir; >> ofDirectory dir;
>> loadMaxFiles = MAX(dir.listDir(loadPath + "/color"), dir.listDir(loadPath + "/depth")); >> loadMaxFiles = MAX(dir.listDir(loadPath + "/color"), dir.listDir(loadPath + "/depth"));
>> printf("LOAD %i %s %s\n", loadMaxFiles, r.getPath().c_str(), r.getName().c_str()); >> printf("LOAD %i %s %s\n", loadMaxFiles, r.getPath().c_str(), r.getName().c_str());
>> } else { >> } else {
>> doLoad = false; >> doLoad = false;
>> } >> }
>> >>
>> } >> }
>> break; >> break;
*/ */
} }
+5
View File
@@ -11,6 +11,9 @@
#include "ofxOpenCv.h" #include "ofxOpenCv.h"
#include "ofxXmlSettings.h" #include "ofxXmlSettings.h"
#define MODE_DRAWING 0xEEFF
#define MODE_ANALYSING 0xFFEE
class RefractiveIndex : public ofBaseApp class RefractiveIndex : public ofBaseApp
{ {
public: public:
@@ -55,6 +58,8 @@ public:
// acquisition // acquisition
static ofPixels _pixels; static ofPixels _pixels;
static ofVideoGrabber _vidGrabber; static ofVideoGrabber _vidGrabber;
static int _mode;
vector<string> videoSourceList; vector<string> videoSourceList;
static int _vid_w, _vid_h, _vid_id; static int _vid_w, _vid_h, _vid_id;
static bool _vid_stream_open; static bool _vid_stream_open;
+2
View File
@@ -22,9 +22,11 @@ void AbstractAnalysis::do_synthesize() {
if(_state == STATE_STOP) goto exit; if(_state == STATE_STOP) goto exit;
_state = STATE_DISPLAY_RESULTS; _state = STATE_DISPLAY_RESULTS;
displayresults(); displayresults();
cleanup();
} }
exit: exit:
cleanup();
ofNotifyEvent(_synthesize_cb, _name); ofNotifyEvent(_synthesize_cb, _name);
} }
+4
View File
@@ -48,6 +48,10 @@ protected:
// display the results from disk // display the results from disk
virtual void displayresults() = 0; virtual void displayresults() = 0;
// display the results from disk
virtual void cleanup() {;}
public: public:
string _name; string _name;
+4 -4
View File
@@ -151,17 +151,17 @@ void CamNoiseAnalysis::synthesise()
//cvColorImage2.setFromPixels(image5.getPixels(), image5.width, image5.height); //cvColorImage2.setFromPixels(image5.getPixels(), image5.width, image5.height);
cvColorImage1.convertToGrayscalePlanarImage(cvGrayImage1, 1); cvColorImage1.convertToGrayscalePlanarImage(cvGrayImage1, 1);
// cvColorImage2.convertToGrayscalePlanarImage(cvGrayImage2, 1); // cvColorImage2.convertToGrayscalePlanarImage(cvGrayImage2, 1);
//added by tom we weren't actually setting cvgrayimage1 anywhere //added by tom we weren't actually setting cvgrayimage1 anywhere
// cvGrayImage1.setFromPixels(cvColorImage1.getPixels(),cvColorImage1.width,cvColorImage1.height); // cvGrayImage1.setFromPixels(cvColorImage1.getPixels(),cvColorImage1.width,cvColorImage1.height);
//cvGrayDiff1.absDiff(cvGrayImage2, cvGrayImage1); //cvGrayDiff1.absDiff(cvGrayImage2, cvGrayImage1);
//cvGrayImage1=cvColorImage1; //cvGrayImage1=cvColorImage1;
cvGrayImage1.erode(); cvGrayImage1.erode();
cvGrayImage1.erode(); cvGrayImage1.erode();
cvGrayImage1.erode(); cvGrayImage1.erode();
cvGrayImage1.blur(); cvGrayImage1.blur();
cvGrayImage1.contrastStretch(); cvGrayImage1.contrastStretch();
/* cvColorImage1.erode(); /* cvColorImage1.erode();
cvColorImage1.erode(); cvColorImage1.erode();
cvColorImage1.erode(); cvColorImage1.erode();
-2
View File
@@ -246,8 +246,6 @@ void ColorMultiAnalysis::draw()
//cout << "FADING IN..." << endl; //cout << "FADING IN..." << endl;
} }
if (_frame_cnt >= _fade_in_frames && _frame_cnt < _frame_cnt_max-_fade_in_frames){ if (_frame_cnt >= _fade_in_frames && _frame_cnt < _frame_cnt_max-_fade_in_frames){
aColor.setHsb(c, 255, 255); aColor.setHsb(c, 255, 255);
+164 -17
View File
@@ -105,7 +105,7 @@ void ColorSingleAnalysis::acquire()
Timer* save_timer; Timer* save_timer;
TimerCallback<ColorSingleAnalysis> save_callback(*this, &ColorSingleAnalysis::save_cb); TimerCallback<ColorSingleAnalysis> save_callback(*this, &ColorSingleAnalysis::save_cb);
_run_cnt++; _run_cnt++;
_frame_cnt = 0; _save_cnt = 0; _anim_cnt = 0, _synth_save_cnt = 0; _frame_cnt = 0; _save_cnt = 0; _anim_cnt = 0, _synth_save_cnt = 0;
_RUN_DONE = false; _RUN_DONE = false;
@@ -124,7 +124,6 @@ void ColorSingleAnalysis::acquire()
save_timer->stop(); save_timer->stop();
// } // }
} }
@@ -135,13 +134,105 @@ void ColorSingleAnalysis::synthesise()
if(_state == STATE_STOP) return; if(_state == STATE_STOP) return;
for(float i=1;i<_saved_filenames_analysis.size()-1;i++){ for(float i=1;i<_saved_filenames_analysis.size()-1;i++){
//cout << "ColorSingleAnalysis::synthesis FOR LOOP...\n"; //cout << "ColorSingleAnalysis::synthesis FOR LOOP...\n";
//cout << "_saved_filenames_analysis[i]" << _saved_filenames_analysis[i] << endl; //cout << "_saved_filenames_analysis[i]" << _saved_filenames_analysis[i] << endl;
if(_state == STATE_STOP) return; if(_state == STATE_STOP) return;
image1.loadImage("Mar_02_19_00_47_2/194_9.72_1.jpg");
image1.resize(image1.width/20, image1.height/20);
int width = image1.width;
int height = image1.height;
// get the pixels from the image
imagePixels = image1.getPixels();
// ------------------- create the vector field ------------------------------------
vectorCount = width * height;
// create a 2d vector field
vectorField = new ofVec2f[vectorCount];
// set all values in vector field to 0.0
for(int i=0; i<vectorCount; i++){
vectorField[i].x = 0.0;
vectorField[i].y = 0.0;
}
// ------------------- calculate the vectors ------------------------------------
// loop through all of the pixels
for(int x=1; x< width-1; x++){
for(int y=1; y< height-1; y++){
char areaPixels[9];
// loop through the area pixels
for(int i=-1; i<=1; i++){
for(int j=-1; j<=1; j++){
// determine where to read from in the area (not optimized)
int readPos = ((y + j) * width + (x + i)) * 3;
unsigned char R = imagePixels[readPos];
unsigned char G = imagePixels[readPos+1];
unsigned char B = imagePixels[readPos+2];
unsigned char BR = (0.299 * R) + (.587 * G) + (.114 * B);
int writePos = (j+1) * 3 + (i + 1);
areaPixels[writePos] = BR;
}
}
float dX = (areaPixels[0] + areaPixels[3] + areaPixels[6])/3 - (areaPixels[2] + areaPixels[5] + areaPixels[8])/3;
float dY = (areaPixels[0] + areaPixels[1] + areaPixels[2])/3 - (areaPixels[6] + areaPixels[7] + areaPixels[8])/3;
int vectorPos = y * width + x;
//printf("dx %f\n", dX);
vectorField[vectorPos].x = dX;
vectorField[vectorPos].y = dY;
//vectorField[vectorPos].x = -dY;
//vectorField[vectorPos].y = dX;
}
}
// ------------------- normalize the vectors ------------------------------------
// variables for the maximum magnitude (absolute) in x and y
float maxMagX = 1.0;
float maxMagY = 1.0;
// loop through the vector field to find the maximum x and y values
for(int i=0; i< vectorCount; i++){
if(fabs(vectorField[i].x) > maxMagX) maxMagX = fabs(vectorField[i].x);
if(fabs(vectorField[i].y) > maxMagY) maxMagY = fabs(vectorField[i].y);
}
// loop through the vector field to normalize the values
for(int i=0; i< vectorCount; i++){
vectorField[i].x /= maxMagX;
vectorField[i].y /= maxMagY;
}
// COMMENTING OUT THE FILLER SYNTH ALGORITHM
/*
if(!image1.loadImage(_saved_filenames_analysis[i])){ if(!image1.loadImage(_saved_filenames_analysis[i])){
//couldn't load image //couldn't load image
cout << "didn't load image" << endl; cout << "didn't load image" << endl;
@@ -180,7 +271,7 @@ void ColorSingleAnalysis::synthesise()
//ofImage image; //ofImage image;
//image.allocate(cvColorImage1.width, cvColorImage1.height, OF_IMAGE_COLOR); //image.allocate(cvColorImage1.width, cvColorImage1.height, OF_IMAGE_COLOR);
//*** This needs to be here for OSX of we get a BAD ACCESS ERROR. DOES IT BREAK WINDOWS? ***// // This needs to be here for OSX of we get a BAD ACCESS ERROR. DOES IT BREAK WINDOWS?
//image.setUseTexture(false); //image.setUseTexture(false);
//image.setFromPixels(cvColorImage1.getPixels(), cvColorImage1.width, cvColorImage1.height,OF_IMAGE_COLOR); //image.setFromPixels(cvColorImage1.getPixels(), cvColorImage1.width, cvColorImage1.height,OF_IMAGE_COLOR);
@@ -192,9 +283,12 @@ void ColorSingleAnalysis::synthesise()
saveImageSynthesis(file_name, &cvColorImage1, OF_IMAGE_COLOR); saveImageSynthesis(file_name, &cvColorImage1, OF_IMAGE_COLOR);
_synth_save_cnt++; _synth_save_cnt++;
// } // }
}
}
*/
} }
// _saved_filenames_synthesis has processed all the files in the analysis images folder // _saved_filenames_synthesis has processed all the files in the analysis images folder
@@ -203,8 +297,23 @@ void ColorSingleAnalysis::synthesise()
} }
//
void ColorSingleAnalysis::displayresults() void ColorSingleAnalysis::displayresults()
{ {
if(_state == STATE_STOP) return;
_show_image = true;
_image_shown = false;
//cout << "_saved_filenames_analysis[i] - " << _saved_filenames_synthesis[i] << endl;
while(!_image_shown){
Thread::sleep(2);
//cout << "!_image_shown" << endl;
}
/*
for(float i=1;i<_saved_filenames_synthesis.size();i++){ for(float i=1;i<_saved_filenames_synthesis.size();i++){
if(_state == STATE_STOP) return; if(_state == STATE_STOP) return;
@@ -228,6 +337,7 @@ void ColorSingleAnalysis::displayresults()
_image_shown = false; _image_shown = false;
} }
} }
*/
} }
@@ -238,8 +348,6 @@ void ColorSingleAnalysis::draw()
switch (_state) { switch (_state) {
case STATE_ACQUIRING: case STATE_ACQUIRING:
{ {
if (_frame_cnt < _frame_cnt_max) if (_frame_cnt < _frame_cnt_max)
{ {
@@ -385,8 +493,48 @@ void ColorSingleAnalysis::draw()
case STATE_DISPLAY_RESULTS: case STATE_DISPLAY_RESULTS:
{ {
//cout << "STATE_DISPLAY_RESULTS...\n" << endl; cout << "case STATE_DISPLAY_RESULTS = true" << endl;
int width = image1.width;
int height = image1.height;
float spacing = 10;
if (_frame_cnt > 2000)
{
_image_shown = true;
_frame_cnt=0;
}
_frame_cnt++;
if (_show_image)
{
cout << "_show_image = true" << endl;
for(int x=0; x<width; x++){
float xPos = (float) x * spacing + 5;
for(int y=0; y<height; y++){
float yPos = (float)y * spacing + 5;
glPushMatrix();
ofLine(xPos, yPos, xPos+(vectorField[y*width+x].x*spacing), yPos+(vectorField[y*width+x].y*spacing));
glPopMatrix();
}
}
//this is where we save the full-frame software output to file... after the vectors, etc. are rendered...
//saveImageSynthesis(file_name, &cvColorImage1, OF_IMAGE_COLOR);
}
_RUN_DONE = true;
break;
/*
//cout << "STATE_DISPLAY_RESULTS...\n" << endl;
if (_frame_cnt > 2) if (_frame_cnt > 2)
{ {
@@ -402,9 +550,9 @@ void ColorSingleAnalysis::draw()
ofEnableAlphaBlending(); ofEnableAlphaBlending();
ofSetColor(255, 255, 255); ofSetColor(255, 255, 255);
image2.setFromPixels(image3.getPixels(),image3.width,image3.height, OF_IMAGE_COLOR); image2.setFromPixels(image3.getPixels(),image3.width,image3.height, OF_IMAGE_COLOR);
image2.draw(0,0, ofGetWidth(), ofGetHeight()); image2.draw(0,0, ofGetWidth(), ofGetHeight());
ofDisableAlphaBlending(); ofDisableAlphaBlending();
} }
@@ -412,12 +560,11 @@ void ColorSingleAnalysis::draw()
// display results of the synthesis // display results of the synthesis
_RUN_DONE = true; _RUN_DONE = true;
break; break;
*/
}
}
default: default:
break; break;
} }
} }
+4 -1
View File
@@ -65,5 +65,8 @@ protected:
//this is the temporary container to allow us to convert and save out greyscale images //this is the temporary container to allow us to convert and save out greyscale images
ofxCvColorImage cvConvertorImage; ofxCvColorImage cvConvertorImage;
unsigned char * imagePixels;
int vectorCount;
ofVec2f * vectorField;
}; };
+4
View File
@@ -184,7 +184,11 @@ void IResponseAnalysis::synthesise()
cvConvertorImage.setFromGrayscalePlanarImages(cvGrayDiff1,cvGrayDiff1,cvGrayDiff1); cvConvertorImage.setFromGrayscalePlanarImages(cvGrayDiff1,cvGrayDiff1,cvGrayDiff1);
saveImageSynthesis(file_name, &cvConvertorImage, OF_IMAGE_GRAYSCALE); saveImageSynthesis(file_name, &cvConvertorImage, OF_IMAGE_GRAYSCALE);
_synth_save_cnt++; _synth_save_cnt++;
} }
} }
} }
+50 -40
View File
@@ -12,7 +12,7 @@ using Poco::Thread;
#define NUMBER_RUNS 1 #define NUMBER_RUNS 1
#define ACQUIRE_TIME 20 #define ACQUIRE_TIME 20
#define TRESHOLD 80 #define THRESHOLD 80
#define MAXBLOBS 15 #define MAXBLOBS 15
void RelaxRateAnalysis::setup(int camWidth, int camHeight) void RelaxRateAnalysis::setup(int camWidth, int camHeight)
@@ -25,8 +25,8 @@ void RelaxRateAnalysis::setup(int camWidth, int camHeight)
acq_run_time = RefractiveIndex::XML.getValue("config:analysis_time:acquiretime_relaxrate", ACQUIRE_TIME); acq_run_time = RefractiveIndex::XML.getValue("config:analysis_time:acquiretime_relaxrate", ACQUIRE_TIME);
cout << "ACQUIRE_TIME RelaxRateAnalysis " << acq_run_time << endl; cout << "ACQUIRE_TIME RelaxRateAnalysis " << acq_run_time << endl;
_treshold = RefractiveIndex::XML.getValue("config:relaxrate:treshold", TRESHOLD); _threshold = RefractiveIndex::XML.getValue("config:relaxrate:threshold", THRESHOLD);
cout << "TRESHOLD RelaxRateAnalysis " << _treshold << endl; cout << "THRESHOLD RelaxRateAnalysis " << _threshold << endl;
_maxblobs = RefractiveIndex::XML.getValue("config:relaxrate:maxblobs", MAXBLOBS); _maxblobs = RefractiveIndex::XML.getValue("config:relaxrate:maxblobs", MAXBLOBS);
cout << "MAXBLOBS RelaxRateAnalysis " << _maxblobs << endl; cout << "MAXBLOBS RelaxRateAnalysis " << _maxblobs << endl;
@@ -55,49 +55,18 @@ void RelaxRateAnalysis::setup(int camWidth, int camHeight)
_image_shown = false; _image_shown = false;
image1.clear(); image1.clear();
image2.clear();
image3.clear();
image4.clear();
image5.clear();
// images use for drawing the synthesized files to the screen ///
image1.setUseTexture(false); // the non texture image that is needed to first load the image image1.setUseTexture(false); // the non texture image that is needed to first load the image
image2.setUseTexture(true); // the image that needs to get written to the screen which takes the content of image1
// images used for re-loading and saving out the synthesized files ///
image3.setUseTexture(false);
image4.setUseTexture(false);
image5.setUseTexture(false);
image1.allocate(RefractiveIndex::_vid_w,RefractiveIndex::_vid_h, OF_IMAGE_COLOR); image1.allocate(RefractiveIndex::_vid_w,RefractiveIndex::_vid_h, OF_IMAGE_COLOR);
image2.allocate(RefractiveIndex::_vid_w,RefractiveIndex::_vid_h, OF_IMAGE_COLOR);
image3.allocate(RefractiveIndex::_vid_w,RefractiveIndex::_vid_h, OF_IMAGE_COLOR);
image4.allocate(RefractiveIndex::_vid_w,RefractiveIndex::_vid_h, OF_IMAGE_COLOR);
image5.allocate(RefractiveIndex::_vid_w,RefractiveIndex::_vid_h, OF_IMAGE_COLOR);
//cout << "RefractiveIndex::_vid_w " << RefractiveIndex::_vid_w << endl;
//cout << "RefractiveIndex::_vid_h " << RefractiveIndex::_vid_h << endl;
// clear() apparently fixes the "OF_WARNING: in allocate, reallocating a ofxCvImage" // clear() apparently fixes the "OF_WARNING: in allocate, reallocating a ofxCvImage"
// that we're getting in OSX/Windows and is maybe crashing Windows // that we're getting in OSX/Windows and is maybe crashing Windows
// http://forum.openframeworks.cc/index.php?topic=1867.0 // http://forum.openframeworks.cc/index.php?topic=1867.0
cvColorImage1.clear(); cvColorImage1.clear();
cvGrayImage1.clear();
cvGrayDiff1.clear(); cvGrayDiff1.clear();
cvColorImage2.clear();
cvGrayImage2.clear();
cvGrayDiff2.clear();
cvColorImage1.allocate(RefractiveIndex::_vid_w,RefractiveIndex::_vid_h); cvColorImage1.allocate(RefractiveIndex::_vid_w,RefractiveIndex::_vid_h);
cvGrayImage1.allocate(RefractiveIndex::_vid_w,RefractiveIndex::_vid_h);
cvGrayDiff1.allocate(RefractiveIndex::_vid_w,RefractiveIndex::_vid_h); cvGrayDiff1.allocate(RefractiveIndex::_vid_w,RefractiveIndex::_vid_h);
cvColorImage2.allocate(RefractiveIndex::_vid_w,RefractiveIndex::_vid_h);
cvGrayImage2.allocate(RefractiveIndex::_vid_w,RefractiveIndex::_vid_h);
cvGrayDiff2.allocate(RefractiveIndex::_vid_w,RefractiveIndex::_vid_h);
} }
@@ -133,7 +102,8 @@ void RelaxRateAnalysis::synthesise()
//cout << "IResponseAnalysis::saving synthesis...\n"; //cout << "IResponseAnalysis::saving synthesis...\n";
if(_state == STATE_STOP) return; if(_state == STATE_STOP) return;
cvContourFinderVect.clear(); cvContourFinderVect.clear();
for(float i=1;i<_saved_filenames_analysis.size();i++){ for(float i=1;i<_saved_filenames_analysis.size();i++){
@@ -146,7 +116,7 @@ void RelaxRateAnalysis::synthesise()
cvColorImage1.setFromPixels(image1.getPixels(), image1.width, image1.height); cvColorImage1.setFromPixels(image1.getPixels(), image1.width, image1.height);
cvColorImage1.convertToGrayscalePlanarImage(cvGrayDiff1, 1); cvColorImage1.convertToGrayscalePlanarImage(cvGrayDiff1, 1);
cvGrayDiff1.threshold(_treshold); cvGrayDiff1.threshold(_threshold);
rfiCvContourFinder* cf = new rfiCvContourFinder(); rfiCvContourFinder* cf = new rfiCvContourFinder();
@@ -166,11 +136,16 @@ void RelaxRateAnalysis::synthesise()
void RelaxRateAnalysis::displayresults() void RelaxRateAnalysis::displayresults()
{ {
cvContourFinderVectDisplay.clear(); //cvContourFinderVectDisplay.clear();
clearcfindervectdisplay();
for(int i=1;i<cvContourFinderVect.size();i++){ for(int i=1;i<cvContourFinderVect.size();i++){
if(_state == STATE_STOP) return; if(_state == STATE_STOP){
clearcfindervectdisplay();
clearcfindervect();
return;
}
//cout << "_saved_filenames_analysis[i] - " << _saved_filenames_synthesis[i] << endl; //cout << "_saved_filenames_analysis[i] - " << _saved_filenames_synthesis[i] << endl;
@@ -187,6 +162,14 @@ void RelaxRateAnalysis::displayresults()
} }
clearcfindervectdisplay();
clearcfindervect();
//cvContourFinderVectDisplay.clear();
//cvContourFinderVect.clear();
} }
@@ -197,7 +180,8 @@ void RelaxRateAnalysis::draw()
switch (_state) { switch (_state) {
case STATE_ACQUIRING: case STATE_ACQUIRING:
{ {
if (_frame_cnt < _frame_cnt_max) if (_frame_cnt < _frame_cnt_max)
{ {
@@ -227,6 +211,7 @@ void RelaxRateAnalysis::draw()
case STATE_SYNTHESISING: case STATE_SYNTHESISING:
{ {
// display animation of something while the synthesis in on-going... // display animation of something while the synthesis in on-going...
//cout << "RelaxRateAnalysis = STATE_SYNTHESISING...\n"; //cout << "RelaxRateAnalysis = STATE_SYNTHESISING...\n";
@@ -356,3 +341,28 @@ void RelaxRateAnalysis::save_cb(Timer& timer)
} }
void RelaxRateAnalysis::cleanup()
{
}
void RelaxRateAnalysis::clearcfindervect()
{
for(int i = 0; i < cvContourFinderVect.size(); i++) {
rfiCvContourFinder* f = cvContourFinderVect[i];
// maybe it's erase here? http://forum.openframeworks.cc/index.php/topic,3016.0.html
// cvContourFinderVect.erase(i);
delete f;
}
cvContourFinderVect.clear();
}
void RelaxRateAnalysis::clearcfindervectdisplay()
{
cvContourFinderVectDisplay.clear();
}
+7 -20
View File
@@ -23,6 +23,7 @@ public:
void acquire(); void acquire();
void synthesise(); void synthesise();
void displayresults(); void displayresults();
void cleanup();
void draw(); void draw();
@@ -30,36 +31,22 @@ public:
protected: protected:
void clearcfindervect();
void clearcfindervectdisplay();
bool _RUN_DONE; bool _RUN_DONE;
float _flip, _level; float _flip, _level;
int _run_cnt, _save_cnt, _synth_save_cnt, _anim_cnt; int _run_cnt, _save_cnt, _synth_save_cnt, _anim_cnt;
float c, _frame_cnt, _frame_cnt_max, _anim_cnt_max; float c, _frame_cnt, _frame_cnt_max, _anim_cnt_max;
int _treshold; int _threshold;
int _maxblobs; int _maxblobs;
bool _show_image, _image_shown; bool _show_image, _image_shown;
ofImage image1;
ofImage image2;
ofImage image3;
ofImage image4;
ofImage image5;
ofImage image6;
ofxCvColorImage cvColorImage1;
ofxCvColorImage cvColorImage2;
ofxCvColorImage cvColorImage3;
ofxCvColorImage cvColorImage4;
ofxCvColorImage cvColorImage5;
ofxCvColorImage cvColorImage6;
ofImage image1;
ofxCvColorImage cvColorImage1;
ofxCvGrayscaleImage cvGrayDiff1; ofxCvGrayscaleImage cvGrayDiff1;
ofxCvGrayscaleImage cvGrayDiff2;
ofxCvGrayscaleImage cvGrayImage1;
ofxCvGrayscaleImage cvGrayImage2;
ofxCvGrayscaleImage cvGrayImage3;
ofxCvGrayscaleImage cvGrayImage4;
vector<rfiCvContourFinder*> cvContourFinderVect; vector<rfiCvContourFinder*> cvContourFinderVect;
vector<rfiCvContourFinder*> cvContourFinderVectDisplay; vector<rfiCvContourFinder*> cvContourFinderVectDisplay;
+4 -1
View File
@@ -56,7 +56,7 @@ void ShadowScapesAnalysis::setup(int camWidth, int camHeight)
image3.clear(); image3.clear();
image4.clear(); image4.clear();
image5.clear(); image5.clear();
// images use for drawing the synthesized files to the screen /// // images use for drawing the synthesized files to the screen ///
image1.setUseTexture(false); // the non texture image that is needed to first load the image image1.setUseTexture(false); // the non texture image that is needed to first load the image
image2.setUseTexture(true); // the image that needs to get written to the screen which takes the content of image1 image2.setUseTexture(true); // the image that needs to get written to the screen which takes the content of image1
@@ -439,6 +439,9 @@ void ShadowScapesAnalysis::draw()
// display results of the synthesis // display results of the synthesis
_RUN_DONE = true; _RUN_DONE = true;
// clear allocated memory...?
break; break;
} }