Added createWightMaps function into FeatherBlender (stitching)

This commit is contained in:
Alexey Spizhevoy
2011-10-03 09:44:30 +00:00
parent 923f771cfc
commit 74561c5b8e
2 changed files with 37 additions and 0 deletions

View File

@@ -155,6 +155,37 @@ void FeatherBlender::blend(Mat &dst, Mat &dst_mask)
}
Rect FeatherBlender::createWeightMaps(const vector<Mat> &masks, const vector<Point> &corners,
vector<Mat> &weight_maps)
{
weight_maps.resize(masks.size());
for (size_t i = 0; i < masks.size(); ++i)
createWeightMap(masks[i], sharpness_, weight_maps[i]);
Rect dst_roi = resultRoi(corners, masks);
Mat weights_sum(dst_roi.size(), CV_32F);
weights_sum.setTo(0);
for (size_t i = 0; i < weight_maps.size(); ++i)
{
Rect roi(corners[i].x - dst_roi.x, corners[i].y - dst_roi.y,
weight_maps[i].cols, weight_maps[i].rows);
weights_sum(roi) += weight_maps[i];
}
for (size_t i = 0; i < weight_maps.size(); ++i)
{
Rect roi(corners[i].x - dst_roi.x, corners[i].y - dst_roi.y,
weight_maps[i].cols, weight_maps[i].rows);
Mat tmp = weights_sum(roi);
tmp.setTo(1, tmp < numeric_limits<float>::epsilon());
divide(weight_maps[i], tmp, weight_maps[i]);
}
return dst_roi;
}
MultiBandBlender::MultiBandBlender(int try_gpu, int num_bands)
{
setNumBands(num_bands);