Commit ff13c9f8 authored by Vincent Rabaud's avatar Vincent Rabaud

- fix potential crash if the first scale level is not 0

parent 19900d98
...@@ -561,7 +561,7 @@ void ORB::operator()(const cv::Mat &image, const cv::Mat &mask, std::vector<cv:: ...@@ -561,7 +561,7 @@ void ORB::operator()(const cv::Mat &image, const cv::Mat &mask, std::vector<cv::
// Compute the resized image // Compute the resized image
if (level != params_.first_level_) if (level != params_.first_level_)
{ {
float scale = 1 / std::pow(params_.scale_factor_, float(level - params_.first_level_)); float scale = 1 / std::pow(params_.scale_factor_, float(level) - float(params_.first_level_));
cv::resize(image, image_pyramid[level], cv::Size(), scale, scale, cv::INTER_AREA); cv::resize(image, image_pyramid[level], cv::Size(), scale, scale, cv::INTER_AREA);
if (!mask.empty()) if (!mask.empty())
cv::resize(mask, mask_pyramid[level], cv::Size(), scale, scale, cv::INTER_AREA); cv::resize(mask, mask_pyramid[level], cv::Size(), scale, scale, cv::INTER_AREA);
...@@ -596,7 +596,7 @@ void ORB::operator()(const cv::Mat &image, const cv::Mat &mask, std::vector<cv:: ...@@ -596,7 +596,7 @@ void ORB::operator()(const cv::Mat &image, const cv::Mat &mask, std::vector<cv::
continue; continue;
std::vector<cv::KeyPoint> & keypoints = all_keypoints[level]; std::vector<cv::KeyPoint> & keypoints = all_keypoints[level];
float scale = 1.0f / std::pow(params_.scale_factor_, float(level - params_.first_level_)); float scale = 1.0f / std::pow(params_.scale_factor_, float(level) - float(params_.first_level_));
for (std::vector<cv::KeyPoint>::iterator keypoint = keypoints.begin(), keypoint_end = keypoints.end(); keypoint for (std::vector<cv::KeyPoint>::iterator keypoint = keypoints.begin(), keypoint_end = keypoints.end(); keypoint
!= keypoint_end; ++keypoint) != keypoint_end; ++keypoint)
keypoint->pt *= scale; keypoint->pt *= scale;
...@@ -628,7 +628,7 @@ void ORB::operator()(const cv::Mat &image, const cv::Mat &mask, std::vector<cv:: ...@@ -628,7 +628,7 @@ void ORB::operator()(const cv::Mat &image, const cv::Mat &mask, std::vector<cv::
// Copy to the output data // Copy to the output data
if (level != params_.first_level_) if (level != params_.first_level_)
{ {
float scale = std::pow(params_.scale_factor_, float(level - params_.first_level_)); float scale = std::pow(params_.scale_factor_, float(level) - float(params_.first_level_));
for (std::vector<cv::KeyPoint>::iterator keypoint = keypoints.begin(), keypoint_end = keypoints.end(); keypoint for (std::vector<cv::KeyPoint>::iterator keypoint = keypoints.begin(), keypoint_end = keypoints.end(); keypoint
!= keypoint_end; ++keypoint) != keypoint_end; ++keypoint)
keypoint->pt *= scale; keypoint->pt *= scale;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment