54 int main(
int argc,
char **argv) {
57 engine_impl = argv[1];
66 size_t image_cols = image.cols;
67 size_t image_rows = image.rows;
83 auto i0 = std::make_shared<EngineParameter>(50000., make_unique<ExpSigmoidConverter>(1, 1000000.));
84 auto n = std::make_shared<ManualParameter>(1.);
85 auto k = std::make_shared<ManualParameter>(1.);
88 auto reg_man = make_unique<OnlySmooth>();
89 auto exp = make_unique<SersicModelComponent>(
move(reg_man), i0, n, k);
95 auto x = std::make_shared<EngineParameter>(120, make_unique<NormalizedConverter>(1500.));
96 auto y = std::make_shared<EngineParameter>(140, make_unique<NormalizedConverter>(1500.));
97 auto x_scale = std::make_shared<EngineParameter>(1.0, make_unique<SigmoidConverter>(0, 10.));
98 auto y_scale = std::make_shared<EngineParameter>(1.0, make_unique<SigmoidConverter>(0, 10.));
99 auto rot_angle = std::make_shared<EngineParameter>(20.0 * M_PI/180.0, make_unique<SigmoidConverter>(0, 2*M_PI));
108 x_scale, y_scale, rot_angle, width, height,
x,
y));
111 auto back = std::make_shared<EngineParameter>(100., make_unique<ExpSigmoidConverter>(1, 1000000.));
117 auto psf =
readPsf(psf_path[0].
string());
126 writeToFits(frame_model.getImage(),
"example_gal2_before.fits");
135 manager.registerParameter(
x);
136 manager.registerParameter(
y);
137 manager.registerParameter(x_scale);
138 manager.registerParameter(y_scale);
139 manager.registerParameter(rot_angle);
140 manager.registerParameter(back);
146 cv::Mat weight = cv::Mat::ones(image.rows, image.cols, CV_64F);
157 [](
double x,
double y){
return x/
y;},
161 res_estimator.registerBlockProvider(make_unique<WorldValueResidual>(
168 cout <<
"I0 = " << i0->getValue() <<
'\n';
169 cout <<
"X = " <<
x->getValue() <<
'\n';
170 cout <<
"Y = " <<
y->getValue() <<
'\n';
171 cout <<
"X_SCALE = " << x_scale->getValue() <<
'\n';
172 cout <<
"Y_SCALE = " << y_scale->getValue() <<
'\n';
173 cout <<
"angle = " << rot_angle->getValue() <<
'\n';
174 cout <<
"Background = " << back->getValue() <<
'\n';
177 auto engine = LeastSquareEngineManager::create(engine_impl);
179 auto solution = engine->solveProblem(manager, res_estimator);
186 cout <<
"I0 = " << i0->getValue() <<
'\n';
187 cout <<
"X = " <<
x->getValue() <<
'\n';
188 cout <<
"Y = " <<
y->getValue() <<
'\n';
189 cout <<
"X_SCALE = " << x_scale->getValue() <<
'\n';
190 cout <<
"Y_SCALE = " << y_scale->getValue() <<
'\n';
191 cout <<
"angle = " << rot_angle->getValue() <<
'\n';
192 cout <<
"Background = " << back->getValue() <<
'\n';
197 reg_man = make_unique<OnlySmooth>();
198 exp = make_unique<SersicModelComponent>(
move(reg_man), i0, n, k);
199 component_list.clear();
200 component_list.emplace_back(
move(
exp));
201 extended_models.clear();
203 rot_angle, width, height,
x,
y));
204 constant_models.clear();
205 constant_models.emplace_back(back);
208 move(extended_models),
readPsf(psf_path[0].
string())
210 writeToFits(frame_model_after.getImage(),
"example_gal2_after.fits");
void printLevmarInfo(std::array< double, 10 > info)
void writeToFits(const cv::Mat &image, const std::string &filename)
int main(int argc, char **argv)
std::shared_ptr< DependentParameter< std::shared_ptr< EngineParameter > > > x
std::shared_ptr< DependentParameter< std::shared_ptr< EngineParameter > > > y
void registerBlockProvider(std::unique_ptr< ResidualBlockProvider > provider)
Registers a ResidualBlockProvider to the ResidualEstimator.
void registerParameter(std::shared_ptr< EngineParameter > parameter)
Registers an EngineParameter to the EngineParameterManager.
ELEMENTS_API std::vector< boost::filesystem::path > pathSearchInEnvVariable(const std::string &file_name, const std::string &path_like_env_variable, SearchType search_type=SearchType::Recursive)
std::unique_ptr< DataVsModelResiduals< typename std::remove_reference< DataType >::type, typename std::remove_reference< ModelType >::type, typename std::remove_reference< WeightType >::type, typename std::remove_reference< Comparator >::type > > createDataVsModelResiduals(DataType &&data, ModelType &&model, WeightType &&weight, Comparator &&comparator)
Class responsible for managing the parameters the least square engine minimizes.
ModelFitting::OpenCvPsf readPsf(const std::string &filename)
Provides to the LeastSquareEngine the residual values.
std::shared_ptr< DependentParameter< Parameters... > > createDependentParameter(typename DependentParameter< Parameters... >::ValueCalculator value_calculator, Parameters... parameters)
std::pair< cv::Mat, double > readImage(const std::string &filename)
Data vs model comparator which computes a modified residual.
std::unique_ptr< T > make_unique(Args &&... args)
T emplace_back(T... args)