30 long numberOfComponents,
58 vector<ossimDpt> points(4);
100 if( (w < kW) || (h < kH))
102 cerr <<
" Error ossimTilePatch::convolve(kernel): patch is smaller than kernel size" << endl;
143 cerr <<
"Error: Kernel is NULL in ossimTilePatch::fillTile(tile, kernel)!!" << endl;
200 "unhandled scalar type %d",
296 "unhandled scalar type %d",
332 long tileWidth = result->
getWidth();
334 long convolutionWidth = kernel->
getWidth();
335 long convolutionHeight = kernel->
getHeight();
336 long convolutionOffsetX= convolutionWidth/2;
337 long convolutionOffsetY= convolutionHeight/2;
338 long patchWidth = patchRect.
width();
339 long patchCenterOffset = (long)(patchWidth*startDelta.
y + startDelta.
x);
340 long patchConvolutionOffsetDelta = patchWidth*convolutionOffsetY + convolutionOffsetX;
341 long patchLineStartOffset = patchCenterOffset - patchConvolutionOffsetDelta;
342 long outputOffset = 0;
347 for(
long y = 0;
y <tileHeight;
y++)
349 patchCenterOffset = patchLineStartOffset;
351 for(
long x =0;
x < tileWidth;
x++)
355 double convolveResult = 0;
356 for(
long b = 0; b < outputBands; ++b)
361 T* outBuf = (T*)(result->
getBuf(b));
366 convolveResult = convolveResult <
min?
min:convolveResult;
367 convolveResult = convolveResult >
max?
max:convolveResult;
368 outBuf[outputOffset] = (
ossim_uint8)convolveResult;
378 patchLineStartOffset += patchWidth;
383 for(
long b = 0; b < outputBands; ++b)
385 double convolveResult = 0;
387 T* outBuf = (T*)(result->
getBuf(b));
389 patchCenterOffset = (long)(patchWidth*startDelta.
y + startDelta.
x);
390 patchLineStartOffset = patchCenterOffset - patchConvolutionOffsetDelta;
394 for(
long y = 0;
y <tileHeight;
y++)
396 patchCenterOffset = patchLineStartOffset;
398 for(
long x =0;
x < tileWidth;
x++)
403 convolveResult = convolveResult <
min?
min:convolveResult;
404 convolveResult = convolveResult >
max?
max:convolveResult;
405 outBuf[outputOffset] = (T)convolveResult;
409 patchLineStartOffset += patchWidth;
425 double stepSizeWidth = 1.0/length.
x;
426 double stepSizeHeight = 1.0/length.
y;
434 ul.
y - rect.
ul().
y );
439 T *resultBuf = (T*)result->
getBuf(band);
443 T nullPix =
static_cast<T
>(result->
getNullPix(band));
444 for(
long y = 0;
y < length.
y;
y++)
446 double deltaX = (end.
x - start.
x)*stepSizeWidth;
447 double deltaY = (end.
y - start.
y)*stepSizeHeight;
449 for(
long x = 0;
x < length.
x;
x++)
451 int xPixel = pointXY.
x<0?(int)floor(pointXY.
x):(int)pointXY.
x;
452 int yPixel = pointXY.
y<0?(
int)floor(pointXY.
y):(int)pointXY.
y;
453 if( (xPixel >=0) && (xPixel < patchWidth) &&
454 (yPixel >=0) && (yPixel < patchHeight))
456 *resultBuf = sourceBuf[yPixel*patchWidth + xPixel];
460 *resultBuf = nullPix;
468 start.
x += deltaUl.
x;
469 start.
y += deltaUl.
y;
494 ossimDpt ul (center - rect_size/2.0);
495 ossimDpt lr (center + rect_size/2.0);
497 setRect(rect, tile_size, padding);
505 aRect.
ul().
y - padding.
y);
507 aRect.
lr().
y + padding.
y);
OSSIMDLLEXPORT void ossimSetError(const char *className, ossim_int32 error, const char *fmtString=0,...)
16 bit unsigned integer (15 bits used)
virtual void fillPatch(ossimImageSource *imageSource, long resLevel=0)
virtual ossim_uint32 getWidth() const
void setData(ossimRefPtr< ossimImageData > &patchData)
virtual const ossim_float64 * getMaxPix() const
static ossimDiscreteNearestNeighbor nearestNeighborKernel
virtual ossim_uint32 getNumberOfBands() const
virtual ossimIrect getRect() const
ossimRefPtr< ossimImageData > thePatchData
const ossimDpt & ul() const
virtual void fillTile(ossimRefPtr< ossimImageData > &aTile) const
virtual long getHeight() const
const ossimIpt & ul() const
virtual ossimDataObjectStatus getDataObjectStatus() const
virtual ossim_uint32 getHeight() const
16 bit unsigned integer (14 bits used)
static const ossimErrorCode OSSIM_ERROR
16 bit unsigned integer (13 bits used)
virtual void initialize()
Initialize the data buffer.
virtual ossimObject * dup() const
bool isNull(ossim_uint32 offset) const
virtual void loadTile(const void *src, const ossimIrect &src_rect, ossimInterleaveType il_type)
virtual void setHeight(ossim_uint32 height)
virtual void setNullPix(ossim_float64 null_pix)
static ossimImageDataFactory * instance()
void convolve(ossimDiscreteConvolutionKernel *kernel)
virtual ossimDataObjectStatus validate() const
unsigned int ossim_uint32
virtual const ossim_float64 * getNullPix() const
32 bit normalized floating point
virtual void setWidth(ossim_uint32 width)
virtual ossimIrect getImageRectangle() const
void fillTileTemplate(T dummyVariable, ossimRefPtr< ossimImageData > &result, const ossimDpt &ul, const ossimDpt &ur, const ossimDpt &deltaUl, const ossimDpt &deltaUr, const ossimDpt &length) const
static ossimDrect findBoundingRect(const ossimDpt &p1, const ossimDpt &p2, const ossimDpt &p3, const ossimDpt &p4)
virtual ossimRefPtr< ossimImageData > create(ossimSource *owner, ossimScalarType scalar, ossim_uint32 bands=1) const
ossim_uint32 width() const
virtual void setRect(const ossimDpt &p1, const ossimDpt &p2, const ossimDpt &p3, const ossimDpt &p4, const ossimDpt &tile_size, const ossimDpt &padding=ossimDpt(0, 0))
void setNull(ossim_uint32 offset)
virtual void setOrigin(const ossimIpt &origin)
virtual const ossim_float64 * getMinPix() const
virtual ossimScalarType getScalarType() const
virtual void makeBlank()
Initializes data to null pixel values.
64 bit normalized floating point
16 bit unsigned integer (11 bits used)
virtual void setMaxPix(ossim_float64 max_pix)
virtual const void * getBuf() const
virtual void convolveSubImage(const float *data, long dataWidth, double &result, float nullPixel=OSSIM_DEFAULT_NULL_PIX_FLOAT) const
virtual ~ossimTilePatch()
ossimDataObjectStatus
Definitions for data object status.
ossimTilePatch(ossimImageSource *input)
virtual long getWidth() const
const ossimDpt & lr() const
virtual void setMinPix(ossim_float64 min_pix)
virtual const ossimIpt & getOrigin() const
unsigned char ossim_uint8
virtual ossimRefPtr< ossimImageData > getTile(const ossimIpt &origin, ossim_uint32 resLevel=0)
16 bit unsigned integer (12 bits used)