MayaFlux 0.1.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 232 of file MatrixHelper.hpp.

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

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

+ Here is the call graph for this function: