Fixed bug in ROI based features finder (stitching)

This commit is contained in:
Alexey Spizhevoy
2011-09-26 13:17:06 +00:00
parent b119833ad1
commit e99b090871
5 changed files with 98 additions and 8 deletions

View File

@@ -257,35 +257,37 @@ void FeaturesFinder::operator ()(const Mat &image, ImageFeatures &features)
// TODO add tests for this function
void FeaturesFinder::operator ()(const Mat &image, ImageFeatures &features, const vector<Rect> &rois)
{
vector<ImageFeatures> roi_features;
vector<ImageFeatures> roi_features(rois.size());
size_t total_kps_count = 0;
int total_descriptors_width = 0;
int total_descriptors_height = 0;
for (size_t i = 0; i < rois.size(); ++i)
{
find(image(rois[i]), roi_features[i]);
total_kps_count += roi_features[i].keypoints.size();
total_descriptors_width += roi_features[i].descriptors.cols;
total_descriptors_height += roi_features[i].descriptors.rows;
}
features.img_size = image.size();
features.keypoints.resize(total_kps_count);
features.descriptors.create(1, total_descriptors_width, roi_features[0].descriptors.type());
features.descriptors.create(total_descriptors_height,
roi_features[0].descriptors.cols,
roi_features[0].descriptors.type());
int kp_idx = 0;
int descr_offset = 0;
for (size_t i = 0; i < rois.size(); ++i)
{
for (size_t j = 0; j < features.keypoints.size(); ++j, ++kp_idx)
for (size_t j = 0; j < roi_features[i].keypoints.size(); ++j, ++kp_idx)
{
features.keypoints[kp_idx] = roi_features[i].keypoints[j];
features.keypoints[kp_idx].pt.x += (float)rois[i].x;
features.keypoints[kp_idx].pt.y += (float)rois[i].y;
}
Mat subdescr = features.descriptors.colRange(
descr_offset, descr_offset + roi_features[i].descriptors.cols);
Mat subdescr = features.descriptors.rowRange(
descr_offset, descr_offset + roi_features[i].descriptors.rows);
roi_features[i].descriptors.copyTo(subdescr);
descr_offset += roi_features[i].descriptors.cols;
descr_offset += roi_features[i].descriptors.rows;
}
}