Skip to content

Commit 14f164f

Browse files
committed
Added distortion correction post processor with associated test
1 parent 2d27dd7 commit 14f164f

File tree

15 files changed

+1310
-21
lines changed

15 files changed

+1310
-21
lines changed

src/base/DICe_FieldEnums.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,10 @@ void create_string_maps()
108108
field_name_string[field_enums::PROJECTION_AUG_Y] = "PROJECTION_AUG_Y";
109109
field_name_string[field_enums::SUBSET_DISPLACEMENT_X] = "DISPLACEMENT_X"; // the string is different from the enum because of legacy field names
110110
field_name_string[field_enums::SUBSET_DISPLACEMENT_Y] = "DISPLACEMENT_Y"; // the string is different from the enum because of legacy field names
111+
field_name_string[field_enums::DIST_CORRECTED_SUBSET_DISP_X] = "DIST_CORRECTED_SUBSET_DISP_X";
112+
field_name_string[field_enums::DIST_CORRECTED_SUBSET_DISP_Y] = "DIST_CORRECTED_SUBSET_DISP_Y";
113+
field_name_string[field_enums::DIST_CORRECTED_SUBSET_X] = "DIST_CORRECTED_SUBSET_X";
114+
field_name_string[field_enums::DIST_CORRECTED_SUBSET_Y] = "DIST_CORRECTED_SUBSET_Y";
111115
field_name_string[field_enums::STEREO_DISPLACEMENT_X] = "STEREO_DISPLACEMENT_X";
112116
field_name_string[field_enums::STEREO_DISPLACEMENT_Y] = "STEREO_DISPLACEMENT_Y";
113117
field_name_string[field_enums::MODEL_DISPLACEMENT_X] = "MODEL_DISPLACEMENT_X";

