// SPDX-FileCopyrightText: 2025 Filip Leonarski, Paul Scherrer Institute // SPDX-License-Identifier: GPL-3.0-only #pragma once #include #include #include "ImageSpotFinder.h" #include "SpotFindingSettings.h" #include "../../common/AzimuthalIntegrationMapping.h" #include "../../common/DiffractionSpot.h" // This is "slow" spot finder for image-based analysis // To complement "fast" PSI detector module based spot finder // This one is expected to be used in cases, where images are already assembled // and it aims for 100 ms execution class ImageSpotFinderCPU : public ImageSpotFinder { // Output of the first pass, and the exclusion mask for the second. std::vector first_pass_buffer; // One detection pass. prev_strong is the previous pass's bitmap, or nullptr for the first pass; // a pixel set in it is treated as INT32_MAX, i.e. kept out of every local background it would // fall into, and reported strong. void DetectPass(const ImagePreprocessorBuffer &image, const SpotFindingSettings &settings, const uint32_t *prev_strong, std::vector &out); public: ImageSpotFinderCPU(int32_t width, int32_t height); void Detect(const ImagePreprocessorBuffer &image, const SpotFindingSettings &settings) override; };