}
else
{
- nth_element(all_focals.begin(), all_focals.end(), all_focals.begin() + all_focals.size()/2);
+ nth_element(all_focals.begin(), all_focals.begin() + all_focals.size()/2, all_focals.end());
for (int i = 0; i < num_images; ++i)
focals[i] = all_focals[all_focals.size()/2];
}
const vector<Mat> &masks)\r
{\r
const int num_images = static_cast<int>(images.size());\r
- Mat_<double> N(num_images, num_images); N.setTo(0);\r
+ Mat_<int> N(num_images, num_images); N.setTo(0);\r
Mat_<double> I(num_images, num_images); I.setTo(0);\r
\r
Rect dst_roi = resultRoi(corners, images);\r
}\r
}\r
}\r
- I(i, j) = Isum1 / N(i, j);\r
- I(j, i) = Isum2 / N(i, j);\r
+ I(i, j) = Isum1 / max(N(i, j), 1);\r
+ I(j, i) = Isum2 / max(N(i, j), 1);\r
}\r
}\r
}\r
vector<Mat> img_subset;\r
vector<string> img_names_subset;\r
for (size_t i = 0; i < indices.size(); ++i)\r
+ {\r
img_names_subset.push_back(img_names[indices[i]]);\r
+ img_subset.push_back(images[indices[i]]);\r
+ }\r
+\r
img_names = img_names_subset;\r
+ images = img_subset;\r
\r
// Check if we still have enough images\r
num_images = static_cast<int>(img_names.size());\r
LOGLN("Camera #" << i << " focal length: " << cameras[i].focal);\r
focals.push_back(cameras[i].focal);\r
}\r
- nth_element(focals.begin(), focals.end(), focals.begin() + focals.size() / 2);\r
+ nth_element(focals.begin(), focals.begin() + focals.size()/2, focals.end());\r
float warped_image_scale = static_cast<float>(focals[focals.size() / 2]);\r
\r
LOGLN("Warping images (auxiliary)... ");\r
// Leave k-nearest images
int k = min(4, num_images);
- nth_element(dists.begin(), dists.end(), dists.begin() + k);
+ 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;
for (int i = 0; i < num_images - 1; ++i)
for (int j = i + 1; j < num_images; ++j)
- if (is_near(i, j))
+ if (is_near(i, j) || is_near(j, i))
near_pairs.push_back(make_pair(i, j));
pairwise_matches.resize(num_images * num_images);