37 #ifndef VIGRA_INITIMAGE_HXX
38 #define VIGRA_INITIMAGE_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)
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)
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>
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);
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.
void initImageWithFunctor(...)
Write the result of a functor call to every pixel in an image or rectangular ROI. ...
doxygen_overloaded_function(template<...> void separableConvolveBlockwise) template< unsigned int N
Separated convolution on ChunkedArrays.
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.