27#ifndef _VIGRA_EXT_IMAGETRANSFORMSGPU_H
28#define _VIGRA_EXT_IMAGETRANSFORMSGPU_H
35#include <vigra/basicimage.hxx>
38#include <vigra/accessor.hxx>
45using vigra::NumericTraits;
56 const std::vector<double>&
invLut,
57 const std::vector<double>&
destLut,
63 const vigra::Diff2D
destUL,
94#define DEFINE_GPUNUMERICTRAITS(IMAGECOMPONENT, GLFORMAT, GLFORMATRGB, GLTRANSFER, GLTRANSFERRGB, GLTYPE) \
96struct GpuNumericTraits<IMAGECOMPONENT> { \
97 typedef IMAGECOMPONENT ImagePixelComponentType; \
98 enum {NumBands = 1}; \
99 enum {ImageGLInternalFormat = GLFORMAT}; \
100 enum {ImageGLTransferFormat = GLTRANSFER}; \
101 enum {ImageGLFormat = XGL_LUMINANCE}; \
102 enum {ImagePixelComponentGLType = GLTYPE}; \
105struct GpuNumericTraits<vigra::RGBValue<IMAGECOMPONENT, 0, 1, 2> > { \
106 typedef IMAGECOMPONENT ImagePixelComponentType; \
107 enum {NumBands = 3}; \
108 enum {ImageGLInternalFormat = GLFORMATRGB}; \
109 enum {ImageGLTransferFormat = GLTRANSFERRGB}; \
110 enum {ImageGLFormat = XGL_RGB}; \
111 enum {ImagePixelComponentGLType = GLTYPE}; \
114struct GpuNumericTraits<vigra::TinyVector<IMAGECOMPONENT, 2> > { \
115 typedef IMAGECOMPONENT ImagePixelComponentType; \
116 enum {NumBands = 2}; \
117 enum {ImageGLInternalFormat = GLFORMAT}; \
118 enum {ImageGLTransferFormat = GLFORMAT}; \
119 enum {ImageGLFormat = XGL_LUMINANCE_ALPHA}; \
120 enum {ImagePixelComponentGLType = GLTYPE}; \
123struct GpuNumericTraits<vigra::TinyVector<IMAGECOMPONENT, 4> > { \
124 typedef IMAGECOMPONENT ImagePixelComponentType; \
125 enum {NumBands = 4}; \
126 enum {ImageGLInternalFormat = GLFORMATRGB}; \
127 enum {ImageGLTransferFormat = GLFORMATRGB}; \
128 enum {ImageGLFormat = XGL_RGBA}; \
129 enum {ImagePixelComponentGLType = GLTYPE}; \
177 vigra::triple<DestImageIterator, DestImageIterator, DestAccessor>
dest,
178 std::pair<AlphaImageIterator, AlphaAccessor> alpha,
207 std::vector<double>
invLut;
253 std::pair<SrcAlphaIterator, SrcAlphaAccessor>
srcAlpha,
254 vigra::triple<DestImageIterator, DestImageIterator, DestAccessor>
dest,
255 std::pair<AlphaImageIterator, AlphaAccessor> alpha,
264 typedef typename SrcAlphaAccessor::value_type
SrcAlphaType;
281 std::cerr <<
"nona: Found unsupported transformation in stack." << std::endl
282 <<
" This geometric transformation is not supported by GPU." << std::endl
283 <<
" Remove -g switch and try with CPU transformation." << std::endl;
292 std::vector<double>
invLut;
391 vigra::FVector4Image::traverser
yd =
phonyDest.upperLeft();
402 vigra::FVector4Image::traverser
xd(
yd);
403 vigra::FImage::traverser
xdm(
ydm);
410 bool result = transform.transformImgCoordPartial(
sx,
sy,x,y);
411 float errorX = (*xd)[2] -
static_cast<float>(
sx);
412 float errorY = (*xd)[1] -
static_cast<float>(
sy);
416 std::cout << std::setprecision(20) <<
"pos=[" << x <<
", " << y <<
"] shouldBe=[" <<
sx <<
", " <<
sy <<
" is=[" << (*xd)[2] <<
", " << (*xd)[1] <<
"] error=" << error << std::endl;
425 dest.third.set(NumericTraits<DestValueType>::fromRealPromote(std::min(255.0, std::max(0.0, 255.0 * 10.0 * error))),
xdest);
426 alpha.second.set(255,
xdesta);
432 std::cout <<
"numSamples=" <<
samples << std::endl
433 <<
"average error=" <<
avgError << std::endl
472 vigra::triple<DestImageIterator, DestImageIterator, DestAccessor>
dest,
473 std::pair<AlphaImageIterator, AlphaAccessor> alpha,
537 std::pair<SrcAlphaIterator, SrcAlphaAccessor>
srcAlpha,
538 vigra::triple<DestImageIterator, DestImageIterator, DestAccessor>
dest,
539 std::pair<AlphaImageIterator, AlphaAccessor> alpha,
The pano tools interpolators ported to vigra.
"wrapper" for efficient interpolation access to an image
misc math function & classes used by other parts of the program
void transformImageAlphaGPUIntern(vigra::triple< SrcImageIterator, SrcImageIterator, SrcAccessor > src, std::pair< SrcAlphaIterator, SrcAlphaAccessor > srcAlpha, vigra::triple< DestImageIterator, DestImageIterator, DestAccessor > dest, std::pair< AlphaImageIterator, AlphaAccessor > alpha, TRANSFORM &transform, PixelTransform &pixelTransform, vigra::Diff2D destUL, Interpolator interp, bool warparound, AppBase::ProgressDisplay *progress)
transform input images with alpha channel
bool transformImageGPUIntern(const std::string &coordXformGLSL, const std::string &interpolatorGLSL, const int interpolatorSize, const std::string &photometricGLSL, const vector< double > &invLut, const vector< double > &destLut, const vigra::Diff2D srcSize, const void *const srcBuffer, const int srcGLInternalFormat, const int srcGLTransferFormat, const int srcGLFormat, const int srcGLType, const void *const srcAlphaBuffer, const int srcAlphaGLType, const vigra::Diff2D destUL, const vigra::Diff2D destSize, void *const destBuffer, const int destGLInternalFormat, const int destGLTransferFormat, const int destGLFormat, const int destGLType, void *const destAlphaBuffer, const int destAlphaGLType, const bool warparound)
void SetGPUDebugMessages(const bool doPrint)
@ XGL_LUMINANCE16_ALPHA16
Interpolator
enum with all interpolation methods
@ INTERP_NEAREST_NEIGHBOUR
void transformImageAlphaGPU(vigra::triple< SrcImageIterator, SrcImageIterator, SrcAccessor > src, std::pair< SrcAlphaIterator, SrcAlphaAccessor > srcAlpha, vigra::triple< DestImageIterator, DestImageIterator, DestAccessor > dest, std::pair< AlphaImageIterator, AlphaAccessor > alpha, vigra::Diff2D destUL, TRANSFORM &transform, PixelTransform &pixelTransform, bool warparound, Interpolator interpol, AppBase::ProgressDisplay *progress)
Transform image, and respect a possible alpha channel.
void transformImageGPU(vigra::triple< SrcImageIterator, SrcImageIterator, SrcAccessor > src, vigra::triple< DestImageIterator, DestImageIterator, DestAccessor > dest, std::pair< AlphaImageIterator, AlphaAccessor > alpha, vigra::Diff2D destUL, TRANSFORM &transform, PixelTransform &pixelTransform, bool warparound, Interpolator interpol, AppBase::ProgressDisplay *progress)
Transform an image into the panorama.
Error_GpuNumericTraits_not_specialized_for_this_case ImagePixelComponentType
@ ImagePixelComponentGLType
simple bilinear interpolation
several classes to calculate interpolator weights,
sinc interpolation, with variable width
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.