src/base/DICe_FieldEnums.h

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,10 @@ Field_Name
9494
PROJECTION_AUG_Y,
9595
SUBSET_DISPLACEMENT_X,
9696
SUBSET_DISPLACEMENT_Y,
97+
DIST_CORRECTED_SUBSET_X,
98+
DIST_CORRECTED_SUBSET_Y,
99+
DIST_CORRECTED_SUBSET_DISP_X,
100+
DIST_CORRECTED_SUBSET_DISP_Y,
97101
STEREO_DISPLACEMENT_X,
98102
STEREO_DISPLACEMENT_Y,
99103
MODEL_DISPLACEMENT_X,
@@ -476,6 +480,14 @@ const Field_Spec SUBSET_DISPLACEMENT_Y_FS(field_enums::SCALAR_FIELD_TYPE,field_e
476480
/// field spec
477481
const Field_Spec SUBSET_DISPLACEMENT_Y_NM1_FS(field_enums::SCALAR_FIELD_TYPE,field_enums::SUBSET_DISPLACEMENT_Y,field_enums::NODE_RANK,field_enums::STATE_N_MINUS_ONE,false,true);
478482
/// field spec
483+
const Field_Spec DIST_CORRECTED_SUBSET_DISP_X_FS(field_enums::SCALAR_FIELD_TYPE,field_enums::DIST_CORRECTED_SUBSET_DISP_X,field_enums::NODE_RANK,field_enums::NO_FIELD_STATE,true,true);
484+
/// field spec
485+
const Field_Spec DIST_CORRECTED_SUBSET_DISP_Y_FS(field_enums::SCALAR_FIELD_TYPE,field_enums::DIST_CORRECTED_SUBSET_DISP_Y,field_enums::NODE_RANK,field_enums::NO_FIELD_STATE,true,true);
486+
/// field spec
487+
const Field_Spec DIST_CORRECTED_SUBSET_X_FS(field_enums::SCALAR_FIELD_TYPE,field_enums::DIST_CORRECTED_SUBSET_X,field_enums::NODE_RANK,field_enums::NO_FIELD_STATE,true,true);
488+
/// field spec
489+
const Field_Spec DIST_CORRECTED_SUBSET_Y_FS(field_enums::SCALAR_FIELD_TYPE,field_enums::DIST_CORRECTED_SUBSET_Y,field_enums::NODE_RANK,field_enums::NO_FIELD_STATE,true,true);
490+
/// field spec
479491
const Field_Spec STEREO_SUBSET_DISPLACEMENT_X_FS(field_enums::SCALAR_FIELD_TYPE,field_enums::STEREO_DISPLACEMENT_X,field_enums::NODE_RANK,field_enums::NO_FIELD_STATE,true,true);
480492
/// field spec
481493
const Field_Spec STEREO_SUBSET_DISPLACEMENT_Y_FS(field_enums::SCALAR_FIELD_TYPE,field_enums::STEREO_DISPLACEMENT_Y,field_enums::NODE_RANK,field_enums::NO_FIELD_STATE,true,true);
@@ -709,7 +721,7 @@ const Field_Spec ROT_TRANS_3D_TRANS_Y_FS(field_enums::SCALAR_FIELD_TYPE, field_e
709721
const Field_Spec ROT_TRANS_3D_TRANS_Z_FS(field_enums::SCALAR_FIELD_TYPE, field_enums::ROT_TRANS_3D_TRANS_Z, field_enums::NODE_RANK, field_enums::NO_FIELD_STATE, true);
710722

711723
/// the number of fields that have been defined (must be set at compile time)
712-
const int_t num_fields_defined = 142;
724+
const int_t num_fields_defined = 146;
713725

714726
/// array of all the valid field specs
715727
const field_enums::Field_Spec fs_spec_vec[num_fields_defined] = {
@@ -736,6 +748,10 @@ const field_enums::Field_Spec fs_spec_vec[num_fields_defined] = {
736748
SUBSET_DISPLACEMENT_X_NM1_FS,
737749
SUBSET_DISPLACEMENT_Y_FS,
738750
SUBSET_DISPLACEMENT_Y_NM1_FS,
751+
DIST_CORRECTED_SUBSET_DISP_X_FS,
752+
DIST_CORRECTED_SUBSET_DISP_Y_FS,
753+
DIST_CORRECTED_SUBSET_X_FS,
754+
DIST_CORRECTED_SUBSET_Y_FS,
739755
STEREO_SUBSET_DISPLACEMENT_X_FS,
740756
STEREO_SUBSET_DISPLACEMENT_Y_FS,
741757
MODEL_DISPLACEMENT_X_FS,

src/core/DICe_PostProcessor.cpp

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -822,6 +822,57 @@ Plotly_Contour_Post_Processor::execute(Teuchos::RCP<Image> ref_img, Teuchos::RCP
822822
DEBUG_MSG("Plotly_Contour_Post_Processor execute() end");
823823
}
824824

825+
Distortion_Correction_Post_Processor::Distortion_Correction_Post_Processor(const Teuchos::RCP<Teuchos::ParameterList> & params) :
826+
Post_Processor(post_process_distortion_correction){
827+
field_specs_.push_back(DICe::field_enums::DIST_CORRECTED_SUBSET_X_FS);
828+
field_specs_.push_back(DICe::field_enums::DIST_CORRECTED_SUBSET_Y_FS);
829+
field_specs_.push_back(DICe::field_enums::DIST_CORRECTED_SUBSET_DISP_X_FS);
830+
field_specs_.push_back(DICe::field_enums::DIST_CORRECTED_SUBSET_DISP_Y_FS);
831+
DEBUG_MSG("Enabling post processor Distortion_Correction_Post_Processor with associated fields:");
832+
for(size_t i=0;i<field_specs_.size();++i){
833+
DEBUG_MSG(field_specs_[i].get_name_label());
834+
}
835+
std::string camera_sys_file = params->get<std::string>(camera_system_file);
836+
DEBUG_MSG("Distortion_Correction_Post_Processor(): camera system file: " << camera_sys_file);
837+
tri_ = Teuchos::rcp(new DICe::Triangulation(camera_sys_file));
838+
}
839+
840+
void
841+
Distortion_Correction_Post_Processor::execute(Teuchos::RCP<Image> ref_img, Teuchos::RCP<Image> def_img){
842+
DEBUG_MSG("Distortion_Correction_Post_Processor execute() begin");
843+
Teuchos::RCP<DICe::MultiField> subset_x = mesh_->get_field(DICe::field_enums::SUBSET_COORDINATES_X_FS);
844+
Teuchos::RCP<DICe::MultiField> subset_y = mesh_->get_field(DICe::field_enums::SUBSET_COORDINATES_Y_FS);
845+
Teuchos::RCP<DICe::MultiField> subset_u = mesh_->get_field(DICe::field_enums::SUBSET_DISPLACEMENT_X_FS);
846+
Teuchos::RCP<DICe::MultiField> subset_v = mesh_->get_field(DICe::field_enums::SUBSET_DISPLACEMENT_Y_FS);
847+
Teuchos::RCP<DICe::MultiField> subset_x_prime = mesh_->get_field(DICe::field_enums::DIST_CORRECTED_SUBSET_X_FS);
848+
Teuchos::RCP<DICe::MultiField> subset_y_prime = mesh_->get_field(DICe::field_enums::DIST_CORRECTED_SUBSET_Y_FS);
849+
Teuchos::RCP<DICe::MultiField> subset_u_prime = mesh_->get_field(DICe::field_enums::DIST_CORRECTED_SUBSET_DISP_X_FS);
850+
Teuchos::RCP<DICe::MultiField> subset_v_prime = mesh_->get_field(DICe::field_enums::DIST_CORRECTED_SUBSET_DISP_Y_FS);
851+
852+
std::vector<cv::Point2f> undist_points;
853+
std::vector<cv::Point2f> undist_def_points;
854+
const int_t num_subsets = mesh_->get_scalar_node_overlap_map()->get_num_local_elements();
855+
std::vector<cv::Point2f> dist_points(num_subsets);
856+
std::vector<cv::Point2f> dist_def_points(num_subsets);
857+
for(int_t i=0;i<num_subsets;++i){
858+
dist_points[i] = cv::Point2f(subset_x->local_value(i),subset_y->local_value(i));
859+
dist_def_points[i] = cv::Point2f(subset_x->local_value(i)+subset_u->local_value(i),subset_y->local_value(i)+subset_v->local_value(i));
860+
}
861+
cv::Mat M = tri_->camera_matrix(0);
862+
cv::Mat D = tri_->distortion_matrix(0);
863+
cv::Mat M_prime = cv::Mat::zeros(3,4,CV_64F);
864+
M.copyTo(M_prime(cv::Rect(0,0,3,3)));
865+
cv::undistortPoints(dist_points,undist_points,M,D,cv::Mat(),M_prime);
866+
cv::undistortPoints(dist_def_points,undist_def_points,M,D,cv::Mat(),M_prime);
867+
868+
for(int_t i=0;i<num_subsets;++i){
869+
subset_x_prime->local_value(i) = undist_points[i].x;
870+
subset_y_prime->local_value(i) = undist_points[i].y;
871+
subset_u_prime->local_value(i) = undist_def_points[i].x - undist_points[i].x;
872+
subset_v_prime->local_value(i) = undist_def_points[i].y - undist_points[i].y;
873+
}
874+
DEBUG_MSG("Distortion_Correction_Post_Processor execute() end");
875+
}
825876

826877
VSG_Strain_Post_Processor::VSG_Strain_Post_Processor(const Teuchos::RCP<Teuchos::ParameterList> & params) :
827878
Post_Processor(post_process_vsg_strain){

src/core/DICe_PostProcessor.h

Lines changed: 47 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
#include <DICe.h>
4646
#include <DICe_Mesh.h>
4747
#include <DICe_PointCloud.h>
48+
#include <DICe_Triangulation.h>
4849

4950
#include <Teuchos_ParameterList.hpp>
5051

@@ -82,17 +83,20 @@ const char * const post_process_live_plots = "post_process_live_plots";
8283
const char * const post_process_plotly_contour = "post_process_plotly_contour";
8384
/// String parameter name
8485
const char * const plotly_contour_grid_step = "plotly_contour_grid_step";
86+
/// String parameter name
87+
const char * const post_process_distortion_correction = "post_process_distortion_correction";
8588

8689

8790
/// Number of post processor options
88-
const int_t num_valid_post_processor_params = 5;
91+
const int_t num_valid_post_processor_params = 6;
8992
/// Set of all the valid post processors
9093
const char * const valid_post_processor_params[num_valid_post_processor_params] = {
9194
post_process_vsg_strain,
9295
post_process_nlvc_strain,
9396
post_process_plotly_contour,
9497
post_process_altitude,
95-
post_process_crack_locator
98+
post_process_crack_locator,
99+
post_process_distortion_correction
96100
};
97101

98102
/// String field name
@@ -213,7 +217,7 @@ Post_Processor{
213217
};
214218

215219
/// \class DICe::VSG_Strain_Post_Processor
216-
/// \brief A specific instance of post processor that computes vurtual strain gauge (VSG) strain
220+
/// \brief A specific instance of post processor that computes virtual strain gauge (VSG) strain
217221
///
218222
/// The VSG strain is computed by doing a least-squares fit of the data and computing the
219223
/// strain using the coefficients of the fitted polynomial. It is well know that for large
@@ -259,6 +263,46 @@ VSG_Strain_Post_Processor : public Post_Processor {
259263
int_t window_size_;
260264
};
261265

266+
/// \class DICe::Distortion_Correction_Post_Processor
267+
/// \brief A specific instance of post processor that corrects the subset displacements for image distortions
268+
///
269+
/// This post processor corrects the subset displacement values for lens distortions and outputs the new corrected
270+
/// displacement field in a new field called DIST_CORRECTED_SUBSET_DISP_X and ..._Y
271+
class DICE_LIB_DLL_EXPORT
272+
Distortion_Correction_Post_Processor : public Post_Processor {
273+
274+
public:
275+
276+
/// Default constructor
277+
/// \param params Pointer to the set of parameters for this post processor
278+
Distortion_Correction_Post_Processor(const Teuchos::RCP<Teuchos::ParameterList> & params);
279+
280+
/// Virtual destructor
281+
virtual ~Distortion_Correction_Post_Processor(){}
282+
283+
/// See base clase docutmentation
284+
virtual int_t strain_window_size(){return -1.0;}
285+
286+
/// See base clase docutmentation
287+
virtual void set_params(const Teuchos::RCP<Teuchos::ParameterList> & params){}
288+
289+
/// Collect the neighborhoods of each of the points
290+
virtual void pre_execution_tasks(){};
291+
292+
/// Execute the post processor
293+
virtual void execute(Teuchos::RCP<Image> ref_img, Teuchos::RCP<Image> def_img);
294+
295+
/// See base class documentation
296+
using Post_Processor::field_specs;
297+
298+
protected:
299+
300+
/// Triangulation to use for correcting displacements
301+
Teuchos::RCP<DICe::Triangulation> tri_;
302+
303+
304+
};
305+
262306
/// \class DICe::NLVC_Strain_Post_Processor
263307
/// \brief A specific instance of post processor that computes Nonlocal Vector Calculus (NLVC) strains
264308
///

src/core/DICe_Schema.cpp

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -79,22 +79,22 @@ Schema::Schema(const std::string & input_file_name,
7979
const std::string & params_file_name){
8080
// create a parameter list from the selected file
8181
Teuchos::RCP<Teuchos::ParameterList> corr_params = read_correlation_params(params_file_name);
82-
default_constructor_tasks(corr_params);
8382
// create a parameter list from the selected file
8483
Teuchos::RCP<Teuchos::ParameterList> input_params = read_input_params(input_file_name);
84+
default_constructor_tasks(corr_params,input_params);
8585
initialize(input_params,corr_params);
8686
}
8787

8888
Schema::Schema(const Teuchos::RCP<Teuchos::ParameterList> & input_params,
8989
const Teuchos::RCP<Teuchos::ParameterList> & correlation_params){
90-
default_constructor_tasks(correlation_params);
90+
default_constructor_tasks(correlation_params,input_params);
9191
initialize(input_params,correlation_params);
9292
}
9393

9494
Schema::Schema(const Teuchos::RCP<Teuchos::ParameterList> & input_params,
9595
const Teuchos::RCP<Teuchos::ParameterList> & correlation_params,
9696
const Teuchos::RCP<Schema> & schema){
97-
default_constructor_tasks(correlation_params);
97+
default_constructor_tasks(correlation_params,input_params);
9898
initialize(input_params,schema);
9999
}
100100

@@ -445,7 +445,8 @@ Schema::set_ref_image(Teuchos::RCP<Image> img){
445445
}
446446

447447
void
448-
Schema::default_constructor_tasks(const Teuchos::RCP<Teuchos::ParameterList> & params){
448+
Schema::default_constructor_tasks(const Teuchos::RCP<Teuchos::ParameterList> & corr_params,
449+
const Teuchos::RCP<Teuchos::ParameterList> & input_params){
449450
global_num_subsets_ = 0;
450451
local_num_subsets_ = 0;
451452
subset_dim_ = -1;
@@ -462,8 +463,15 @@ Schema::default_constructor_tasks(const Teuchos::RCP<Teuchos::ParameterList> & p
462463
normalize_gamma_with_active_pixels_ = false;
463464
gauss_filter_images_ = false;
464465
gauss_filter_mask_size_ = 7;
465-
init_params_ = params==Teuchos::null ? Teuchos::rcp(new Teuchos::ParameterList()):
466-
Teuchos::rcp(new Teuchos::ParameterList(*params));
466+
init_params_ = corr_params==Teuchos::null ? Teuchos::rcp(new Teuchos::ParameterList()):
467+
Teuchos::rcp(new Teuchos::ParameterList(*corr_params));
468+
if(input_params!=Teuchos::null){
469+
// copy over the camera system file to so both the input and correlation params have it
470+
// could be needed by the post processors
471+
if(input_params->isParameter(DICe::camera_system_file)){
472+
init_params_->set(DICe::camera_system_file,input_params->get<std::string>(DICe::camera_system_file));
473+
}
474+
}
467475
comm_ = Teuchos::rcp(new MultiField_Comm());
468476
path_file_names_ = Teuchos::rcp(new std::map<int_t,std::string>());
469477
optical_flow_flags_ = Teuchos::rcp(new std::map<int_t,bool>());
@@ -478,7 +486,7 @@ Schema::default_constructor_tasks(const Teuchos::RCP<Teuchos::ParameterList> & p
478486
read_full_images_ = false;
479487
sort_txt_output_ = false;
480488
threshold_block_size_ = -1;
481-
set_params(params);
489+
set_params(corr_params);
482490
prev_imgs_.push_back(Teuchos::null);
483491
def_imgs_.push_back(Teuchos::null);
484492
has_extents_ = false;
@@ -771,6 +779,13 @@ Schema::set_params(const Teuchos::RCP<Teuchos::ParameterList> & params){
771779
Teuchos::RCP<VSG_Strain_Post_Processor> vsg_ptr = Teuchos::rcp (new VSG_Strain_Post_Processor(ppParams));
772780
post_processors_.push_back(vsg_ptr);
773781
}
782+
if(diceParams->isParameter(DICe::post_process_distortion_correction)){
783+
Teuchos::RCP<Teuchos::ParameterList> ppParams = Teuchos::rcp( new Teuchos::ParameterList());
784+
TEUCHOS_TEST_FOR_EXCEPTION(!init_params_->isParameter(camera_system_file),std::runtime_error,"Error, Distortion Correction Post Processor requires a camera system file");
785+
ppParams->set<std::string>(camera_system_file,init_params_->get<std::string>(camera_system_file));
786+
Teuchos::RCP<Distortion_Correction_Post_Processor> dc_ptr = Teuchos::rcp (new Distortion_Correction_Post_Processor(ppParams));
787+
post_processors_.push_back(dc_ptr);
788+
}
774789
if(diceParams->isParameter(DICe::post_process_plotly_contour)){
775790
Teuchos::ParameterList sublist = diceParams->sublist(DICe::post_process_plotly_contour);
776791
Teuchos::RCP<Teuchos::ParameterList> ppParams = Teuchos::rcp( new Teuchos::ParameterList());
@@ -977,10 +992,6 @@ Schema::initialize(const Teuchos::RCP<Teuchos::ParameterList> & input_params,
977992
const std::string output_prefix = input_params->get<std::string>(DICe::output_prefix,"DICe_solution");
978993
init_params_->set(DICe::output_prefix,output_prefix);
979994
init_params_->set(DICe::output_folder,output_folder);
980-
if(input_params->isParameter(DICe::camera_system_file)){
981-
const std::string camera_sys_file = input_params->get<std::string>(DICe::camera_system_file);
982-
init_params_->set(DICe::camera_system_file,camera_sys_file);
983-
}
984995

985996
if(analysis_type_==GLOBAL_DIC){
986997
// create the computational mesh:

src/core/DICe_Schema.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1152,7 +1152,8 @@ Schema {
11521152

11531153
/// \brief Sets the default values for the schema's member data and other initialization tasks
11541154
/// \param params Optional correlation parameters
1155-
void default_constructor_tasks(const Teuchos::RCP<Teuchos::ParameterList> & params);
1155+
void default_constructor_tasks(const Teuchos::RCP<Teuchos::ParameterList> & corr_params,
1156+
const Teuchos::RCP<Teuchos::ParameterList> & input_params=Teuchos::null);
11561157

11571158
/// \brief Create an exodus mesh for output
11581159
/// \param decomp pointer to a decomposition

src/core/DICe_Triangulation.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,12 @@ Triangulation::load_calibration_parameters(const std::string & param_file_name){
271271
DEBUG_MSG("Triangulation::load_calibration_parameters(): Parsing calibration parameters from file: " << param_file_name);
272272

273273
camera_system_ = Teuchos::rcp(new Camera_System(param_file_name));
274+
275+
// set the camera intrinsic parameters
276+
for(size_t i=0;i<camera_system_->num_cameras();++i)
277+
for(size_t j=0;j<Camera::MAX_CAM_INTRINSIC_PARAM;++j)
278+
cal_intrinsics_[i][j] = (*camera_system_->camera(i)->intrinsics())[j];
279+
274280
if(camera_system_->num_cameras()==1) return;
275281

276282
TEUCHOS_TEST_FOR_EXCEPTION(camera_system_->num_cameras()!=2,std::runtime_error,"");
@@ -296,11 +302,6 @@ Triangulation::load_calibration_parameters(const std::string & param_file_name){
296302
cam_0_to_cam_1_ = cam_0_to_cam_1_ * cam_0_to_world_;
297303
}
298304

299-
// set the camera intrinsic parameters
300-
for(size_t i=0;i<camera_system_->num_cameras();++i)
301-
for(size_t j=0;j<Camera::MAX_CAM_INTRINSIC_PARAM;++j)
302-
cal_intrinsics_[i][j] = (*camera_system_->camera(i)->intrinsics())[j];
303-
304305
#ifdef DICE_DEBUG_MSG
305306
std::cout << *camera_system_.get() << std::endl;
306307
#endif

tests/regression/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ SET(REGRESSION_TESTS
1515
simple_tracking
1616
reset_lost_subsets
1717
epipolar_distortion
18+
distortion_correction_pp
1819
)
1920
IF(NOT UNIX)
2021
SET(REGRESSION_TESTS
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<ParameterList>
2+
<Parameter name="xml_file_format" type="string" value="DICe_xml_camera_system_file" />
3+
<Parameter name="system_type_3D" type="string" value="OPENCV" />
4+
<ParameterList name="CAMERA 0">
5+
<Parameter name="CAMERA_ID" type="string" value="left" />
6+
<Parameter name="CX" type="double" value="959.5" />
7+
<Parameter name="CY" type="double" value="539.5" />
8+
<Parameter name="FX" type="double" value="2666.6666666666667" />
9+
<Parameter name="FY" type="double" value="2666.6666666666667" />
10+
<Parameter name="FS" type="double" value="0.0" />
11+
<Parameter name="TX" type="double" value="0.0" />
12+
<Parameter name="TY" type="double" value="0.0" />
13+
<Parameter name="TZ" type="double" value="15.0" />
14+
<Parameter name="K1" type="double" value="-2.361956054191e-01" />
15+
<Parameter name="K2" type="double" value="-9.858048851165e-02" />
16+
<Parameter name="K3" type="double" value="-3.652319258538e-01" />
17+
<Parameter name="LENS_DISTORTION_MODEL" type="string" value="OPENCV_LENS_DISTORTION" />
18+
<Parameter name="IMAGE_HEIGHT_WIDTH" type="string" value="{ 1080, 1920 }" />
19+
</ParameterList>
20+
</ParameterList>

0 commit comments

Comments
 (0)