Auto filter and normalize values bug fix

This commit is contained in:
Sebastian Piwell
2016-06-23 09:55:18 -04:00
parent ffe82f922a
commit efb141c66c
8 changed files with 47 additions and 45 deletions
+14 -12
View File
@@ -41,18 +41,18 @@ DataCygnet::DataCygnet(const ghoul::Dictionary& dictionary)
:IswaCygnet(dictionary)
,_dataProcessor(nullptr)
,_dataOptions("dataOptions", "Data Options")
,_useLog("useLog","Use Logarithm", false)
// ,_useLog("useLog","Use Logarithm", false)
,_useHistogram("useHistogram", "Auto Contrast", false)
,_autoFilter("autoFilter", "Auto Filter", true)
,_normValues("normValues", "Normalize Values", glm::vec2(1.0,1.0), glm::vec2(0), glm::vec2(5.0))
,_backgroundValues("backgroundValues", "Background Values", glm::vec2(0.0), glm::vec2(0), glm::vec2(1.0))
,_transferFunctionsFile("transferfunctions", "Transfer Functions", "${SCENE}/iswa/tfs/default.tf")
//FOR TESTING
,_numOfBenchmarks(0)
,_avgBenchmarkTime(0.0f)
// ,_numOfBenchmarks(0)
// ,_avgBenchmarkTime(0.0f)
{
addProperty(_dataOptions);
addProperty(_useLog);
// addProperty(_useLog);
addProperty(_useHistogram);
addProperty(_autoFilter);
addProperty(_normValues);
@@ -241,10 +241,10 @@ void DataCygnet::setPropertyCallbacks(){
updateTexture();
});
_useLog.onChange([this](){
_dataProcessor->useLog(_useLog.value());
updateTexture();
});
// _useLog.onChange([this](){
// _dataProcessor->useLog(_useLog.value());
// updateTexture();
// });
_useHistogram.onChange([this](){
_dataProcessor->useHistogram(_useHistogram.value());
@@ -266,6 +266,8 @@ void DataCygnet::setPropertyCallbacks(){
_autoFilter.onChange([this](){
if(_autoFilter.value())
_backgroundValues.setValue(_dataProcessor->filterValues());
else
_backgroundValues.setValue(glm::vec2(0.f));
updateTexture();
});
}
@@ -305,10 +307,10 @@ void DataCygnet::subscribeToGroup(){
_transferFunctionsFile.setValue(dict.value<std::string>("transferFunctions"));
});
groupEvent->subscribe(name(), "useLogChanged", [&](const ghoul::Dictionary& dict){
LDEBUG(name() + " Event useLogChanged");
_useLog.setValue(dict.value<bool>("useLog"));
});
// groupEvent->subscribe(name(), "useLogChanged", [&](const ghoul::Dictionary& dict){
// LDEBUG(name() + " Event useLogChanged");
// _useLog.setValue(dict.value<bool>("useLog"));
// });
groupEvent->subscribe(name(), "useHistogramChanged", [&](ghoul::Dictionary dict){
LDEBUG(name() + " Event useHistogramChanged");
+3 -3
View File
@@ -103,7 +103,7 @@ protected:
properties::StringProperty _transferFunctionsFile;
properties::Vec2Property _backgroundValues;
properties::Vec2Property _normValues;
properties::BoolProperty _useLog;
// properties::BoolProperty _useLog;
properties::BoolProperty _useHistogram;
properties::BoolProperty _autoFilter;
@@ -112,8 +112,8 @@ protected:
glm::size3_t _textureDimensions;
//FOR TESTING
int _numOfBenchmarks;
double _avgBenchmarkTime;
// int _numOfBenchmarks;
// double _avgBenchmarkTime;
private:
bool readyToRender() const override;
+17 -17
View File
@@ -50,7 +50,7 @@ bool DataPlane::initialize(){
_dataProcessor = _group->dataProcessor();
subscribeToGroup();
}else{
OsEng.gui()._iswa.registerProperty(&_useLog);
// OsEng.gui()._iswa.registerProperty(&_useLog);
OsEng.gui()._iswa.registerProperty(&_useHistogram);
OsEng.gui()._iswa.registerProperty(&_autoFilter);
OsEng.gui()._iswa.registerProperty(&_normValues);
@@ -158,25 +158,25 @@ std::vector<float*> DataPlane::textureData(){
}
// _textureDimensions = _dataProcessor->dimensions();
// FOR TESTING
// ===========
std::chrono::time_point<std::chrono::system_clock> start, end;
start = std::chrono::system_clock::now();
// ===========
std::vector<float*> d = _dataProcessor->processData(_dataBuffer, _dataOptions, _textureDimensions);
// // FOR TESTING
// // ===========
// std::chrono::time_point<std::chrono::system_clock> start, end;
// start = std::chrono::system_clock::now();
// // ===========
// std::vector<float*> d = _dataProcessor->processData(_dataBuffer, _dataOptions, _textureDimensions);
// FOR TESTING
// ===========
end = std::chrono::system_clock::now();
_numOfBenchmarks++;
std::chrono::duration<double> elapsed_seconds = end-start;
_avgBenchmarkTime = ( (_avgBenchmarkTime * (_numOfBenchmarks-1)) + elapsed_seconds.count() ) / _numOfBenchmarks;
std::cout << " processData() " << name() << std::endl;
std::cout << "avg elapsed time: " << _avgBenchmarkTime << "s\n";
std::cout << "num Benchmarks: " << _numOfBenchmarks << "\n";
// // FOR TESTING
// // ===========
// end = std::chrono::system_clock::now();
// _numOfBenchmarks++;
// std::chrono::duration<double> elapsed_seconds = end-start;
// _avgBenchmarkTime = ( (_avgBenchmarkTime * (_numOfBenchmarks-1)) + elapsed_seconds.count() ) / _numOfBenchmarks;
// std::cout << " processData() " << name() << std::endl;
// std::cout << "avg elapsed time: " << _avgBenchmarkTime << "s\n";
// std::cout << "num Benchmarks: " << _numOfBenchmarks << "\n";
// ===========
return d;
return _dataProcessor->processData(_dataBuffer, _dataOptions, _textureDimensions);
}
}// namespace openspace
+1 -1
View File
@@ -69,7 +69,7 @@ bool DataSphere::initialize(){
subscribeToGroup();
//getGroupPropertyValues();
}else{
OsEng.gui()._iswa.registerProperty(&_useLog);
// OsEng.gui()._iswa.registerProperty(&_useLog);
OsEng.gui()._iswa.registerProperty(&_useHistogram);
OsEng.gui()._iswa.registerProperty(&_autoFilter);
OsEng.gui()._iswa.registerProperty(&_normValues);
+8 -8
View File
@@ -41,8 +41,7 @@ namespace {
namespace openspace{
IswaDataGroup::IswaDataGroup(std::string name, std::string type)
:IswaBaseGroup(name, type)
,_useLog("useLog","Use Logarithm", false)
// ,_useLog("useLog","Use Logarithm", false)
,_useHistogram("useHistogram", "Auto Contrast", false)
,_autoFilter("autoFilter", "Auto Filter", true)
,_normValues("normValues", "Normalize Values", glm::vec2(1.0,1.0), glm::vec2(0), glm::vec2(5.0))
@@ -50,7 +49,7 @@ IswaDataGroup::IswaDataGroup(std::string name, std::string type)
,_transferFunctionsFile("transferfunctions", "Transfer Functions", "${SCENE}/iswa/tfs/default.tf")
,_dataOptions("dataOptions", "Data Options")
{
addProperty(_useLog);
// addProperty(_useLog);
addProperty(_useHistogram);
addProperty(_autoFilter);
addProperty(_normValues);
@@ -65,7 +64,7 @@ IswaDataGroup::IswaDataGroup(std::string name, std::string type)
IswaDataGroup::~IswaDataGroup(){}
void IswaDataGroup::registerProperties(){
OsEng.gui()._iswa.registerProperty(&_useLog);
// OsEng.gui()._iswa.registerProperty(&_useLog);
OsEng.gui()._iswa.registerProperty(&_useHistogram);
OsEng.gui()._iswa.registerProperty(&_autoFilter);
OsEng.gui()._iswa.registerProperty(&_normValues);
@@ -75,10 +74,10 @@ void IswaDataGroup::registerProperties(){
OsEng.gui()._iswa.registerProperty(&_backgroundValues);
_useLog.onChange([this]{
LDEBUG("Group " + name() + " published useLogChanged");
_groupEvent->publish("useLogChanged", ghoul::Dictionary({{"useLog", _useLog.value()}}));
});
// _useLog.onChange([this]{
// LDEBUG("Group " + name() + " published useLogChanged");
// _groupEvent->publish("useLogChanged", ghoul::Dictionary({{"useLog", _useLog.value()}}));
// });
_useHistogram.onChange([this]{
LDEBUG("Group " + name() + " published useHistogramChanged");
@@ -95,6 +94,7 @@ void IswaDataGroup::registerProperties(){
OsEng.gui()._iswa.unregisterProperty(&_backgroundValues);
// else if autofilter is turned off, register backgroundValues
} else {
_backgroundValues.setValue(glm::vec2(0.f));
OsEng.gui()._iswa.registerProperty(&_backgroundValues, &_autoFilter);
}
_groupEvent->publish("autoFilterChanged", ghoul::Dictionary({{"autoFilter", _autoFilter.value()}}));
+1 -1
View File
@@ -43,7 +43,7 @@ protected:
void registerProperties();
void createDataProcessor();
properties::BoolProperty _useLog;
// properties::BoolProperty _useLog;
properties::BoolProperty _useHistogram;
properties::BoolProperty _autoFilter;
properties::Vec2Property _normValues;
+1 -1
View File
@@ -105,7 +105,7 @@ bool KameleonPlane::initialize(){
_dataProcessor = _group->dataProcessor();
subscribeToGroup();
}else{
OsEng.gui()._iswa.registerProperty(&_useLog);
// OsEng.gui()._iswa.registerProperty(&_useLog);
OsEng.gui()._iswa.registerProperty(&_useHistogram);
OsEng.gui()._iswa.registerProperty(&_autoFilter);
OsEng.gui()._iswa.registerProperty(&_normValues);
+2 -2
View File
@@ -85,7 +85,7 @@ float DataProcessor::processDataPoint(float value, int option){
v = histogram->equalize(normalizeWithStandardScore(value, mean, sd, glm::vec2(_fitValues[option])))/(float)NumBins;
// v = histogram->equalize(value)/(float)512;
}else{
v = normalizeWithStandardScore(value, mean, sd, glm::vec2(_fitValues[option]));
v = normalizeWithStandardScore(value, mean, sd, _normValues);
}
return v;
}
@@ -141,7 +141,7 @@ void DataProcessor::calculateFilterValues(std::vector<int> selectedOptions){
filterMid = histogram->highestBinValue(_useHistogram);
filterWidth = histogram->binWidth();
//atleast one pixel value width. 1/512 above mid and 1/512 below mid => 1/256 filtered
//at least one pixel value width. 1/512 above mid and 1/512 below mid => 1/256 filtered
filterWidth = std::max(filterWidth, 1.0f/512.0f);
}else{
Histogram hist = _histograms[option]->equalize();