mirror of
https://github.com/introlab/rtabmap.git
synced 2026-09-02 01:20:25 +08:00
Depth calibration: move GetBinSize to clams namespace
This commit is contained in:
@@ -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),
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user