32 #include <opencv2/opencv.hpp>
33 #include <CCfits/CCfits>
42 std::copy(image.begin<
double>(), image.end<
double>(), begin(data));
44 long naxes[2] = {image.size[1], image.size[0]};
46 pFits->pHDU().write(1, image.total(), data);
47 std::cout <<
"Created file " << filename <<
'\n';
56 auto& image_hdu = pFits->pHDU();
59 image_hdu.readKey(
"SCALE", pixel_scale);
61 if (image_hdu.axis(0) != image_hdu.axis(1)) {
63 << image_hdu.axis(1) <<
')';
65 auto size = image_hdu.axis(0);
69 cv::Mat kernel (size, size, CV_64F);
70 std::copy(begin(data), end(data), kernel.begin<
double>());
80 auto& image_hdu = pFits->pHDU();
83 image_hdu.readKey(
"SCALE", pixel_scale);
85 auto width = image_hdu.axis(1);
86 auto height = image_hdu.axis(0);
91 std::copy(begin(data), end(data), image.begin<
double>());
99 for (
auto& pair : pFits->extension()) {
100 auto& image_hdu = *pair.second;
103 image_hdu.readKey(
"SCALE", pixel_scale);
105 auto width = image_hdu.axis(1);
106 auto height = image_hdu.axis(0);
109 image_hdu.read(data);
111 std::copy(begin(data), end(data), image.begin<
double>());
112 result.emplace_back(image, pixel_scale);
120 std::cout <<
" ||e||_2 at initial p: " << info[0] <<
'\n';
121 std::cout <<
" ||e||_2: " << info[1] <<
'\n';
122 std::cout <<
" ||J^T e||_inf: " << info[2] <<
'\n';
123 std::cout <<
" ||Dp||_2: " << info[3] <<
'\n';
124 std::cout <<
" mu/max[J^T J]_ii: " << info[4] <<
'\n';
125 std::cout <<
" # iterations: " << info[5] <<
'\n';
126 switch ((
int)info[6]) {
128 std::cout <<
" stopped by small gradient J^T e\n";
137 std::cout <<
" singular matrix. Restart from current p with increased mu\n";
140 std::cout <<
" no further error reduction is possible. Restart with increased mu\n";
143 std::cout <<
" stopped by small ||e||_2\n";
146 std::cout <<
" stopped by invalid (i.e. NaN or Inf) func values; a user error\n";
149 std::cout <<
" unknown stop reason " << (int)info[6] <<
"\n";
151 std::cout <<
" # function evaluations: " << info[7] <<
'\n';
152 std::cout <<
" # Jacobian evaluations: " << info[8] <<
'\n';
153 std::cout <<
" # linear systems solved: " << info[9] <<
"\n\n";
void printLevmarInfo(std::array< double, 10 > info)
void writeToFits(const cv::Mat &image, const std::string &filename)
std::vector< std::pair< cv::Mat, double > > readFrames(const std::string &filename)
ModelFitting::OpenCvPsf readPsf(const std::string &filename)
std::pair< cv::Mat, double > readImage(const std::string &filename)