37 #ifndef VIGRA_COMBINEIMAGES_HXX
38 #define VIGRA_COMBINEIMAGES_HXX
40 #include "utilities.hxx"
41 #include "numerictraits.hxx"
42 #include "functortraits.hxx"
60 template <
class SrcIterator1,
class SrcAccessor1,
61 class SrcIterator2,
class SrcAccessor2,
62 class DestIterator,
class DestAccessor,
class Functor>
64 combineTwoLines(SrcIterator1 s1,
65 SrcIterator1 s1end, SrcAccessor1 src1,
66 SrcIterator2 s2, SrcAccessor2 src2,
67 DestIterator d, DestAccessor dest,
70 for(; s1 != s1end; ++s1, ++s2, ++d)
71 dest.set(f(src1(s1), src2(s2)), d);
74 template <
class SrcIterator1,
class SrcAccessor1,
75 class SrcIterator2,
class SrcAccessor2,
76 class MaskIterator,
class MaskAccessor,
77 class DestIterator,
class DestAccessor,
class Functor>
79 combineTwoLinesIf(SrcIterator1 s1,
80 SrcIterator1 s1end, SrcAccessor1 src1,
81 SrcIterator2 s2, SrcAccessor2 src2,
82 MaskIterator m, MaskAccessor mask,
83 DestIterator d, DestAccessor dest,
86 for(; s1 != s1end; ++s1, ++s2, ++m, ++d)
88 dest.set(f(src1(s1), src2(s2)), d);
91 template <
class SrcIterator1,
class SrcAccessor1,
92 class SrcIterator2,
class SrcAccessor2,
93 class SrcIterator3,
class SrcAccessor3,
94 class DestIterator,
class DestAccessor,
class Functor>
96 combineThreeLines(SrcIterator1 s1,
97 SrcIterator1 s1end, SrcAccessor1 src1,
98 SrcIterator2 s2, SrcAccessor2 src2,
99 SrcIterator3 s3, SrcAccessor3 src3,
100 DestIterator d, DestAccessor dest,
103 for(; s1 != s1end; ++s1, ++s2, ++s3, ++d)
104 dest.set(f(src1(s1), src2(s2), src3(s3)), d);
203 template <
class SrcImageIterator1,
class SrcAccessor1,
204 class SrcImageIterator2,
class SrcAccessor2,
205 class DestImageIterator,
class DestAccessor,
209 SrcImageIterator1 src1_lowerright, SrcAccessor1 sa1,
210 SrcImageIterator2 src2_upperleft, SrcAccessor2 sa2,
211 DestImageIterator dest_upperleft, DestAccessor da,
214 int w = src1_lowerright.x - src1_upperleft.x;
216 for(; src1_upperleft.y < src1_lowerright.y;
217 ++src1_upperleft.y, ++src2_upperleft.y, ++dest_upperleft.y)
219 combineTwoLines(src1_upperleft.rowIterator(),
220 src1_upperleft.rowIterator() + w, sa1,
221 src2_upperleft.rowIterator(), sa2,
222 dest_upperleft.rowIterator(), da, f);
226 template <
class SrcImageIterator1,
class SrcAccessor1,
227 class SrcImageIterator2,
class SrcAccessor2,
228 class DestImageIterator,
class DestAccessor,
232 combineTwoImages(triple<SrcImageIterator1, SrcImageIterator1, SrcAccessor1> src1,
233 pair<SrcImageIterator2, SrcAccessor2> src2,
234 pair<DestImageIterator, DestAccessor> dest,
238 src2.first, src2.second,
239 dest.first, dest.second, f);
349 template <
class SrcImageIterator1,
class SrcAccessor1,
350 class SrcImageIterator2,
class SrcAccessor2,
351 class MaskImageIterator,
class MaskAccessor,
352 class DestImageIterator,
class DestAccessor,
356 SrcImageIterator1 src1_lowerright, SrcAccessor1 sa1,
357 SrcImageIterator2 src2_upperleft, SrcAccessor2 sa2,
358 MaskImageIterator mask_upperleft, MaskAccessor ma,
359 DestImageIterator dest_upperleft, DestAccessor da,
362 int w = src1_lowerright.x - src1_upperleft.x;
364 for(; src1_upperleft.y < src1_lowerright.y;
365 ++src1_upperleft.y, ++src2_upperleft.y,
366 ++dest_upperleft.y, ++mask_upperleft.y)
368 combineTwoLinesIf(src1_upperleft.rowIterator(),
369 src1_upperleft.rowIterator() + w, sa1,
370 src2_upperleft.rowIterator(), sa2,
371 mask_upperleft.rowIterator(), ma,
372 dest_upperleft.rowIterator(), da, f);
376 template <
class SrcImageIterator1,
class SrcAccessor1,
377 class SrcImageIterator2,
class SrcAccessor2,
378 class MaskImageIterator,
class MaskAccessor,
379 class DestImageIterator,
class DestAccessor,
384 pair<SrcImageIterator2, SrcAccessor2> src2,
385 pair<MaskImageIterator, MaskAccessor> mask,
386 pair<DestImageIterator, DestAccessor> dest,
390 src2.first, src2.second,
391 mask.first, mask.second,
392 dest.first, dest.second, f);
492 template <
class SrcImageIterator1,
class SrcAccessor1,
493 class SrcImageIterator2,
class SrcAccessor2,
494 class SrcImageIterator3,
class SrcAccessor3,
495 class DestImageIterator,
class DestAccessor,
499 SrcImageIterator1 src1_lowerright, SrcAccessor1 sa1,
500 SrcImageIterator2 src2_upperleft, SrcAccessor2 sa2,
501 SrcImageIterator3 src3_upperleft, SrcAccessor3 sa3,
502 DestImageIterator dest_upperleft, DestAccessor da,
505 int w = src1_lowerright.x - src1_upperleft.x;
507 for(; src1_upperleft.y < src1_lowerright.y;
508 ++src1_upperleft.y, ++src2_upperleft.y, ++src3_upperleft.y,
511 combineThreeLines(src1_upperleft.rowIterator(),
512 src1_upperleft.rowIterator() + w, sa1,
513 src2_upperleft.rowIterator(), sa2,
514 src3_upperleft.rowIterator(), sa3,
515 dest_upperleft.rowIterator(), da, f);
519 template <
class SrcImageIterator1,
class SrcAccessor1,
520 class SrcImageIterator2,
class SrcAccessor2,
521 class SrcImageIterator3,
class SrcAccessor3,
522 class DestImageIterator,
class DestAccessor,
527 pair<SrcImageIterator2, SrcAccessor2> src2,
528 pair<SrcImageIterator3, SrcAccessor3> src3,
529 pair<DestImageIterator, DestAccessor> dest,
533 src2.first, src2.second,
534 src3.first, src3.second,
535 dest.first, dest.second, f);
563 template <
class ValueType>
577 typedef typename SquareRootTraits<typename NormTraits<ValueType>::SquaredNormType>::SquareRootResult
result_type;
593 class FunctorTraits<MagnitudeFunctor<T> >
594 :
public FunctorTraitsBase<MagnitudeFunctor<T> >
597 typedef VigraTrueType isBinaryFunctor;
614 template <
class ValueType>
628 typedef typename NumericTraits<ValueType>::RealPromote
result_type;
655 class FunctorTraits<RGBGradientMagnitudeFunctor<T> >
656 :
public FunctorTraitsBase<RGBGradientMagnitudeFunctor<T> >
659 typedef VigraTrueType isBinaryFunctor;
666 #endif // VIGRA_COMBINEIMAGES_HXX
RGBValue< ValueType > second_argument_type
Definition: combineimages.hxx:624
RGBValue< ValueType > first_argument_type
Definition: combineimages.hxx:620
value_type & red()
Definition: rgbvalue.hxx:279
ValueType first_argument_type
Definition: combineimages.hxx:569
FFTWComplex< R >::SquaredNormType squaredNorm(const FFTWComplex< R > &a)
squared norm (= squared magnitude)
Definition: fftw3.hxx:1044
ValueType value_type
Definition: combineimages.hxx:581
SquareRootTraits< typename NormTraits< ValueType >::SquaredNormType >::SquareRootResult result_type
Definition: combineimages.hxx:577
Definition: combineimages.hxx:564
value_type & blue()
Definition: rgbvalue.hxx:287
value_type & green()
Definition: rgbvalue.hxx:283
result_type operator()(first_argument_type const &gx, second_argument_type const &gy) const
Definition: combineimages.hxx:646
void combineTwoImages(...)
Combine two source images into destination image.
NumericTraits< ValueType >::RealPromote result_type
Definition: combineimages.hxx:628
void combineThreeImages(...)
Combine three source images into destination image.
Definition: combineimages.hxx:615
void combineTwoImagesIf(...)
Combine ROI of two source images into destination image.
Class for a single RGB value.
Definition: accessor.hxx:937
ValueType value_type
Definition: combineimages.hxx:632
SquareRootTraits< FixedPoint< IntBits, FracBits > >::SquareRootResult sqrt(FixedPoint< IntBits, FracBits > v)
square root.
Definition: fixedpoint.hxx:616
result_type operator()(first_argument_type const &v1, second_argument_type const &v2) const
Definition: combineimages.hxx:586
ValueType second_argument_type
Definition: combineimages.hxx:573