Skip to content
Snippets Groups Projects
Commit 8c9f1767 authored by Nicolas Pope's avatar Nicolas Pope
Browse files

Move calibration to use json config

parent dec2247b
No related branches found
No related tags found
No related merge requests found
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
"frame_delay": 100, "frame_delay": 100,
"num_frames": 25, "num_frames": 25,
"assume_zero_tangential_distortion": true, "assume_zero_tangential_distortion": true,
"fix_aspect_ratio": true,
"fix_principal_point_at_center": true, "fix_principal_point_at_center": true,
"use_fisheye_model": false, "use_fisheye_model": false,
"fix_k1": false, "fix_k1": false,
...@@ -19,7 +20,8 @@ ...@@ -19,7 +20,8 @@
"fix_k5": true, "fix_k5": true,
"save": true, "save": true,
"use_intrinsics": true, "use_intrinsics": true,
"use_extrinsics": true "use_extrinsics": true,
"flip_vertical": false
}, },
"camera": { "camera": {
"name": "Pansonic Lumix DMC-FZ300", "name": "Pansonic Lumix DMC-FZ300",
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#include <ftl/local.hpp> #include <ftl/local.hpp>
#include <string> #include <string>
#include <vector> #include <vector>
#include <nlohmann/json.hpp>
namespace cv { namespace cv {
class FileStorage; class FileStorage;
...@@ -21,7 +22,7 @@ class Calibrate { ...@@ -21,7 +22,7 @@ class Calibrate {
enum InputType { INVALID, CAMERA, VIDEO_FILE, IMAGE_LIST }; enum InputType { INVALID, CAMERA, VIDEO_FILE, IMAGE_LIST };
void write(cv::FileStorage& fs) const; void write(cv::FileStorage& fs) const;
void read(const cv::FileNode& node); void read(const nlohmann::json& node);
void validate(); void validate();
//Mat nextImage(); //Mat nextImage();
...@@ -65,7 +66,7 @@ class Calibrate { ...@@ -65,7 +66,7 @@ class Calibrate {
}; };
public: public:
Calibrate(ftl::LocalSource *s, const std::string &cal); Calibrate(ftl::LocalSource *s, nlohmann::json &config);
bool recalibrate(); bool recalibrate();
......
...@@ -46,30 +46,30 @@ void Calibrate::Settings::write(FileStorage& fs) const // ...@@ -46,30 +46,30 @@ void Calibrate::Settings::write(FileStorage& fs) const //
//<< "Input" << input //<< "Input" << input
<< "}"; << "}";
} }
void Calibrate::Settings::read(const FileNode& node) //Read serialization for this class void Calibrate::Settings::read(const nlohmann::json& node) //Read serialization for this class
{ {
node["BoardSize_Width" ] >> boardSize.width; boardSize.width = node["board_size"][0];
node["BoardSize_Height"] >> boardSize.height; boardSize.height = node["board_size"][1];
node["Calibrate_Pattern"] >> patternToUse; //node["Calibrate_Pattern"] >> patternToUse;
node["Square_Size"] >> squareSize; squareSize = node["square_size"];
node["Calibrate_NrOfFrameToUse"] >> nrFrames; nrFrames = node["num_frames"];
node["Calibrate_FixAspectRatio"] >> aspectRatio; aspectRatio = node["fix_aspect_ratio"];
node["Write_DetectedFeaturePoints"] >> writePoints; //node["Write_DetectedFeaturePoints"] >> writePoints;
node["Write_extrinsicParameters"] >> writeExtrinsics; //node["Write_extrinsicParameters"] >> writeExtrinsics;
node["Write_gridPoints"] >> writeGrid; //node["Write_gridPoints"] >> writeGrid;
//node["Write_outputFileName"] >> outputFileName; //node["Write_outputFileName"] >> outputFileName;
node["Calibrate_AssumeZeroTangentialDistortion"] >> calibZeroTangentDist; calibZeroTangentDist = node["assume_zero_tangential_distortion"];
node["Calibrate_FixPrincipalPointAtTheCenter"] >> calibFixPrincipalPoint; calibFixPrincipalPoint = node["fix_principal_point_at_center"];
node["Calibrate_UseFisheyeModel"] >> useFisheye; useFisheye = node["use_fisheye_model"];
node["Input_FlipAroundHorizontalAxis"] >> flipVertical; flipVertical = node["flip_vertical"];
//node["Show_UndistortedImage"] >> showUndistorsed; //node["Show_UndistortedImage"] >> showUndistorsed;
//node["Input"] >> input; //node["Input"] >> input;
node["Input_Delay"] >> delay; delay = node["frame_delay"];
node["Fix_K1"] >> fixK1; fixK1 = node["fix_k1"];
node["Fix_K2"] >> fixK2; fixK2 = node["fix_k2"];
node["Fix_K3"] >> fixK3; fixK3 = node["fix_k3"];
node["Fix_K4"] >> fixK4; fixK4 = node["fix_k4"];
node["Fix_K5"] >> fixK5; fixK5 = node["fix_k5"];
validate(); validate();
} }
...@@ -112,7 +112,7 @@ void Calibrate::Settings::validate() ...@@ -112,7 +112,7 @@ void Calibrate::Settings::validate()
if (calibFixPrincipalPoint) flag |= fisheye::CALIB_FIX_PRINCIPAL_POINT; if (calibFixPrincipalPoint) flag |= fisheye::CALIB_FIX_PRINCIPAL_POINT;
} }
calibrationPattern = NOT_EXISTING; /*calibrationPattern = NOT_EXISTING;
if (!patternToUse.compare("CHESSBOARD")) calibrationPattern = CHESSBOARD; if (!patternToUse.compare("CHESSBOARD")) calibrationPattern = CHESSBOARD;
if (!patternToUse.compare("CIRCLES_GRID")) calibrationPattern = CIRCLES_GRID; if (!patternToUse.compare("CIRCLES_GRID")) calibrationPattern = CIRCLES_GRID;
if (!patternToUse.compare("ASYMMETRIC_CIRCLES_GRID")) calibrationPattern = ASYMMETRIC_CIRCLES_GRID; if (!patternToUse.compare("ASYMMETRIC_CIRCLES_GRID")) calibrationPattern = ASYMMETRIC_CIRCLES_GRID;
...@@ -120,7 +120,7 @@ void Calibrate::Settings::validate() ...@@ -120,7 +120,7 @@ void Calibrate::Settings::validate()
{ {
LOG(ERROR) << " Camera calibration mode does not exist: " << patternToUse; LOG(ERROR) << " Camera calibration mode does not exist: " << patternToUse;
goodInput = false; goodInput = false;
} }*/
atImageList = 0; atImageList = 0;
} }
...@@ -166,16 +166,16 @@ bool runCalibration(Calibrate::Settings& s, Size imageSize, Mat& cameraMatrix, ...@@ -166,16 +166,16 @@ bool runCalibration(Calibrate::Settings& s, Size imageSize, Mat& cameraMatrix,
vector<vector<Point2f> > imagePoints, float grid_width, bool release_object); vector<vector<Point2f> > imagePoints, float grid_width, bool release_object);
Calibrate::Calibrate(ftl::LocalSource *s, const std::string &cal) : local_(s) { Calibrate::Calibrate(ftl::LocalSource *s, nlohmann::json &config) : local_(s) {
FileStorage fs(cal, FileStorage::READ); // Read the settings /*FileStorage fs(cal, FileStorage::READ); // Read the settings
if (!fs.isOpened()) if (!fs.isOpened())
{ {
LOG(ERROR) << "Could not open the configuration file: \"" << cal << "\""; LOG(ERROR) << "Could not open the configuration file: \"" << cal << "\"";
return; return;
} }*/
//fs["Settings"] >> settings_; //fs["Settings"] >> settings_;
settings_.read(fs["Settings"]); settings_.read(config);
fs.release(); //fs.release();
if (!settings_.goodInput) if (!settings_.goodInput)
{ {
...@@ -534,7 +534,7 @@ static bool _runCalibration( Calibrate::Settings& s, Size& imageSize, Mat& camer ...@@ -534,7 +534,7 @@ static bool _runCalibration( Calibrate::Settings& s, Size& imageSize, Mat& camer
} }
vector<vector<Point3f> > objectPoints(1); vector<vector<Point3f> > objectPoints(1);
calcBoardCornerPositions(s.boardSize, s.squareSize, objectPoints[0], s.calibrationPattern); calcBoardCornerPositions(s.boardSize, s.squareSize, objectPoints[0], Calibrate::Settings::CHESSBOARD);
objectPoints[0][s.boardSize.width - 1].x = objectPoints[0][0].x + grid_width; objectPoints[0][s.boardSize.width - 1].x = objectPoints[0][0].x + grid_width;
newObjPoints = objectPoints[0]; newObjPoints = objectPoints[0];
......
...@@ -111,7 +111,7 @@ int main(int argc, char **argv) { ...@@ -111,7 +111,7 @@ int main(int argc, char **argv) {
}*/ }*/
// Perform or load calibration intrinsics + extrinsics // Perform or load calibration intrinsics + extrinsics
Calibrate calibrate(lsrc, OPTION_calibration_config); Calibrate calibrate(lsrc, config["calibration"]);
if (config["calibrate"]) calibrate.recalibrate(); if (config["calibrate"]) calibrate.recalibrate();
if (!calibrate.isCalibrated()) LOG(WARNING) << "Cameras are not calibrated!"; if (!calibrate.isCalibrated()) LOG(WARNING) << "Cameras are not calibrated!";
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment