37#ifndef VIGRA_COMBINEIMAGES_HXX
38#define VIGRA_COMBINEIMAGES_HXX
41#include "numerictraits.hxx"
42#include "functortraits.hxx"
43#include "multi_shape.hxx"
62template <
class SrcIterator1,
class SrcAccessor1,
63 class SrcIterator2,
class SrcAccessor2,
64 class DestIterator,
class DestAccessor,
class Functor>
66combineTwoLines(SrcIterator1 s1,
67 SrcIterator1 s1end, SrcAccessor1 src1,
68 SrcIterator2 s2, SrcAccessor2 src2,
69 DestIterator d, DestAccessor dest,
72 for(; s1 != s1end; ++s1, ++s2, ++d)
73 dest.set(f(src1(s1), src2(s2)), d);
76template <
class SrcIterator1,
class SrcAccessor1,
77 class SrcIterator2,
class SrcAccessor2,
78 class MaskIterator,
class MaskAccessor,
79 class DestIterator,
class DestAccessor,
class Functor>
81combineTwoLinesIf(SrcIterator1 s1,
82 SrcIterator1 s1end, SrcAccessor1 src1,
83 SrcIterator2 s2, SrcAccessor2 src2,
84 MaskIterator m, MaskAccessor mask,
85 DestIterator d, DestAccessor dest,
88 for(; s1 != s1end; ++s1, ++s2, ++m, ++d)
90 dest.set(f(src1(s1), src2(s2)), d);
93template <
class SrcIterator1,
class SrcAccessor1,
94 class SrcIterator2,
class SrcAccessor2,
95 class SrcIterator3,
class SrcAccessor3,
96 class DestIterator,
class DestAccessor,
class Functor>
98combineThreeLines(SrcIterator1 s1,
99 SrcIterator1 s1end, SrcAccessor1 src1,
100 SrcIterator2 s2, SrcAccessor2 src2,
101 SrcIterator3 s3, SrcAccessor3 src3,
102 DestIterator d, DestAccessor dest,
105 for(; s1 != s1end; ++s1, ++s2, ++s3, ++d)
106 dest.set(f(src1(s1), src2(s2), src3(s3)), d);
254template <
class SrcImageIterator1,
class SrcAccessor1,
255 class SrcImageIterator2,
class SrcAccessor2,
256 class DestImageIterator,
class DestAccessor,
260combineTwoImages(triple<SrcImageIterator1, SrcImageIterator1, SrcAccessor1> src1,
261 pair<SrcImageIterator2, SrcAccessor2> src2,
262 pair<DestImageIterator, DestAccessor> dest,
266 src2.first, src2.second,
267 dest.first, dest.second, f);
270template <
class T11,
class S11,
271 class T12,
class S12,
276 MultiArrayView<2, T12, S12>
const & src2,
277 MultiArrayView<2, T2, S2> dest,
280 vigra_precondition(src1.shape() == src2.shape() && src1.shape() == dest.shape(),
281 "combineTwoImages(): shape mismatch between inputs and/or output.");
442 mask_upperleft.rowIterator(), ma,
447template <
class SrcImageIterator1,
class SrcAccessor1,
448 class SrcImageIterator2,
class SrcAccessor2,
449 class MaskImageIterator,
class MaskAccessor,
450 class DestImageIterator,
class DestAccessor,
455 pair<SrcImageIterator2, SrcAccessor2> src2,
456 pair<MaskImageIterator, MaskAccessor> mask,
457 pair<DestImageIterator, DestAccessor> dest,
461 src2.first, src2.second,
462 mask.first, mask.second,
463 dest.first, dest.second, f);
466template <
class T11,
class S11,
467 class T12,
class S12,
473 MultiArrayView<2, T12, S12>
const & src2,
474 MultiArrayView<2, TM, SM>
const & mask,
475 MultiArrayView<2, T2, S2> dest,
478 vigra_precondition(src1.shape() == src2.shape() && src1.shape() == mask.shape() && src1.shape() == dest.shape(),
479 "combineTwoImagesIf(): shape mismatch between inputs and/or output.");
647template <
class SrcImageIterator1,
class SrcAccessor1,
648 class SrcImageIterator2,
class SrcAccessor2,
649 class SrcImageIterator3,
class SrcAccessor3,
650 class DestImageIterator,
class DestAccessor,
655 pair<SrcImageIterator2, SrcAccessor2> src2,
656 pair<SrcImageIterator3, SrcAccessor3> src3,
657 pair<DestImageIterator, DestAccessor> dest,
661 src2.first, src2.second,
662 src3.first, src3.second,
663 dest.first, dest.second, f);
666template <
class T11,
class S11,
667 class T12,
class S12,
668 class T13,
class S13,
673 MultiArrayView<2, T12, S12>
const & src2,
674 MultiArrayView<2, T13, S13>
const & src3,
675 MultiArrayView<2, T2, S2> dest,
678 vigra_precondition(src1.shape() == src2.shape() && src1.shape() == src3.shape() && src1.shape() == dest.shape(),
679 "combineThreeImages(): shape mismatch between inputs and/or output.");
711template <
class ValueType>
741class FunctorTraits<MagnitudeFunctor<T> >
742:
public FunctorTraitsBase<MagnitudeFunctor<T> >
745 typedef VigraTrueType isBinaryFunctor;
762template <
class ValueType>
776 typedef typename NumericTraits<ValueType>::RealPromote
result_type;
803class FunctorTraits<RGBGradientMagnitudeFunctor<T> >
804:
public FunctorTraitsBase<RGBGradientMagnitudeFunctor<T> >
807 typedef VigraTrueType isBinaryFunctor;
Definition combineimages.hxx:713
ValueType first_argument_type
Definition combineimages.hxx:717
ValueType second_argument_type
Definition combineimages.hxx:721
result_type operator()(first_argument_type const &v1, second_argument_type const &v2) const
Definition combineimages.hxx:734
SquareRootTraits< typenameNormTraits< ValueType >::SquaredNormType >::SquareRootResult result_type
Definition combineimages.hxx:725
ValueType value_type
Definition combineimages.hxx:729
Definition combineimages.hxx:764
result_type operator()(first_argument_type const &gx, second_argument_type const &gy) const
Definition combineimages.hxx:794
ValueType value_type
Definition combineimages.hxx:780
RGBValue< ValueType > first_argument_type
Definition combineimages.hxx:768
NumericTraits< ValueType >::RealPromote result_type
Definition combineimages.hxx:776
RGBValue< ValueType > second_argument_type
Definition combineimages.hxx:772
Class for a single RGB value.
Definition rgbvalue.hxx:128
value_type & red()
Definition rgbvalue.hxx:278
value_type & blue()
Definition rgbvalue.hxx:286
value_type & green()
Definition rgbvalue.hxx:282
void combineTwoImages(...)
Combine two source images into destination image.
void combineThreeImages(...)
Combine three source images into destination image.
FFTWComplex< R >::SquaredNormType squaredNorm(const FFTWComplex< R > &a)
squared norm (= squared magnitude)
Definition fftw3.hxx:1044
void combineTwoImagesIf(...)
Combine ROI of two source images into destination image.