32 const NEWMAT::Matrix& convolutionMatrix)
42 const vector<NEWMAT::Matrix>& convolutionList)
57 bool doWeightedAverage)
59 NEWMAT::Matrix m(nrows, ncols);
60 const double* tempPtr = kernel;
61 for(
int row = 0; row < nrows; ++row)
63 for(
int col = 0; col < ncols; ++col)
65 m[row][col] =*tempPtr;
74 bool doWeightedAverage)
78 for(idx = 0; idx < convolutionList.size(); ++idx)
127 tileRect.
ul().
y - offsetY,
128 tileRect.
lr().
x + offsetX,
129 tileRect.
lr().
y + offsetY);
135 (input->getDataObjectStatus() ==
OSSIM_NULL)||
146 convolve(static_cast<ossim_uint8>(0),
154 for(idx = 0; idx < upperBound; ++idx)
156 convolve(static_cast<ossim_uint8>(0),
173 convolve(static_cast<ossim_uint16>(0),
181 for(idx = 0; idx < upperBound; ++idx)
183 convolve(static_cast<ossim_uint16>(0),
195 convolve(static_cast<ossim_sint16>(0),
203 for(idx = 0; idx < upperBound; ++idx)
205 convolve(static_cast<ossim_sint16>(0),
226 for(idx = 0; idx < upperBound; ++idx)
249 for(idx = 0; idx < upperBound; ++idx)
288 long convolutionWidth = kernel->
getWidth();
289 long convolutionHeight = kernel->
getHeight();
290 long convolutionOffsetX= convolutionWidth/2;
291 long convolutionOffsetY= convolutionHeight/2;
292 long patchWidth = patchRect.
width();
293 long convolutionTopLeftOffset = 0;
294 long convolutionCenterOffset = 0;
296 long outputOffset = 0;
302 const double* nullPix = inputTile->
getNullPix();
303 double convolveResult = 0;
307 for(
long y = 0;
y <tileHeight;
y++)
309 convolutionCenterOffset = patchWidth*(startDelta.y +
y) + startDelta.x;
310 convolutionTopLeftOffset = patchWidth*(startDelta.y +
y - convolutionOffsetY) + startDelta.x-convolutionOffsetX;
312 for(
long x =0;
x < tileWidth;
x++)
314 if(!inputTile->
isNull(convolutionCenterOffset))
316 for(
long b = 0; b < outputBands; ++b)
318 T* buf = (T*)(inputTile->
getBuf(b)) + convolutionTopLeftOffset;
325 convolveResult = convolveResult < minPix? minPix:convolveResult;
326 convolveResult = convolveResult > maxPix? maxPix:convolveResult;
328 outBuf[outputOffset] = (T)convolveResult;
336 ++convolutionCenterOffset;
337 ++convolutionTopLeftOffset;
344 for(
long b = 0; b < outputBands; ++b)
346 double convolveResult = 0;
347 const T* buf = (
const T*)inputTile->
getBuf(b);
352 for(
long y = 0;
y <tileHeight;
y++)
354 convolutionTopLeftOffset = patchWidth*(startDelta.y +
y - convolutionOffsetY) + startDelta.x-convolutionOffsetX;
356 for(
long x =0;
x < tileWidth;
x++)
364 convolveResult = convolveResult < minPix? (T)minPix:convolveResult;
365 convolveResult = convolveResult > maxPix?(T)maxPix:convolveResult;
366 outBuf[outputOffset] = (T)convolveResult;
368 ++convolutionTopLeftOffset;
392 const char* prefix)
const 405 (mPrefix +
"rows").c_str(),
410 (mPrefix +
"cols").c_str(),
414 for(
ossim_int32 row = 0; row < kernel.Nrows(); ++row)
416 for(
ossim_int32 col =0; col < kernel.Ncols(); ++col)
445 const char* numberOfMatrices = kwl.
find(prefix, NUMBER_OF_MATRICES);
450 while(numberOfMatches < matrixCount)
457 const char* rows = kwl.
find((newPrefix+NUMBER_OF_ROWS.
key()).c_str());
458 const char* cols = kwl.
find((newPrefix+NUMBER_OF_COLS.
key()).c_str());
465 NEWMAT::Matrix convolutionMatrix(numberOfRows, numberOfCols);
472 convolutionMatrix[r-1][c-1] = 0.0;
478 const char* v = kwl.
find(newPrefix.
c_str(),
525 std::vector<NEWMAT::Matrix> m;
527 m.push_back(convolutionMatrix);
16 bit unsigned integer (15 bits used)
virtual void initialize()
virtual ossim_uint32 getWidth() const
virtual bool isSourceEnabled() const
virtual ossim_uint32 getNumberOfBands() const
ossim_int32 theMaxKernelWidth
Represents serializable keyword/value map.
const char * find(const char *key) const
RTTI_DEF1(ossimConvolutionSource, "ossimConvolutionSource", ossimImageSourceFilter)
ossim_uint32 height() const
static ossimString toString(bool aValue)
Numeric to string methods.
virtual long getHeight() const
ossimRefPtr< ossimImageData > theTile
const ossimIpt & ul() const
virtual ossimDataObjectStatus getDataObjectStatus() const
virtual ossim_uint32 getHeight() const
16 bit unsigned integer (14 bits used)
16 bit unsigned integer (13 bits used)
virtual bool saveState(ossimKeywordlist &kwl, const char *prefix=NULL) const
Method to save the state of an object to a keyword list.
ossimRefPtr< ossimImageData > getTile(const ossimIrect &tileRect, ossim_uint32 resLevel=0)
virtual void initialize()
Initialize the data buffer.
ossim_int32 theMaxKernelHeight
virtual void initialize()
bool isNull(ossim_uint32 offset) const
void add(const char *prefix, const ossimKeywordlist &kwl, bool overwrite=true)
virtual void loadTile(const void *src, const ossimIrect &src_rect, ossimInterleaveType il_type)
virtual void setHeight(ossim_uint32 height)
OSSIM_DLL double defaultMin(ossimScalarType scalarType)
static ossimImageDataFactory * instance()
void convolve(T dummyVariable, ossimRefPtr< ossimImageData > inputTile, ossimDiscreteConvolutionKernel *kernel)
virtual ossimDataObjectStatus validate() const
virtual void setConvolution(const double *kernel, int nrows, int ncols, bool doWeightedAverage=false)
ossimImageSource * theInputConnection
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
virtual bool loadState(const ossimKeywordlist &kwl, const char *prefix=0)
Method to the load (recreate) the state of an object from a keyword list.
const ossimIpt & lr() const
virtual ossimRefPtr< ossimImageData > create(ossimSource *owner, ossimScalarType scalar, ossim_uint32 bands=1) const
ossim_uint32 width() const
void setNull(ossim_uint32 offset)
virtual void setOrigin(const ossimIpt &origin)
std::vector< ossimDiscreteConvolutionKernel *> theConvolutionKernelList
virtual ossimScalarType getScalarType() const
virtual void makeBlank()
Initializes data to null pixel values.
64 bit normalized floating point
virtual void setConvolutionList(const vector< NEWMAT::Matrix > &convolutionList, bool doWeightedAverage=false)
16 bit unsigned integer (11 bits used)
long toLong() const
toLong's deprecated, please use the toInts...
OSSIM_DLL double defaultMax(ossimScalarType scalarType)
virtual ossimScalarType getOutputScalarType() const
This will be used to query the output pixel type of the tile source.
virtual bool saveState(ossimKeywordlist &kwl, const char *prefix=0) const
Method to save the state of an object to a keyword list.
virtual bool loadState(const ossimKeywordlist &kwl, const char *prefix=NULL)
virtual const void * getBuf() const
virtual void deleteConvolutionList()
virtual ~ossimConvolutionSource()
const char * c_str() const
Returns a pointer to a null-terminated array of characters representing the string's contents...
virtual void convolveSubImage(const float *data, long dataWidth, double &result, float nullPixel=OSSIM_DEFAULT_NULL_PIX_FLOAT) const
ossimDataObjectStatus
Definitions for data object status.
virtual long getWidth() const
virtual void setKernelInformation()
virtual const ossimIpt & getOrigin() const
virtual ossimRefPtr< ossimImageData > getTile(const ossimIpt &origin, ossim_uint32 resLevel=0)
16 bit unsigned integer (12 bits used)