 |
AliceVision
Photogrammetric Computer Vision Framework
|
9 #include <aliceVision/types.hpp>
11 #include <aliceVision/image/dcp.hpp>
12 #include <aliceVision/lensCorrectionProfile/lcp.hpp>
13 #include <aliceVision/sfmData/ExposureSetting.hpp>
14 #include <aliceVision/sfmData/exif.hpp>
15 #include <aliceVision/sensorDB/Datasheet.hpp>
16 #include <aliceVision/camera/IntrinsicInitMode.hpp>
34 std::size_t width = 0,
35 std::size_t height = 0,
36 const std::map<std::string, std::string>& metadata = std::map<std::string, std::string>())
37 : _imagePath(imagePath),
48 bool operator==(
const ImageInfo& other)
const
51 return _width == other._width && _height == other._height;
54 inline bool operator!=(
const ImageInfo& other)
const {
return !(*
this == other); }
66 std::size_t
getWidth()
const {
return _width; }
78 std::pair<std::size_t, std::size_t>
getImgSize()
const {
return {_width, _height}; }
97 std::map<std::string, std::string>::const_iterator
findMetadataIterator(
const std::string& name)
const;
104 bool hasMetadata(
const std::vector<std::string>& names)
const;
119 bool hasDigitMetadata(
const std::vector<std::string>& names,
bool isPositive =
true)
const;
126 const std::string&
getMetadata(
const std::vector<std::string>& names)
const;
148 bool getDoubleMetadata(
const std::vector<std::string>& names,
double& val)
const;
169 return getMetadata({
"Model",
"cameraModel",
"cameraModelName",
"CameraModel",
"camera model",
"camera_model",
"camera model name"});
178 return getMetadata({
"Exif:BodySerialNumber",
"cameraSerialNumber",
"SerialNumber",
"Serial Number"});
199 return getMetadata({
"Exif:LensSerialNumber",
"lensSerialNumber",
"lens serial number",
"lens_serial_number"});
228 return std::pow(2.0, aperture / 2.0);
239 return getDoubleMetadata({
"Exif:PhotographicSensitivity",
"PhotographicSensitivity",
"Photographic Sensitivity",
"ISO"});
248 const int orientation =
getIntMetadata({
"Exif:Orientation",
"Orientation"});
250 return EEXIFOrientation::UNKNOWN;
251 return static_cast<EEXIFOrientation
>(orientation);
274 const std::string& getColorProfileFileName()
const {
return getMetadata({
"AliceVision:DCP:colorProfileFileName"}); }
276 const std::string& getRawColorInterpretation()
const {
return getMetadata({
"AliceVision:rawColorInterpretation"}); }
278 const std::vector<int> getCameraMultiplicators()
const
280 const std::string cam_mul =
getMetadata({
"raw:cam_mul"});
281 std::vector<int> v_mult;
285 while ((next = cam_mul.find(
" ", last)) != std::string::npos)
287 v_mult.push_back(std::stoi(cam_mul.substr(last, next - last)));
290 v_mult.push_back(std::stoi(cam_mul.substr(last)));
295 const bool getVignettingParams(std::vector<float>& v_vignParam)
const
302 v_vignParam.push_back(
static_cast<float>(value));
304 v_vignParam.push_back(
static_cast<float>(value));
306 v_vignParam.push_back(
static_cast<float>(value));
308 v_vignParam.push_back(
static_cast<float>(value));
310 v_vignParam.push_back(
static_cast<float>(value));
312 v_vignParam.push_back(
static_cast<float>(value));
314 v_vignParam.push_back(
static_cast<float>(value));
318 const bool getChromaticAberrationParams(std::vector<float>& v_caGParam, std::vector<float>& v_caBGParam, std::vector<float>& v_caRGParam)
const
327 v_caGParam.push_back(
static_cast<float>(value));
329 v_caGParam.push_back(
static_cast<float>(value));
331 v_caGParam.push_back(
static_cast<float>(value));
333 v_caGParam.push_back(
static_cast<float>(value));
335 v_caGParam.push_back(
static_cast<float>(value));
337 v_caGParam.push_back(
static_cast<float>(value));
339 v_caGParam.push_back(
static_cast<float>(value));
341 v_caBGParam.push_back(
static_cast<float>(value));
343 v_caBGParam.push_back(
static_cast<float>(value));
345 v_caBGParam.push_back(
static_cast<float>(value));
347 v_caBGParam.push_back(
static_cast<float>(value));
349 v_caBGParam.push_back(
static_cast<float>(value));
351 v_caBGParam.push_back(
static_cast<float>(value));
353 v_caBGParam.push_back(
static_cast<float>(value));
354 valid = valid &&
getDoubleMetadata({
"AliceVision:CABlueGreenScaleFactor"}, value);
355 v_caBGParam.push_back(
static_cast<float>(value));
357 v_caRGParam.push_back(
static_cast<float>(value));
359 v_caRGParam.push_back(
static_cast<float>(value));
361 v_caRGParam.push_back(
static_cast<float>(value));
363 v_caRGParam.push_back(
static_cast<float>(value));
365 v_caRGParam.push_back(
static_cast<float>(value));
367 v_caRGParam.push_back(
static_cast<float>(value));
369 v_caRGParam.push_back(
static_cast<float>(value));
370 valid = valid &&
getDoubleMetadata({
"AliceVision:CARedGreenScaleFactor"}, value);
371 v_caRGParam.push_back(
static_cast<float>(value));
376 const bool hasMetadataDateTimeOriginal()
const
378 return hasMetadata({
"Exif:DateTimeOriginal",
"DateTimeOriginal",
"DateTime",
"Date Time",
"Create Date",
"ctime"});
381 const std::string& getMetadataDateTimeOriginal()
const
383 return getMetadata({
"Exif:DateTimeOriginal",
"DateTimeOriginal",
"DateTime",
"Date Time",
"Create Date",
"ctime"});
386 int64_t getMetadataDateTimestamp()
const
389 std::string dtstring = getMetadataDateTimeOriginal();
390 std::regex regex(
"([\\d]+):([\\d]+):([\\d]+) ([\\d]+):([\\d]+):([\\d]+)");
392 if (!std::regex_match(dtstring, sm, regex))
397 int64_t year = std::stoi(sm[1]);
398 int64_t month = std::stoi(sm[2]);
399 int64_t day = std::stoi(sm[3]);
400 int64_t hour = std::stoi(sm[4]);
401 int64_t minutes = std::stoi(sm[5]);
402 int64_t seconds = std::stoi(sm[6]);
403 int64_t timecode = ((((((((year * 12) + month) * 31) + day) * 24) + hour) * 60 + minutes) * 60) + seconds;
408 double getSensorWidth()
const {
return getDoubleMetadata({
"AliceVision:SensorWidth"}); }
410 double getSensorHeight()
const {
return getDoubleMetadata({
"AliceVision:SensorHeight"}); }
416 const std::map<std::string, std::string>&
getMetadata()
const {
return _metadata; }
422 void setImagePath(
const std::string& imagePath) { _imagePath = imagePath; }
428 void setWidth(std::size_t width) { _width = width; }
434 void setHeight(std::size_t height) { _height = height; }
440 void setMetadata(
const std::map<std::string, std::string>& metadata) { _metadata = metadata; }
447 void addMetadata(
const std::string& key,
const std::string& value) { _metadata[key] = value; }
455 addMetadata(
"AliceVision:DCP:colorProfileFileName", dcpProf.info.filename);
457 addMetadata(
"AliceVision:DCP:Temp1", std::to_string(dcpProf.info.temperature_1));
458 addMetadata(
"AliceVision:DCP:Temp2", std::to_string(dcpProf.info.temperature_2));
460 const int colorMatrixNumber =
461 (dcpProf.info.has_color_matrix_1 && dcpProf.info.has_color_matrix_2) ? 2 : (dcpProf.info.has_color_matrix_1 ? 1 : 0);
462 addMetadata(
"AliceVision:DCP:ColorMatrixNumber", std::to_string(colorMatrixNumber));
464 const int forwardMatrixNumber =
465 (dcpProf.info.has_forward_matrix_1 && dcpProf.info.has_forward_matrix_2) ? 2 : (dcpProf.info.has_forward_matrix_1 ? 1 : 0);
466 addMetadata(
"AliceVision:DCP:ForwardMatrixNumber", std::to_string(forwardMatrixNumber));
468 const int calibMatrixNumber =
469 (dcpProf.info.has_camera_calibration_1 && dcpProf.info.has_camera_calibration_2) ? 2 : (dcpProf.info.has_camera_calibration_1 ? 1 : 0);
470 addMetadata(
"AliceVision:DCP:CameraCalibrationMatrixNumber", std::to_string(calibMatrixNumber));
472 std::vector<std::string> v_strColorMatrix;
474 for (
int k = 0; k < v_strColorMatrix.size(); k++)
476 addMetadata(
"AliceVision:DCP:ColorMat" + std::to_string(k + 1), v_strColorMatrix[k]);
479 std::vector<std::string> v_strForwardMatrix;
481 for (
int k = 0; k < v_strForwardMatrix.size(); k++)
483 addMetadata(
"AliceVision:DCP:ForwardMat" + std::to_string(k + 1), v_strForwardMatrix[k]);
486 std::vector<std::string> v_strCalibMatrix;
488 for (
int k = 0; k < v_strCalibMatrix.size(); k++)
490 addMetadata(
"AliceVision:DCP:CameraCalibrationMat" + std::to_string(k + 1), v_strCalibMatrix[k]);
550 int getSensorSize(
const std::vector<sensorDB::Datasheet>& sensorDatabase,
552 double& sensorHeight,
553 double& focalLengthmm,
554 camera::EInitMode& intrinsicInitMode,
555 bool verbose =
false);
559 std::string _imagePath;
565 std::map<std::string, std::string> _metadata;
LensParam contains parameters of distortion, vignetting and chromatic aberration models for a set of ...
Definition: lcp.hpp:198
int getMetadataLensID() const
Get the corresponding "LensID" metadata value.
Definition: ImageInfo.hpp:191
RectilinearModel ChromaticBlueGreenParams
Chromatic Blue/Green model parameters.
Definition: lcp.hpp:261
double getMetadataFocalLength() const
Get the corresponding "FocalLength" metadata value.
Definition: ImageInfo.cpp:399
void addMetadata(const std::string &key, const std::string &value)
Add view metadata.
Definition: ImageInfo.hpp:447
int getSensorSize(const std::vector< sensorDB::Datasheet > &sensorDatabase, double &sensorWidth, double &sensorHeight, double &focalLengthmm, camera::EInitMode &intrinsicInitMode, bool verbose=false)
Get sensor size by combining info in metadata and in sensor database.
Definition: ImageInfo.cpp:185
const std::string & getImagePath() const
Get view image path.
Definition: ImageInfo.hpp:60
RectilinearModel ChromaticRedGreenParams
Chromatic Red/Green model parameters.
Definition: lcp.hpp:257
void setWidth(std::size_t width)
Set the given view image width.
Definition: ImageInfo.hpp:428
int getIntMetadata(const std::vector< std::string > &names) const
Get the metadata value as an integer.
Definition: ImageInfo.cpp:132
double getMetadataFNumber() const
Get the corresponding "FNumber" (relative aperture) metadata value.
Definition: ImageInfo.hpp:218
RectilinearModel ChromaticGreenParams
Chromatic Green model parameters.
Definition: lcp.hpp:253
void addVignettingMetadata(LensParam &lensParam)
Add vignetting model parameters in metadata.
Definition: ImageInfo.hpp:498
std::pair< std::size_t, std::size_t > getImgSize() const
Get view image size.
Definition: ImageInfo.hpp:78
Definition: checkerDetector.cpp:32
void getMatricesAsStrings(const std::string &type, std::vector< std::string > &v_strMat) const
getMatricesAsStrings gets some matrices contained in the profile in a string format (one string per m...
Definition: dcp.cpp:2223
bool hasDigitMetadata(const std::vector< std::string > &names, bool isPositive=true) const
Return true if the given metadata name exists and is a digit.
Definition: ImageInfo.cpp:49
std::map< std::string, std::string >::const_iterator findMetadataIterator(const std::string &name) const
Get an iterator on the map of metadata from a given name.
Definition: ImageInfo.cpp:19
bool hasMetadata(const std::vector< std::string > &names) const
Return true if the given metadata name exists.
Definition: ImageInfo.cpp:44
const std::string & getMetadataModel() const
Get the corresponding "Model" metadata value.
Definition: ImageInfo.hpp:167
ExposureSetting getCameraExposureSetting() const
Get the Camera Exposure Setting value. For the same scene, this value is linearly proportional to the...
Definition: ImageInfo.hpp:85
const std::string & getMetadataMake() const
Get the corresponding "Make" metadata value.
Definition: ImageInfo.hpp:161
void addChromaticMetadata(LensParam &lensParam)
Add chromatic model parameters in metadata.
Definition: ImageInfo.hpp:513
double getEv() const
Get the Exposure Value. EV is a number that represents a combination of a camera's shutter speed and ...
Definition: ImageInfo.cpp:17
EEXIFOrientation getMetadataOrientation() const
Get the corresponding "Orientation" metadata value.
Definition: ImageInfo.hpp:246
void setMetadata(const std::map< std::string, std::string > &metadata)
Set view metadata.
Definition: ImageInfo.hpp:440
double getDoubleMetadata(const std::vector< std::string > &names) const
Get the metadata value as a double.
Definition: ImageInfo.cpp:115
double getMetadataShutter() const
Get the corresponding "ExposureTime" (shutter) metadata value.
Definition: ImageInfo.hpp:212
void addDCPMetadata(image::DCPProfile &dcpProf)
Add DCP info in metadata.
Definition: ImageInfo.hpp:453
ImageInfo(const std::string &imagePath="", std::size_t width=0, std::size_t height=0, const std::map< std::string, std::string > &metadata=std::map< std::string, std::string >())
Image Constructor.
Definition: ImageInfo.hpp:33
const std::map< std::string, std::string > & getMetadata() const
Get the view metadata structure.
Definition: ImageInfo.hpp:416
std::size_t getWidth() const
Get view image width.
Definition: ImageInfo.hpp:66
bool hasGpsMetadata() const
Return true if the metadata for longitude and latitude exist. It checks that all the tags from GPSExi...
Definition: ImageInfo.cpp:147
VignetteModel vignParams
Vignetting model parameters.
Definition: lcp.hpp:275
void setImagePath(const std::string &imagePath)
Set the given view image path.
Definition: ImageInfo.hpp:422
DCPProfile contains a Dng Color Profile as specified by Adobe DNG specification can be found here: ht...
Definition: dcp.hpp:121
double readRealNumber(const std::string &str) const
Read a floating point value from a string. It support an integer, a floating point value or a fractio...
Definition: ImageInfo.cpp:89
double getMetadataISO() const
Get the corresponding "PhotographicSensitivity" (ISO) metadata value.
Definition: ImageInfo.hpp:237
Definition: ExposureSetting.hpp:15
const std::string & getMetadataLensSerialNumber() const
Get the corresponding "LensSerialNumber" metadata value.
Definition: ImageInfo.hpp:197
void setHeight(std::size_t height)
Set the given view image height.
Definition: ImageInfo.hpp:434
std::size_t getHeight() const
Get view image height.
Definition: ImageInfo.hpp:72
const std::string & getMetadataLensModel() const
Get the corresponding "LensModel" metadata value.
Definition: ImageInfo.hpp:185
Vec3 getGpsPositionWGS84FromMetadata() const
Get the gps position in the WGS84 reference system as a vector.
Definition: ImageInfo.cpp:175
const std::string & getMetadataBodySerialNumber() const
Get the corresponding "BodySerialNumber" metadata value.
Definition: ImageInfo.hpp:176
Vec3 getGpsPositionFromMetadata() const
Get the gps position in the absolute cartesian reference system.
Definition: ImageInfo.cpp:153
Definition: ImageInfo.hpp:23