Depth calibration: move GetBinSize to clams namespace

This commit is contained in:
Anton Onishchenko
2017-05-11 11:38:42 +03:00
parent df40b0b8d3
commit 197bb2179f
5 changed files with 62 additions and 60 deletions

View File

@@ -66,6 +66,16 @@ namespace clams
class RTABMAP_EXP DiscreteDepthDistortionModel class RTABMAP_EXP DiscreteDepthDistortionModel
{ {
public:
// returns all divisors of num
static std::set<size_t> getDivisors(const size_t &num);
// returns divisor from divisors closest to ref
static size_t getClosestToRef(const std::set<size_t> &divisors, const double &ref);
// sets bin_width and bin_height to appropriate values
static void getBinSize(const size_t &width, const size_t &height, size_t &bin_width, size_t &bin_height);
public: public:
DiscreteDepthDistortionModel() : DiscreteDepthDistortionModel() :
width_(0), width_(0),

View File

@@ -319,15 +319,6 @@ pcl::PointCloud<pcl::PointXYZ>::Ptr RTABMAP_EXP loadCloud(
int downsampleStep = 1, int downsampleStep = 1,
float voxelSize = 0.0f); float voxelSize = 0.0f);
// returns all divisors of num
std::set<size_t> get_divisors(const size_t &num);
// returns divisor from divisors closest to ref
size_t GetClosestToRef(const std::set<size_t> &divisors, const double &ref);
// sets bin_width and bin_height to appropriate values
void GetBinSize(const size_t &width, const size_t &height, size_t &bin_width, size_t &bin_height);
} // namespace util3d } // namespace util3d
} // namespace rtabmap } // namespace rtabmap

View File

@@ -153,6 +153,57 @@ namespace clams
UDEBUG("Frustum: multipliers=%d", multipliers_.rows()); UDEBUG("Frustum: multipliers=%d", multipliers_.rows());
} }
std::set<size_t> DiscreteDepthDistortionModel::getDivisors(const size_t &num)
{
std::set<size_t> divisors;
for(size_t i = 1; i <= num; i++)
{
if(num % i == 0)
{
divisors.insert(i);
}
}
return divisors;
}
size_t DiscreteDepthDistortionModel::getClosestToRef(const std::set<size_t> &divisors, const double &ref)
{
std::set<size_t>::iterator low, prev;
low = divisors.lower_bound(ref);
if(low == divisors.end())
{
return *(--divisors.end());
}
else if(low == divisors.begin())
{
return *low;
}
else
{
prev = low;
--prev;
if((ref - *prev) <= (*low - ref))
{
return *prev;
}
else
{
return *low;
}
}
}
void DiscreteDepthDistortionModel::getBinSize(const size_t &width, const size_t &height, size_t &bin_width, size_t &bin_height) {
double ratio = width / static_cast<double>(height);
std::set<size_t> divisors = getDivisors(width);
double ref_bin_width = 8;
bin_width = getClosestToRef(divisors, ref_bin_width);
divisors = getDivisors(height);
double ref_bin_height = ref_bin_width / ratio;
bin_height = getClosestToRef(divisors, ref_bin_height);
}
DiscreteDepthDistortionModel::DiscreteDepthDistortionModel(const DiscreteDepthDistortionModel& other) DiscreteDepthDistortionModel::DiscreteDepthDistortionModel(const DiscreteDepthDistortionModel& other)
{ {
*this = other; *this = other;

View File

@@ -2275,56 +2275,6 @@ pcl::PointCloud<pcl::PointXYZ>::Ptr loadCloud(
return util3d::transformPointCloud(cloud, transform); return util3d::transformPointCloud(cloud, transform);
} }
std::set<size_t> get_divisors(const size_t &num)
{
std::set<size_t> divisors;
for(size_t i = 1; i <= num; i++)
{
if(num % i == 0)
{
divisors.insert(i);
}
}
return divisors;
}
size_t GetClosestToRef(const std::set<size_t> &divisors, const double &ref)
{
std::set<size_t>::iterator low, prev;
low = divisors.lower_bound(ref);
if(low == divisors.end())
{
return *(--divisors.end());
}
else if(low == divisors.begin())
{
return *low;
}
else
{
prev = low;
--prev;
if((ref - *prev) <= (*low - ref))
{
return *prev;
}
else
{
return *low;
}
}
}
void GetBinSize(const size_t &width, const size_t &height, size_t &bin_width, size_t &bin_height) {
double ratio = width / static_cast<double>(height);
std::set<size_t> divisors = get_divisors(width);
double ref_bin_width = 8;
bin_width = GetClosestToRef(divisors, ref_bin_width);
divisors = get_divisors(height);
double ref_bin_height = ref_bin_width / ratio;
bin_height = GetClosestToRef(divisors, ref_bin_height);
}
} }
} }

View File

@@ -392,7 +392,7 @@ void DepthCalibrationDialog::calibrate(
if(_model == 0) if(_model == 0)
{ {
size_t bin_width, bin_height; size_t bin_width, bin_height;
util3d::GetBinSize(imageSize.width, imageSize.height, bin_width, bin_height); clams::DiscreteDepthDistortionModel::getBinSize(imageSize.width, imageSize.height, bin_width, bin_height);
_model = new clams::DiscreteDepthDistortionModel(imageSize.width, imageSize.height, bin_width, bin_height); _model = new clams::DiscreteDepthDistortionModel(imageSize.width, imageSize.height, bin_width, bin_height);
} }
UASSERT(_model->getWidth() == imageSize.width && _model->getHeight() == imageSize.height); UASSERT(_model->getWidth() == imageSize.width && _model->getHeight() == imageSize.height);