minor changes in opencv_stitching
This commit is contained in:
parent
c0ec0e05c5
commit
24e5ff7ab6
@ -316,6 +316,7 @@ int main(int argc, char* argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
finder(img, features[i]);
|
finder(img, features[i]);
|
||||||
|
features[i].img_idx = i;
|
||||||
LOGLN("Features in image #" << i << ": " << features[i].keypoints.size());
|
LOGLN("Features in image #" << i << ": " << features[i].keypoints.size());
|
||||||
|
|
||||||
resize(full_img, img, Size(), seam_scale, seam_scale);
|
resize(full_img, img, Size(), seam_scale, seam_scale);
|
||||||
@ -346,8 +347,8 @@ int main(int argc, char* argv[])
|
|||||||
img_subset.push_back(images[indices[i]]);
|
img_subset.push_back(images[indices[i]]);
|
||||||
}
|
}
|
||||||
|
|
||||||
img_names = img_names_subset;
|
|
||||||
images = img_subset;
|
images = img_subset;
|
||||||
|
img_names = img_names_subset;
|
||||||
|
|
||||||
// Check if we still have enough images
|
// Check if we still have enough images
|
||||||
num_images = static_cast<int>(img_names.size());
|
num_images = static_cast<int>(img_names.size());
|
||||||
|
@ -244,37 +244,10 @@ void FeaturesMatcher::operator ()(const vector<ImageFeatures> &features, vector<
|
|||||||
{
|
{
|
||||||
const int num_images = static_cast<int>(features.size());
|
const int num_images = static_cast<int>(features.size());
|
||||||
|
|
||||||
Mat_<uchar> is_near(num_images, num_images);
|
|
||||||
is_near.setTo(0);
|
|
||||||
|
|
||||||
// Find good image pairs
|
|
||||||
for (int i = 0; i < num_images; ++i)
|
|
||||||
{
|
|
||||||
vector<DistIdxPair> dists(num_images);
|
|
||||||
for (int j = 0; j < num_images; ++j)
|
|
||||||
{
|
|
||||||
dists[j].dist = 1 - compareHist(features[i].hist, features[j].hist, CV_COMP_INTERSECT)
|
|
||||||
/ min(features[i].img_size.area(), features[j].img_size.area());
|
|
||||||
dists[j].idx = j;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Leave near images
|
|
||||||
for (int j = 0; j < num_images; ++j)
|
|
||||||
if (dists[j].dist < 0.6)
|
|
||||||
is_near(i, dists[j].idx) = 1;
|
|
||||||
|
|
||||||
// Leave k-nearest images
|
|
||||||
int k = min(4, num_images);
|
|
||||||
nth_element(dists.begin(), dists.begin() + k, dists.end());
|
|
||||||
for (int j = 0; j < k; ++j)
|
|
||||||
is_near(i, dists[j].idx) = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
vector<pair<int,int> > near_pairs;
|
vector<pair<int,int> > near_pairs;
|
||||||
for (int i = 0; i < num_images - 1; ++i)
|
for (int i = 0; i < num_images - 1; ++i)
|
||||||
for (int j = i + 1; j < num_images; ++j)
|
for (int j = i + 1; j < num_images; ++j)
|
||||||
if (is_near(i, j) || is_near(j, i))
|
near_pairs.push_back(make_pair(i, j));
|
||||||
near_pairs.push_back(make_pair(i, j));
|
|
||||||
|
|
||||||
pairwise_matches.resize(num_images * num_images);
|
pairwise_matches.resize(num_images * num_images);
|
||||||
MatchPairsBody body(*this, features, pairwise_matches, near_pairs);
|
MatchPairsBody body(*this, features, pairwise_matches, near_pairs);
|
||||||
@ -312,8 +285,7 @@ namespace
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
float match_conf_;
|
float match_conf_;
|
||||||
GpuMat descriptors1_;
|
GpuMat descriptors1_, descriptors2_;
|
||||||
GpuMat descriptors2_;
|
|
||||||
GpuMat train_idx_, distance_, all_dist_;
|
GpuMat train_idx_, distance_, all_dist_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -46,6 +46,7 @@
|
|||||||
|
|
||||||
struct ImageFeatures
|
struct ImageFeatures
|
||||||
{
|
{
|
||||||
|
int img_idx;
|
||||||
cv::Size img_size;
|
cv::Size img_size;
|
||||||
cv::Mat hist;
|
cv::Mat hist;
|
||||||
std::vector<cv::KeyPoint> keypoints;
|
std::vector<cv::KeyPoint> keypoints;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user