MayaFlux 0.3.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches

◆ extract_above_mean()

std::vector< std::vector< double > > MayaFlux::Yantra::extract_above_mean ( const std::vector< std::span< const double > > &  channels,
double  mean_multiplier,
uint32_t  window_size,
uint32_t  hop_size 
)

Definition at line 144 of file ExtractionHelper.cpp.

149{
150 std::vector<std::vector<double>> result;
151 result.reserve(channels.size());
152 for (const auto& ch : channels) {
153 if (ch.empty()) {
154 result.emplace_back();
155 continue;
156 }
157 const uint32_t w = std::min(window_size, static_cast<uint32_t>(ch.size()));
158 const uint32_t h = std::max(1U, std::min(hop_size, w / 2));
159 const auto means = D::mean(ch, D::num_windows(ch.size(), w, h), h, w);
160 double gm = 0.0;
161
162 for (double v : means)
163 gm += v;
164
165 if (!means.empty())
166 gm /= static_cast<double>(means.size());
167
168 const double thr = gm * mean_multiplier;
169
170 std::vector<size_t> starts;
171 for (size_t i = 0; i < means.size(); ++i) {
172 if (means[i] > thr)
173 starts.push_back(i * h);
174 }
175
176 result.push_back(D::slice_intervals(ch,
177 D::merge_intervals(D::intervals_from_window_starts(starts, w, ch.size()))));
178 }
179 return result;
180}

References MayaFlux::Kinesis::Discrete::intervals_from_window_starts(), MayaFlux::Kinesis::Discrete::mean(), MayaFlux::Kinesis::Discrete::merge_intervals(), MayaFlux::Kinesis::Discrete::num_windows(), and MayaFlux::Kinesis::Discrete::slice_intervals().

Referenced by MayaFlux::Yantra::FeatureExtractor< InputType, OutputType >::extract_implementation().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: