51 int main(
int argc,
char **argv) {
54 engine_impl = argv[1];
58 auto frames =
readFrames(frames_path[0].
string());
74 auto i0 = std::make_shared<EngineParameter>(12., make_unique<ExpSigmoidConverter>(1, 100));
75 auto n = std::make_shared<ManualParameter>(1.);
76 auto k = std::make_shared<ManualParameter>(1.);
79 auto reg_man = make_unique<OnlySmooth>();
80 auto exp = make_unique<SersicModelComponent>(
move(reg_man), i0, n, k);
86 auto x = std::make_shared<EngineParameter>(10, make_unique<NormalizedConverter>(30.));
87 auto y = std::make_shared<EngineParameter>(20, make_unique<NormalizedConverter>(30.));
88 auto x_scale = std::make_shared<EngineParameter>(.5, make_unique<SigmoidConverter>(0, 1));
89 auto y_scale = std::make_shared<EngineParameter>(.5, make_unique<SigmoidConverter>(0, 1));
90 auto rot_angle = std::make_shared<EngineParameter>(2., make_unique<SigmoidConverter>(0, 2*M_PI));
99 rot_angle, width, height,
x,
y));
103 auto psf =
readPsf(psf_path[0].
string());
107 for (
auto&
pair : frames) {
117 cv::Mat weight = cv::Mat::ones(image.rows, image.cols, CV_64F);
120 res_estimator.registerBlockProvider(
move(data_vs_model));
128 cout <<
"I0 (12) = " << i0->getValue() <<
'\n';
129 cout <<
"X (14.5) = " <<
x->getValue() <<
'\n';
130 cout <<
"Y (15.3) = " <<
y->getValue() <<
'\n';
131 cout <<
"X_SCALE (.83) = " << x_scale->getValue() <<
'\n';
132 cout <<
"Y_SCALE (.25) = " << y_scale->getValue() <<
'\n';
133 cout <<
"angle (2.3) = " << rot_angle->getValue() <<
'\n';
138 manager.registerParameter(
x);
139 manager.registerParameter(
y);
140 manager.registerParameter(x_scale);
141 manager.registerParameter(y_scale);
142 manager.registerParameter(rot_angle);
146 for (
auto &
e : LeastSquareEngineManager::getImplementations()) {
150 auto engine = LeastSquareEngineManager::create(engine_impl);
152 auto solution = engine->solveProblem(manager, res_estimator);
159 cout <<
"I0 (12) = " << i0->getValue() <<
'\n';
160 cout <<
"X (14.5) = " <<
x->getValue() <<
'\n';
161 cout <<
"Y (15.3) = " <<
y->getValue() <<
'\n';
162 cout <<
"X_SCALE (.83) = " << x_scale->getValue() <<
'\n';
163 cout <<
"Y_SCALE (.25) = " << y_scale->getValue() <<
'\n';
164 cout <<
"angle (2.3) = " << rot_angle->getValue() <<
'\n';
void printLevmarInfo(std::array< double, 10 > info)
std::shared_ptr< DependentParameter< std::shared_ptr< EngineParameter > > > x
std::shared_ptr< DependentParameter< std::shared_ptr< EngineParameter > > > y
std::vector< std::pair< cv::Mat, double > > readFrames(const std::string &filename)
void registerParameter(std::shared_ptr< EngineParameter > parameter)
Registers an EngineParameter to the EngineParameterManager.
int main(int argc, char **argv)
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.
Data vs model comparator which computes a modified residual.
std::unique_ptr< T > make_unique(Args &&... args)
T emplace_back(T... args)