37 #ifndef VIGRA_INITIMAGE_HXX
38 #define VIGRA_INITIMAGE_HXX
40 #include "utilities.hxx"
41 #include "iteratortraits.hxx"
42 #include "functortraits.hxx"
43 #include "multi_shape.hxx"
59 template <
class DestIterator,
class DestAccessor,
class VALUETYPE>
61 initLineImpl(DestIterator d, DestIterator dend, DestAccessor dest,
62 VALUETYPE
const & v, VigraFalseType)
68 template <
class DestIterator,
class DestAccessor,
class FUNCTOR>
70 initLineImpl(DestIterator d, DestIterator dend, DestAccessor dest,
71 FUNCTOR
const & f, VigraTrueType)
77 template <
class DestIterator,
class DestAccessor,
class VALUETYPE>
79 initLine(DestIterator d, DestIterator dend, DestAccessor dest,
82 initLineImpl(d, dend, dest, v,
typename FunctorTraits<VALUETYPE>::isInitializer());
85 template <
class DestIterator,
class DestAccessor,
class FUNCTOR>
87 initLineFunctor(DestIterator d, DestIterator dend, DestAccessor dest,
94 template <
class DestIterator,
class DestAccessor,
95 class MaskIterator,
class MaskAccessor,
98 initLineIfImpl(DestIterator d, DestIterator dend, DestAccessor dest,
99 MaskIterator m, MaskAccessor mask,
100 VALUETYPE
const & v, VigraFalseType)
102 for(; d != dend; ++d, ++m)
107 template <
class DestIterator,
class DestAccessor,
108 class MaskIterator,
class MaskAccessor,
111 initLineIfImpl(DestIterator d, DestIterator dend, DestAccessor dest,
112 MaskIterator m, MaskAccessor mask,
113 FUNCTOR
const & f, VigraTrueType)
115 for(; d != dend; ++d, ++m)
120 template <
class DestIterator,
class DestAccessor,
121 class MaskIterator,
class MaskAccessor,
124 initLineIf(DestIterator d, DestIterator dend, DestAccessor dest,
125 MaskIterator m, MaskAccessor mask,
128 initLineIfImpl(d, dend, dest, m, mask, v,
typename FunctorTraits<VALUETYPE>::isInitializer());
131 template <
class DestIterator,
class DestAccessor,
132 class MaskIterator,
class MaskAccessor,
135 initLineFunctorIf(DestIterator d, DestIterator dend, DestAccessor dest,
136 MaskIterator m, MaskAccessor mask,
139 for(; d != dend; ++d, ++m)
277 doxygen_overloaded_function(template <...>
void initImage)
279 template <
class ImageIterator,
class Accessor,
class VALUETYPE>
281 initImage(ImageIterator upperleft, ImageIterator lowerright,
282 Accessor a, VALUETYPE
const & v)
284 int w = lowerright.x - upperleft.x;
286 for(; upperleft.y < lowerright.y; ++upperleft.y)
288 initLineImpl(upperleft.rowIterator(), upperleft.rowIterator() + w, a,
289 v,
typename FunctorTraits<VALUETYPE>::isInitializer());
293 template <
class ImageIterator,
class Accessor,
class VALUETYPE>
295 initImage(triple<ImageIterator, ImageIterator, Accessor> img, VALUETYPE
const & v)
297 initImage(img.first, img.second, img.third, v);
300 template <
class T,
class S,
class VALUETYPE>
302 initImage(MultiArrayView<2, T, S> img, VALUETYPE
const & v)
404 doxygen_overloaded_function(template <...>
void initImageWithFunctor)
406 template <
class ImageIterator,
class Accessor,
class FUNCTOR>
409 Accessor a, FUNCTOR & f)
411 int w = lowerright.x - upperleft.x;
413 for(; upperleft.y < lowerright.y; ++upperleft.y)
415 initLineFunctor(upperleft.rowIterator(), upperleft.rowIterator() + w, a, f);
419 template <
class ImageIterator,
class Accessor,
class FUNCTOR>
426 template <
class T,
class S,
class FUNCTOR>
550 doxygen_overloaded_function(template <...>
void initImageIf)
552 template <
class ImageIterator,
class Accessor,
553 class MaskImageIterator,
class MaskAccessor,
556 initImageIf(ImageIterator upperleft, ImageIterator lowerright, Accessor a,
557 MaskImageIterator mask_upperleft, MaskAccessor ma,
560 int w = lowerright.x - upperleft.x;
562 for(; upperleft.y < lowerright.y; ++upperleft.y, ++mask_upperleft.y)
564 initLineIfImpl(upperleft.rowIterator(),
565 upperleft.rowIterator() + w, a,
566 mask_upperleft.rowIterator(), ma,
567 v,
typename FunctorTraits<VALUETYPE>::isInitializer());
571 template <
class ImageIterator,
class Accessor,
572 class MaskImageIterator,
class MaskAccessor,
575 initImageIf(triple<ImageIterator, ImageIterator, Accessor> img,
576 pair<MaskImageIterator, MaskAccessor> mask,
579 initImageIf(img.first, img.second, img.third, mask.first, mask.second, v);
582 template <
class T,
class S,
587 MultiArrayView<2, TM, SM>
const & mask,
590 vigra_precondition(img.shape() == mask.shape(),
591 "initImageIf(): shape mismatch between input and mask.");
592 initImageIf(destImageRange(img), maskImage(mask), v);
682 doxygen_overloaded_function(template <...>
void initImageBorder)
684 template <
class ImageIterator,
class Accessor,
class VALUETYPE>
688 Accessor a,
int border_width, VALUETYPE
const & v)
690 int w = lowerright.x - upperleft.x;
691 int h = lowerright.y - upperleft.y;
693 int hb = (border_width > h) ? h : border_width;
694 int wb = (border_width > w) ? w : border_width;
696 initImage(upperleft, upperleft+Diff2D(w,hb), a, v);
697 initImage(upperleft, upperleft+Diff2D(wb,h), a, v);
698 initImage(upperleft+Diff2D(0,h-hb), lowerright, a, v);
699 initImage(upperleft+Diff2D(w-wb,0), lowerright, a, v);
702 template <
class ImageIterator,
class Accessor,
class VALUETYPE>
705 int border_width, VALUETYPE
const & v)
710 template <
class T,
class S,
class VALUETYPE>
713 int border_width, VALUETYPE
const & v)
723 #endif // VIGRA_INITIMAGE_HXX
void initImage(...)
Write a value to every pixel in an image or rectangular ROI.
Definition: accessor.hxx:43
void initImageWithFunctor(...)
Write the result of a functor call to every pixel in an image or rectangular ROI. ...
void initImageBorder(...)
Write value to the specified border pixels in the image.
void initImageIf(...)
Write value to pixel in the image if mask is true.