mirror of
https://github.com/OpenSpace/OpenSpace.git
synced 2026-05-20 19:39:17 -05:00
Auto filter and normalize values bug fix
This commit is contained in:
@@ -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");
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
@@ -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);
|
||||
|
||||
@@ -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()}}));
|
||||
|
||||
@@ -43,7 +43,7 @@ protected:
|
||||
void registerProperties();
|
||||
void createDataProcessor();
|
||||
|
||||
properties::BoolProperty _useLog;
|
||||
// properties::BoolProperty _useLog;
|
||||
properties::BoolProperty _useHistogram;
|
||||
properties::BoolProperty _autoFilter;
|
||||
properties::Vec2Property _normValues;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user