void MergeGroup::addImage(view_type const& image) { if (image.width() != width_ || image.height() != height_) { throw std::invalid_argument("Dimensions of image passed in differ to others in the sequence."); } if (pyramids_.size() == groupSize_) { throw std::invalid_argument("Group already contains enough images to fuse. Cannot add another."); } // TODO: do quality mask here, then create pyramid from Pending image // which image in the group is this size_t imageNum = pyramids_.size(); // create subviews from arena for a single pyramid std::vector< view_type > subviews; for (auto& fuseView : fuseViews_) { subviews.push_back(fuseView[imageNum]); } // transfer input image into first level of pyramid std::copy(image.begin(), image.end(), subviews.front().begin()); std::cout << "========================\n" "Creating Pyramid.\n" "========================" << std::endl; ImagePyramid pyramid(context_, std::move(subviews), [=](Pending2DImage const& im) { return createPyramidLevel(im, program_); }); pyramids_.push_back(std::move(pyramid)); }