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

◆ transform_outliers() [1/2]

template<OperationReadyData DataType, typename TransformFunc >
requires std::invocable<TransformFunc, double>
DataType MayaFlux::Yantra::transform_outliers ( DataType &  input,
double  std_dev_threshold,
TransformFunc  transform_func 
)

Statistical outlier transformation using existing StatisticalAnalyzer (IN-PLACE)

Template Parameters
DataTypeOperationReadyData type
TransformFuncFunction type for transformation
Parameters
inputInput data - WILL BE MODIFIED
std_dev_thresholdStandard deviation threshold for outliers
transform_funcTransformation function
Returns
Transformed data

Definition at line 234 of file MatrixHelper.hpp.

237{
238 auto [target_data, structure_info] = OperationHelper::extract_structured_double(input);
239
240 auto stat_analyzer = std::make_shared<StandardStatisticalAnalyzer>();
241 auto stats = stat_analyzer->analyze_statistics(input);
242
243 if (stats.channel_statistics.empty()) {
244 throw std::runtime_error("No channel statistics available for outlier detection");
245 }
246 const auto& first_channel_stats = stats.channel_statistics[0];
247 double threshold_low = first_channel_stats.mean_stat - std_dev_threshold * first_channel_stats.stat_std_dev;
248 double threshold_high = first_channel_stats.mean_stat + std_dev_threshold * first_channel_stats.stat_std_dev;
249
250 for (auto& channel_span : target_data) {
251 std::ranges::transform(channel_span, channel_span.begin(),
252 [&](double x) {
253 return (x < threshold_low || x > threshold_high) ? transform_func(x) : x;
254 });
255 }
256
257 auto reconstructed_data = target_data
258 | std::views::transform([](const auto& span) {
259 return std::vector<double>(span.begin(), span.end());
260 })
261 | std::ranges::to<std::vector>();
262
263 return OperationHelper::reconstruct_from_double<DataType>(reconstructed_data, structure_info);
264}

References MayaFlux::Yantra::OperationHelper::extract_structured_double().

+ Here is the call graph for this function: