153 vigra::BImage
labels(image2.size());
161 vigra::ArrayOfRegionStatistics<vigra::FindBoundingRectangle>
roi(3);
162 vigra::inspectTwoImages(vigra::srcIterRange<vigra::Diff2D>(vigra::Diff2D(0, 0),
labels.size()), vigra::srcImage(
labels),
roi);
168 vigra::copyImageIf(vigra::srcImageRange(image2), vigra::srcImage(
mask2), vigra::destImage(image1,
offsetPoint, image1.accessor()));
173 if (
roi.regions[2].size().area() == 0)
179 if (
roi.regions[1].size().area() == 0)
183 vigra::copyImageIf(vigra::srcImageRange(image2), vigra::srcImage(
mask2), vigra::destImage(image1,
offsetPoint, image1.accessor()));
188 const double smoothRadius = std::max(1.0, std::max(
roi.regions[3].size().width(),
roi.regions[3].size().height()) / 1000.0);
195 vigra::Point2D p1(
roi.regions[3].upperLeft);
204 vigra::Point2D p2(
roi.regions[3].lowerRight);
205 if (p2.x + 1 < image2.width())
209 if (p2.y + 1 < image2.height())
213 vigra::DImage
diff(p2 - p1);
220 diffMinMax.max = std::min<double>(
diffMinMax.max, 0.25f * vigra::NumericTraits<
typename vigra::NumericTraits<typename ImageType::PixelType>::ValueType>::max());
225 vigra::ArrayOfRegionStatistics<vigra::SeedRgDirectValueFunctor<vigra::UInt8> >
stats(3);
226 if (
wrap && (
roi.regions[3].size().width() == image1.width()))
244 vigra::fastSeededRegionGrowing(vigra::srcImageRange(
diffWrapped), vigra::destImage(
labelsWrapped, p1),
stats, vigra::CompleteGrow, vigra::FourNeighborCode(), 255);
258 vigra::fastSeededRegionGrowing(vigra::srcImageRange(
diffByte), vigra::destImage(
labels, p1),
stats, vigra::CompleteGrow, vigra::FourNeighborCode(), 255);
263 vigra::initImageIf(vigra::destImageRange(
mask1,
offsetRect), vigra::srcImage(
mask2), vigra::NumericTraits<typename MaskType::value_type>::max());
269 vigra::copyImageIf(vigra::srcImageRange(image2), vigra::srcImage(
labels), vigra::destImage(image1,
offsetPoint));
278 (
roi.regions[3].size().width() == image1.width()) ||
280 (
roi.regions[2].size().width() == image1.width())
void copyImageIf(SrcImageIterator src_upperleft, SrcImageIterator src_lowerright, SrcAccessor src_acc, MaskImageIterator mask_upperleft, MaskAccessor mask_acc, DestImageIterator dest_upperleft, DestAccessor dest_acc)
void combineTwoImages(SrcImageIterator1 src1_upperleft, SrcImageIterator1 src1_lowerright, SrcAccessor1 src1_acc, SrcImageIterator2 src2_upperleft, SrcAccessor2 src2_acc, DestImageIterator dest_upperleft, DestAccessor dest_acc, const Functor &func)
void Multigrid(Image &out, const Image &gradient, const vigra::ImagePyramid< SeamMask > &seamMaskPyramid, int minLen, const float errorThreshold, const int maxIter, const bool doWrap)
void BuildGradientMap(const Image &image1, const Image &image2, const Mask &mask2, const SeamMask &seam, GradientType &gradient, const vigra::Point2D &offset, const bool doWrap)
void MergeImages(ImageType &image1, MaskType &mask1, const ImageType &image2, const MaskType &mask2, const vigra::Diff2D offset, const bool wrap, const bool hardSeam)
std::vector< deghosting::BImagePtr > threshold(const std::vector< deghosting::FImagePtr > &inputImages, const double threshold, const uint16_t flags)
Threshold function used for creating alpha masks for images.