1 /* 2 SPDX-FileCopyrightText: 2004 Jasem Mutlaq 3 SPDX-FileCopyrightText: 2020 Eric Dejouhanet <eric.dejouhanet@gmail.com> 4 5 SPDX-License-Identifier: GPL-2.0-or-later 6 7 Some code fragments were adapted from Peter Kirchgessner's FITS plugin 8 SPDX-FileCopyrightText: Peter Kirchgessner <http://members.aol.com/pkirchg> 9 */ 10 11 #ifndef FITSGRADIENTDETECTOR_H 12 #define FITSGRADIENTDETECTOR_H 13 14 #include "fitsstardetector.h" 15 16 class FITSGradientDetector: public FITSStarDetector 17 { 18 Q_OBJECT 19 20 public: FITSGradientDetector(FITSData * data)21 explicit FITSGradientDetector(FITSData * data): FITSStarDetector(data) {}; 22 23 public: 24 /** @brief Find sources in the parent FITS data file. 25 * @see FITSStarDetector::findSources(). 26 */ 27 QFuture<bool> findSources(QRect const &boundary = QRect()) override; 28 29 protected: 30 /** @internal Find sources in the parent FITS data file, dependent of the pixel depth. 31 * @see FITSGradientDetector::findSources. 32 */ 33 template <typename T> 34 bool findSources(const QRect &boundary); 35 36 /** @internal Implementation of the Canny Edge detection (CannyEdgeDetector). 37 * @copyright 2015 Gonzalo Exequiel Pedone (https://github.com/hipersayanX/CannyDetector). 38 * @param data is the FITS data to run the detection onto. 39 * @param gradient is the vector storing the amount of change in pixel sequences. 40 * @param direction is the vector storing the four directions (horizontal, vertical and two diagonals) the changes stored in 'gradient' are detected in. 41 */ 42 template <typename T> 43 void sobel(FITSData const * data, QVector<float> &gradient, QVector<float> &direction) const; 44 45 /** @internal Identify gradient connections. 46 * @param width, height are the dimensions of the frame to work on. 47 * @param gradient is the vector holding the amount of change in pixel sequences. 48 * @param ids is the vector storing which gradient was identified for each pixel. 49 */ 50 int partition(int width, int height, QVector<float> &gradient, QVector<int> &ids) const; 51 52 /** @internal Trace gradient neighbors. 53 * @param width, height are the dimensions of the frame to work on. 54 * @param image is the image to work on, actually gradients extracted using the sobel algorithm. 55 * @param ids is the vector storing which gradient was identified for each pixel. 56 * @param x, y locate the pixel to trace from. 57 */ 58 void trace(int width, int height, int id, QVector<float> &image, QVector<int> &ids, int x, int y) const; 59 }; 60 61 #endif // FITSGRADIENTDETECTOR_H 62