28#include <vigra/imageinfo.hxx>
44template <
class ImgIter,
class ImgAcc>
45vigra::triple<ImgIter, ImgIter, ImgAcc>
46applyRect(vigra::Rect2D & r, vigra::triple<ImgIter, ImgIter, ImgAcc> img)
49 vigra::Diff2D
t = img.second - (img.first + r.lowerRight());
53 return vigra::triple<ImgIter, ImgIter, ImgAcc>
54 (img.first + r.upperLeft(),
55 img.first + r.lowerRight(),
64template <
class ImgIter,
class ImgAcc>
65vigra::pair<ImgIter, ImgAcc>
66applyRect(vigra::Rect2D & r, vigra::pair<ImgIter, ImgAcc> img)
68 return vigra::pair<ImgIter, ImgAcc>
69 (img.first + r.upperLeft(),
84template <
class Image,
class Mask>
126 m_image.resize(vigra::Size2D(1,1));
127 m_mask.resize(vigra::Size2D(1,1));
253 return vigra::NumericTraits<image_value_type>::zero();
260 return getMask(vigra::Diff2D(x,y));
268 return vigra::NumericTraits<mask_value_type>::zero();
283template<
typename Image,
typename Mask>
284inline vigra::triple<typename ROIImage<Image, Mask>::image_const_traverser,
289return vigra::triple<typename ROIImage<Image,Mask>::image_const_traverser,
297template<
typename Image,
typename Mask>
298inline vigra::pair<typename ROIImage<Image, Mask>::image_const_traverser,
302return vigra::pair<typename ROIImage<Image,Mask>::image_const_traverser,
308template <
class Image,
class Alpha>
309inline vigra::triple<typename ROIImage<Image,Alpha>::image_traverser,
314 return vigra::triple<typename ROIImage<Image,Alpha>::image_traverser,
321template <
class Image,
class Alpha>
322inline vigra::pair<typename ROIImage<Image,Alpha>::image_traverser,
326 return vigra::pair<typename ROIImage<Image,Alpha>::image_traverser,
331template <
class Image,
class Alpha>
332inline vigra::triple<typename ROIImage<Image,Alpha>::mask_const_traverser,
337 return vigra::triple<typename ROIImage<Image,Alpha>::mask_const_traverser,
344template <
class Image,
class Alpha>
345inline vigra::pair<typename ROIImage<Image,Alpha>::mask_const_traverser,
349 return vigra::pair<typename ROIImage<Image,Alpha>::mask_const_traverser,
354template <
class Image,
class Alpha>
355inline vigra::triple<typename ROIImage<Image,Alpha>::mask_traverser,
360 return vigra::triple<typename ROIImage<Image,Alpha>::mask_traverser,
367template <
class Image,
class Alpha>
368inline vigra::pair<typename ROIImage<Image,Alpha>::mask_traverser,
372 return vigra::pair<typename ROIImage<Image,Alpha>::mask_traverser,
378template <
class Image,
class Mask,
class Functor>
381 int nImg = imgs.size();
382 std::vector<typename Image::traverser>
imgUL(
nImg);
383 std::vector<typename Mask::traverser>
maskUL(
nImg);
384 std::vector<vigra::Rect2D>
rois(
nImg);
385 for (
unsigned i=0;
i <
nImg;
i++) {
386 imgs[
i] = imgs->upperLeft();
387 masks[
i] = imgs->maskUpperLeft();
388 rois[
i] = imgs->boundingBox();
398template <
class ImgIter,
class ImgAcc,
class MaskIter,
class MaskAcc,
class Functor>
400 std::vector<MaskIter> masks,
401 std::vector<vigra::Rect2D>
rois,
405 typedef typename ImgIter::value_type PixelType;
406 typedef typename MaskIter::value_type MaskType;
408 typedef typename ImgIter::row_iterator
RowImgIter;
409 typedef typename MaskIter::row_iterator
RowMaskIter;
411 int nImg = imgs.size();
417 for (
unsigned i=1;
i <
nImg;
i++) {
422 imgs[
k].first.x +=
maxRoi.left();
423 imgs[
k].first.y +=
maxRoi.top();
424 masks[
k].first.x +=
maxRoi.left();
425 masks[
k].first.y +=
maxRoi.top();
432 std::vector<PixelType> val(
nImg);
456 ++(masks[
k].first.y);
466 vigra::triple<DestIter, DestIter, DestAccessor>
dest,
467 vigra::pair<MaskIter, MaskAccessor>
destMask,
470 typedef typename MaskAccessor::value_type MaskType;
472 unsigned int nImg = images.size();
474 vigra::Diff2D size =
dest.second -
dest.first;
478 for (
int y=0; y < size.y; y++) {
479 for (
int x=0; x < size.x; x++) {
482 for (
unsigned int i=0;
i<
nImg;
i++) {
484 a = images[
i]->getMask(x,y);
487 reduce(images[
i]->
operator()(x,y), a);
490 dest.third.set(reduce(),
dest.first, vigra::Diff2D(x,y));
bool contains(const wxArrayString &stringArray, const wxString &string, bool caseInSensitive=true)
check if given string is in wxArrayString, do comparison case insentive or case sensitive
mask_value_type getMask(const vigra::Diff2D &pos)
MaskAccessor maskAccessor()
return the accessor of the alpha channel
Mask::const_traverser mask_const_traverser
Mask::traverser mask_traverser
mask_traverser maskLowerRight()
mask_const_traverser maskLowerRight() const
image_traverser upperLeft()
returns an traverser to the upper left of the image, this is usually outside of the rectangle.
Image::Accessor ImageAccessor
Image m_image
remapped image
void resize(const vigra::Rect2D &rect)
resize the image
ImageConstAccessor accessor() const
vigra::Rect2D & boundingBox()
MaskConstAccessor maskAccessor() const
Image::traverser image_traverser
image_value_type operator()(int x, int y)
Image::ConstAccessor ImageConstAccessor
mask_traverser maskUpperLeft()
returns an traverser to the upper left of the image, this is usually outside of the rectangle.
Mask::ConstAccessor MaskConstAccessor
ImageAccessor accessor()
return the accessor of this image
image_value_type operator[](vigra::Diff2D const &pos)
Image::value_type image_value_type
vigra::Rect2D m_region
bounding rectangle of the image
mask_const_traverser maskUpperLeft() const
mask_value_type getMask(int x, int y)
Mask::Accessor MaskAccessor
image_traverser lowerRight()
Image::const_traverser image_const_traverser
Mask::value_type mask_value_type
image_const_traverser lowerRight() const
image_const_traverser upperLeft() const
Mask m_mask
corresponding alpha channel
#define DEBUG_ASSERT(cond)
void inspectImagesIf(std::vector< ImgIter > imgs, std::vector< MaskIter > masks, std::vector< vigra::Rect2D > rois, Functor &f)
function to inspect a variable number of images.
vigra::pair< typename ROIImage< Image, Alpha >::image_traverser, typename ROIImage< Image, Alpha >::ImageAccessor > destImage(ROIImage< Image, Alpha > &img)
vigra::triple< typename ROIImage< Image, Alpha >::mask_traverser, typename ROIImage< Image, Alpha >::mask_traverser, typename ROIImage< Image, Alpha >::MaskAccessor > destMaskRange(ROIImage< Image, Alpha > &img)
vigra::pair< typename ROIImage< Image, Alpha >::mask_const_traverser, typename ROIImage< Image, Alpha >::MaskConstAccessor > srcMask(const ROIImage< Image, Alpha > &img)
vigra::pair< typename ROIImage< Image, Mask >::image_const_traverser, typename ROIImage< Image, Mask >::ImageConstAccessor > srcImage(const ROIImage< Image, Mask > &img)
vigra::triple< typename ROIImage< Image, Mask >::image_const_traverser, typename ROIImage< Image, Mask >::image_const_traverser, typename ROIImage< Image, Mask >::ImageConstAccessor > srcImageRange(const ROIImage< Image, Mask > &img)
helper function for ROIImages
vigra::triple< typename ROIImage< Image, Alpha >::mask_const_traverser, typename ROIImage< Image, Alpha >::mask_const_traverser, typename ROIImage< Image, Alpha >::MaskConstAccessor > srcMaskRange(const ROIImage< Image, Alpha > &img)
vigra::pair< typename ROIImage< Image, Alpha >::mask_traverser, typename ROIImage< Image, Alpha >::MaskAccessor > destMask(ROIImage< Image, Alpha > &img)
vigra::triple< ImgIter, ImgIter, ImgAcc > applyRect(vigra::Rect2D &r, vigra::triple< ImgIter, ImgIter, ImgAcc > img)
apply a roi to an image area
void reduceROIImages(std::vector< ROIIMG * > images, vigra::triple< DestIter, DestIter, DestAccessor > dest, vigra::pair< MaskIter, MaskAccessor > destMask, FUNCTOR &reduce)
algorithm to reduce a set of ROI images
vigra::triple< typename ROIImage< Image, Alpha >::image_traverser, typename ROIImage< Image, Alpha >::image_traverser, typename ROIImage< Image, Alpha >::ImageAccessor > destImageRange(ROIImage< Image, Alpha > &img)
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.