1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
|
#ifndef STACKING_H_
#define STACKING_H_
#include "core/processing.h"
/* the stacking method */
struct stacking_args;
typedef int (*stack_method)(struct stacking_args *args);
typedef struct normalization_coeff norm_coeff;
/* TYPE OF SIGMA CLIPPING */
typedef enum {
NO_REJEC,
PERCENTILE,
SIGMA,
SIGMEDIAN,
WINSORIZED,
LINEARFIT,
} rejection;
/* TYPE OF NORMALIZATION */
typedef enum {
NO_NORM,
ADDITIVE,
MULTIPLICATIVE,
ADDITIVE_SCALING,
MULTIPLICATIVE_SCALING,
} normalization;
/* identical to the combo box items */
typedef enum {
ALL_IMAGES,
SELECTED_IMAGES,
BEST_PSF_IMAGES,
BEST_ROUND_IMAGES,
BEST_QUALITY_IMAGES
} stackType;
struct normalization_coeff {
double *offset;
double *mul;
double *scale;
};
struct stacking_args {
stack_method method;
sequence *seq;
int ref_image; // takes precedences over seq->reference_image which may not be applicable
seq_image_filter filtering_criterion;
double filtering_parameter;
int nb_images_to_stack; // calculated from the above, for display purposes
int *image_indices; // conversion between selected image indices and sequence image indices
char description[100]; // description of the filtering
const char *output_filename; // used in the idle function only
gboolean output_overwrite; // used in the idle function only
struct timeval t_start;
int retval;
int max_number_of_rows; /* number of rows that can be processed simultaneously,
function of max memory, image size and nb_images_to_stack */
double sig[2]; /* low and high sigma rejection */
rejection type_of_rejection; /* type of rejection */
normalization normalize; /* type of normalization */
norm_coeff coeff; /* normalization data */
gboolean force_norm; /* TRUE = force normalization */
gboolean norm_to_16; /* normalize final image to 16bits */
int reglayer; /* layer used for registration data */
};
void initialize_stacking_methods();
int stack_get_max_number_of_rows(sequence *seq, int nb_images_to_stack);
void stack_fill_list_of_unfiltered_images(struct stacking_args *args);
double compute_highest_accepted_fwhm(double percent);
double compute_highest_accepted_quality(double percent);
double compute_lowest_accepted_roundness(double percent);
int stack_median(struct stacking_args *args);
int stack_mean_with_rejection(struct stacking_args *args);
int stack_addmax(struct stacking_args *args);
int stack_addmin(struct stacking_args *args);
int upscale_sequence(struct stacking_args *args);
void clean_end_stacking(struct stacking_args *args);
void update_stack_interface(gboolean dont_change_stack_type);
int stack_filter_all(sequence *seq, int nb_img, double any);
int stack_filter_included(sequence *seq, int nb_img, double any);
int stack_filter_fwhm(sequence *seq, int nb_img, double max_fwhm);
int stack_filter_quality(sequence *seq, int nb_img, double max_quality);
int stack_filter_roundness(sequence *seq, int nb_img, double min_rnd);
/* normalization functions, normalize.c */
int do_normalization(struct stacking_args *args);
#endif
|