AngularMetric.hpp
00001 //
00002 // Angular Metric Tool for SAL3D.
00003 // Copyright 2008-2010 AQSENSE, S.L.
00004 //
00005 #if !defined (AQSENSE_SAL3DPP_ANGULAR_METRIC_HPP)
00006 #define AQSENSE_SAL3DPP_ANGULAR_METRIC_HPP
00007 
00008 #if defined (_MSC_VER) && (_MSC_VER >= 1020)
00009 #pragma once
00010 #endif
00011 
00012 #include <limits>
00013 #include <string>
00014 #include <cassert>
00015 #include <cstddef>
00016 #include <stdexcept>
00017 #include <sal3dpp/RangeMap.hpp>
00018 #include <sal3dpp/AngularMetricConfig.hpp>
00019 #include <sal3d/angularmetric.h>
00020 
00021 namespace sal3d
00022 {
00023     namespace AngularMetric
00024     {
00066         inline Config
00067         calibrate (const RangeMap &rangeMap,
00068                 const Metric::PatternSPPoints &points, float initialAngle,
00069                 float angleStep, int left, int top, int right, int bottom,
00070                 const LensDistortion::Model &dm, int filterlen = 1)
00071         {
00072             sal3d_angular_metric_config config;
00073             Error e;
00074             sal3d_angular_metric_calibrate_range_map_cropped (
00075                     rangeMap.c_range_map (), points, initialAngle,
00076                     angleStep, &dm.c_lens_distortion(), left, top, right,
00077                     bottom, filterlen, &config, &e.e);
00078 
00079             if (e.e.value < 0)
00080                 throw e;
00081 
00082             return Config(config);
00083         }
00084 
00118         inline Config
00119         calibrate (const RangeMap &rangeMap, const Metric::PatternSPPoints &points,
00120                 float initialAngle, float angleStep,
00121                 const LensDistortion::Model &dm, int filterlen = 1)
00122         {
00123             sal3d_angular_metric_config config;
00124             Error e;
00125             sal3d_angular_metric_calibrate_range_map_cropped (
00126                     rangeMap.c_range_map (), points, initialAngle,
00127                     angleStep, &dm.c_lens_distortion(), 0, 0,
00128                     rangeMap.profilesLength()-1,
00129                     rangeMap.countProfiles()-1, filterlen, &config,
00130                     &e.e);
00131 
00132             if (e.e.value < 0)
00133                 throw e;
00134 
00135             return Config(config);
00136         }
00137 
00167         inline Config
00168         calibrate (const RangeMap &rangeMap, const Metric::PatternSPPoints &points,
00169                 float initialAngle, float angleStep, int filterlen = 1)
00170         {
00171             LensDistortion::Model dm;
00172             return calibrate(rangeMap, points, initialAngle, angleStep, dm,
00173                     filterlen);
00174         }
00175     }
00176 }
00177 
00178 #endif // !AQSENSE_SAL3DPP_ANGULAR_METRIC_HPP