diff --git a/normalize.cpp b/normalize.cpp index af6cc1daf5b77e4a9353aa571c648f741d404b17..7d7c3e86f01b938a19878f936768163ad0d87d45 100644 --- a/normalize.cpp +++ b/normalize.cpp @@ -11,7 +11,7 @@ void eis::eraseSingularites(std::vector<eis::DataPoint>& data) { for(size_t i = 0; i < data.size(); ++i) { - if(std::isnan(data[i].im.real()) || std::isnan(data[i].im.imag())) + if(std::isnan(data[i].im.real()) || std::isnan(data[i].im.imag()) || std::isinf(data[i].im.real()) || std::isinf(data[i].im.imag()) ) { size_t left = i-1; size_t right = i+1; @@ -30,16 +30,22 @@ void eis::eraseSingularites(std::vector<eis::DataPoint>& data) void eis::normalize(std::vector<eis::DataPoint>& data) { - fvalue max = std::numeric_limits<fvalue>::min(); + fvalue maxRe = 0; + fvalue maxIm = 0; for(const DataPoint& dataPoint : data) { - fvalue norm = std::abs(dataPoint.im); - if(norm > max) - max = norm; + maxRe = fabs(dataPoint.im.real()) > maxRe ? fabs(dataPoint.im.real()) : maxRe; + maxIm = fabs(dataPoint.im.imag()) > maxIm ? fabs(dataPoint.im.imag()) : maxIm; } + maxRe = maxRe == 0 ? 1 : maxRe; + maxIm = maxIm == 0 ? 1 : maxIm; + for(DataPoint& dataPoint : data) - dataPoint.im = dataPoint.im / max; + { + dataPoint.im.real(dataPoint.im.real() / maxRe); + dataPoint.im.imag(dataPoint.im.imag() / maxIm); + } } std::vector<eis::DataPoint> eis::reduceRegion(const std::vector<eis::DataPoint>& inData, fvalue gradThreshFactor) @@ -48,7 +54,7 @@ std::vector<eis::DataPoint> eis::reduceRegion(const std::vector<eis::DataPoint>& return inData; std::vector<eis::DataPoint> data = inData; - eis::eraseSingularites(data); + //eis::eraseSingularites(data); eis::normalize(data); std::vector<fvalue> grads;