// SPDX-FileCopyrightText: 2024 Filip Leonarski, Paul Scherrer Institute // SPDX-License-Identifier: GPL-3.0-only #ifndef JFJOCH_IMAGEANALYSISCPU_H #define JFJOCH_IMAGEANALYSISCPU_H #include "../frame_serialize/JFJochMessages.h" #include "../common/DiffractionExperiment.h" #include "../common/AzimuthalIntegration.h" #include "ImageSpotFinder.h" #include "IndexerWrapper.h" #include "../common/PixelMask.h" #include "../common/AzimuthalIntegrationProfile.h" #include "NeuralNetInferenceClient.h" class ImageAnalysisCPU { constexpr static const int64_t max_spot_count = 250; const DiffractionExperiment &experiment; const AzimuthalIntegration &integration; std::vector roi_map; std::map roi_names; size_t roi_count; size_t npixels; size_t xpixels; std::vector mask_1byte; NeuralNetInferenceClient *inference_client = nullptr; ImageSpotFinder spotFinder; std::unique_ptr indexer; const int64_t saturation_limit; int nquads = 2; template void Analyze(DataMessage &output, const uint8_t *image, T err_pixel_val, T sat_pixel_val, AzimuthalIntegrationProfile &profile, const SpotFindingSettings &spot_finding_settings); public: ImageAnalysisCPU(const DiffractionExperiment& experiment, const AzimuthalIntegration& integration, const std::vector &mask); void UpdateROI(); ImageAnalysisCPU& NeuralNetInference(NeuralNetInferenceClient *client); void Analyze(DataMessage &output, std::vector &buffer, AzimuthalIntegrationProfile &profile, const SpotFindingSettings &spot_finding_settings); }; #endif //JFJOCH_IMAGEANALYSISCPU_H