comparison layer/Colour3DPlotLayer.cpp @ 719:67e6d518ac27

Bodge in Matthias's suggested normalise-to-log as an option in spectrogram and colour 3d plot layers (not wired into gui)
author Chris Cannam
date Tue, 28 Jan 2014 17:37:42 +0000
parents 1a0dfcbffaf1
children c27a3604fe6f
comparison
equal deleted inserted replaced
704:b81f21f2c4c3 719:67e6d518ac27
49 m_colourMap(0), 49 m_colourMap(0),
50 m_gain(1.0), 50 m_gain(1.0),
51 m_binScale(LinearBinScale), 51 m_binScale(LinearBinScale),
52 m_normalizeColumns(false), 52 m_normalizeColumns(false),
53 m_normalizeVisibleArea(false), 53 m_normalizeVisibleArea(false),
54 m_normalizeHybrid(false),
54 m_invertVertical(false), 55 m_invertVertical(false),
55 m_opaque(false), 56 m_opaque(false),
56 m_smooth(false), 57 m_smooth(false),
57 m_miny(0), 58 m_miny(0),
58 m_maxy(0) 59 m_maxy(0)
428 { 429 {
429 return m_normalizeColumns; 430 return m_normalizeColumns;
430 } 431 }
431 432
432 void 433 void
434 Colour3DPlotLayer::setNormalizeHybrid(bool n)
435 {
436 if (m_normalizeHybrid == n) return;
437 m_normalizeHybrid = n;
438 cacheInvalid();
439 emit layerParametersChanged();
440 }
441
442 bool
443 Colour3DPlotLayer::getNormalizeHybrid() const
444 {
445 return m_normalizeHybrid;
446 }
447
448 void
433 Colour3DPlotLayer::setNormalizeVisibleArea(bool n) 449 Colour3DPlotLayer::setNormalizeVisibleArea(bool n)
434 { 450 {
435 if (m_normalizeVisibleArea == n) return; 451 if (m_normalizeVisibleArea == n) return;
436 m_normalizeVisibleArea = n; 452 m_normalizeVisibleArea = n;
437 cacheInvalid(); 453 cacheInvalid();
880 DenseThreeDimensionalModel::Column 896 DenseThreeDimensionalModel::Column
881 Colour3DPlotLayer::getColumn(size_t col) const 897 Colour3DPlotLayer::getColumn(size_t col) const
882 { 898 {
883 DenseThreeDimensionalModel::Column values = m_model->getColumn(col); 899 DenseThreeDimensionalModel::Column values = m_model->getColumn(col);
884 while (values.size() < m_model->getHeight()) values.push_back(0.f); 900 while (values.size() < m_model->getHeight()) values.push_back(0.f);
885 if (!m_normalizeColumns) return values; 901 if (!m_normalizeColumns && !m_normalizeHybrid) return values;
886 902
887 float colMax = 0.f, colMin = 0.f; 903 float colMax = 0.f, colMin = 0.f;
888 float min = 0.f, max = 0.f; 904 float min = 0.f, max = 0.f;
889 905
890 min = m_model->getMinimumLevel(); 906 min = m_model->getMinimumLevel();
901 float value = values.at(y); 917 float value = values.at(y);
902 float norm = (value - colMin) / (colMax - colMin); 918 float norm = (value - colMin) / (colMax - colMin);
903 float newvalue = min + (max - min) * norm; 919 float newvalue = min + (max - min) * norm;
904 920
905 if (value != newvalue) values[y] = newvalue; 921 if (value != newvalue) values[y] = newvalue;
922 }
923
924 if (m_normalizeHybrid && (colMax > 0.0)) {
925 float logmax = log10(colMax);
926 for (size_t y = 0; y < values.size(); ++y) {
927 values[y] *= logmax;
928 }
906 } 929 }
907 930
908 return values; 931 return values;
909 } 932 }
910 933