19 #define PROP_EDGE_FILTER "Edge type" 24 theFilterType(
"Sobel")
31 theFilterType(
"Sobel")
39 theFilterType(
"Sobel")
113 <<
" Not supported by ossimEdgeFilter" << std::endl;
142 std::vector<ossimString>& filterNames)
const 144 filterNames.push_back(
"Laplacian");
145 filterNames.push_back(
"Prewitt");
146 filterNames.push_back(
"Roberts");
147 filterNames.push_back(
"Simple");
148 filterNames.push_back(
"Sobel");
149 filterNames.push_back(
"LocalMax8");
160 tempFilterType = tempFilterType.
downcase();
166 else if(tempFilterType.
contains(
"lap"))
170 else if(tempFilterType.
contains(
"prew"))
174 else if(tempFilterType.
contains(
"rob"))
178 else if(tempFilterType.
contains(
"sim"))
182 else if(tempFilterType.
contains(
"localmax"))
194 if(!property)
return;
211 std::vector<ossimString> filterNames;
294 else if(filterType.
contains(
"localmax"))
310 double horizontalValue = 0.0;
311 double verticalValue = 0.0;
321 for(bandIdx = 0; bandIdx < numberOfBands; ++bandIdx)
323 T* inputBuf =
static_cast<T*
>(inputData->
getBuf(bandIdx));
325 T np =
static_cast<T
>(inputData->
getNullPix(bandIdx));
326 T minP =
static_cast<T
>(inputData->
getMinPix(bandIdx));
327 T maxP =
static_cast<T
>(inputData->
getMaxPix(bandIdx));
329 if(inputBuf&&outputBuf)
331 for(
y = 0;
y < height; ++
y)
333 for(
x = 0;
x < width; ++
x)
335 if( (*(inputBuf + rowIncrement + 1) != np))
337 horizontalValue = ((double)inputBuf[0] - (
double)inputBuf[rowIncrement2]) +
338 ((
double)(inputBuf[1]*2.0) - (double)( inputBuf[rowIncrement2+1]*2.0)) +
339 ((
double)(inputBuf[2]) - (
double)(inputBuf[rowIncrement2+2]));
341 verticalValue = ((double)(inputBuf[2]) + (double)inputBuf[rowIncrement+2]*2.0 + (
double)inputBuf[rowIncrement2+2]) -
342 (
double)(inputBuf[0] + 2.0*(double)inputBuf[rowIncrement] + (
double)inputBuf[rowIncrement2]);
344 value = sqrt(horizontalValue*horizontalValue + verticalValue*verticalValue);
349 *outputBuf = (
static_cast<T
>(minP));
351 else if(value > maxP)
353 *outputBuf = (
static_cast<T
>(maxP));
357 *outputBuf = (
static_cast<T
>(value));
381 double horizontalValue = 0.0;
382 double verticalValue = 0.0;
392 for(bandIdx = 0; bandIdx < numberOfBands; ++bandIdx)
394 T* inputBuf =
static_cast<T*
>(inputData->
getBuf(bandIdx));
396 T np =
static_cast<T
>(inputData->
getNullPix(bandIdx));
397 T minP =
static_cast<T
>(inputData->
getMinPix(bandIdx));
398 T maxP =
static_cast<T
>(inputData->
getMaxPix(bandIdx));
400 if(inputBuf&&outputBuf)
402 for(
y = 0;
y < height; ++
y)
404 for(
x = 0;
x < width; ++
x)
406 if( (*(inputBuf + rowIncrement + 1) != np))
408 horizontalValue = ((double)inputBuf[0] - (
double)inputBuf[rowIncrement2]) +
409 ((
double)(inputBuf[1]) - (
double)( inputBuf[rowIncrement2+1])) +
410 ((double)(inputBuf[2]) - (double)(inputBuf[rowIncrement2+2]));
412 verticalValue = ((double)(inputBuf[2]) + (double)inputBuf[rowIncrement+2] + (
double)inputBuf[rowIncrement2+2]) -
413 ((
double)inputBuf[0] + (double)inputBuf[rowIncrement] + (
double)inputBuf[rowIncrement2]);
415 value = sqrt(horizontalValue*horizontalValue + verticalValue*verticalValue);
420 *outputBuf = (
static_cast<T
>(minP));
422 else if(value > maxP)
424 *outputBuf = (
static_cast<T
>(maxP));
428 *outputBuf = (
static_cast<T
>(value));
462 for(bandIdx = 0; bandIdx < numberOfBands; ++bandIdx)
464 T* inputBuf =
static_cast<T*
>(inputData->
getBuf(bandIdx));
466 T np =
static_cast<T
>(inputData->
getNullPix(bandIdx));
467 T minP =
static_cast<T
>(inputData->
getMinPix(bandIdx));
468 T maxP =
static_cast<T
>(inputData->
getMaxPix(bandIdx));
470 if(inputBuf&&outputBuf)
472 for(
y = 0;
y < height; ++
y)
474 for(
x = 0;
x < width; ++
x)
476 if( (*inputBuf) != np)
478 v1 = (double)inputBuf[0] - (
double)(inputBuf[rowIncrement+1]);
479 v1 = (double)inputBuf[0] - (
double)(inputBuf[1]);
481 v2 = (double)inputBuf[1] - (
double)inputBuf[rowIncrement];
482 v2 = (double)inputBuf[0] - (
double)inputBuf[rowIncrement];
484 value = sqrt(v1*v1 + v2*v2);
489 *outputBuf = (
static_cast<T
>(minP));
491 else if(value > maxP)
493 *outputBuf = (
static_cast<T
>(maxP));
497 *outputBuf = (
static_cast<T
>(value));
530 for(bandIdx = 0; bandIdx < numberOfBands; ++bandIdx)
532 T* inputBuf =
static_cast<T*
>(inputData->
getBuf(bandIdx));
534 T np =
static_cast<T
>(inputData->
getNullPix(bandIdx));
535 T minP =
static_cast<T
>(inputData->
getMinPix(bandIdx));
536 T maxP =
static_cast<T
>(inputData->
getMaxPix(bandIdx));
538 if(inputBuf&&outputBuf)
540 for(
y = 0;
y < height; ++
y)
542 for(
x = 0;
x < width; ++
x)
544 if( (*inputBuf) != np)
546 v1 = (double)inputBuf[0] - (
double)(inputBuf[1]);
547 v2 = (double)inputBuf[0] - (
double)inputBuf[rowIncrement];
548 value = sqrt(v1*v1 + v2*v2);
550 if((value == np) || (value < minP))
551 *outputBuf = (
static_cast<T
>(minP));
552 else if(value > maxP)
553 *outputBuf = (
static_cast<T
>(maxP));
555 *outputBuf = (
static_cast<T
>(value));
588 for(bandIdx = 0; bandIdx < numberOfBands; ++bandIdx)
590 T* inputBuf =
static_cast<T*
>(inputData->
getBuf(bandIdx));
592 T np =
static_cast<T
>(inputData->
getNullPix(bandIdx));
593 T minP =
static_cast<T
>(inputData->
getMinPix(bandIdx));
594 T maxP =
static_cast<T
>(inputData->
getMaxPix(bandIdx));
596 if(inputBuf&&outputBuf)
598 for(
y = 0;
y < height; ++
y)
600 for(
x = 0;
x < width; ++
x)
602 if( (*(inputBuf + rowIncrement + 1) != np))
605 value = fabs(((
double)inputBuf[rowIncrement + 1]*4.0) -
606 ((
double)inputBuf[1] + (
double)inputBuf[rowIncrement] + (
double)inputBuf[rowIncrement + 2] + (
double)inputBuf[rowIncrement2+1]));
611 *outputBuf = (
static_cast<T
>(minP));
613 else if(value > maxP)
615 *outputBuf = (
static_cast<T
>(maxP));
619 *outputBuf = (
static_cast<T
>(value));
651 for(bandIdx = 0; bandIdx < numberOfBands; ++bandIdx)
654 T* inputBuf =
static_cast<T*
>(inputData->
getBuf(bandIdx));
656 T np =
static_cast<T
>(inputData->
getNullPix(bandIdx));
658 if(inputBuf&&outputBuf)
666 for(
y = 0;
y < height; ++
y)
668 for(
x = 0;
x < width; ++
x)
670 if (inB[1+rowIncrement] != np)
674 max<T>(inB[0],inB[1]),
675 max<T>(inB[2],inB[rowIncrement])),
677 max<T>(inB[rowIncrement+2],inB[rowIncrement2]),
678 max<T>(inB[rowIncrement2+1],inB[rowIncrement2+2])
696 const char* prefix)
const 710 const char* value = kwl.
find(prefix,
16 bit unsigned integer (15 bits used)
virtual ossim_uint32 getWidth() const
virtual bool isSourceEnabled() const
RTTI_DEF1(ossimEdgeFilter, "ossimEdgeFilter", ossimImageSourceFilter)
virtual void setProperty(ossimRefPtr< ossimProperty > property)
virtual const ossim_float64 * getMaxPix() const
void runLaplacianFilter(T dummyVariable, ossimRefPtr< ossimImageData > inputData)
virtual ossim_uint32 getNumberOfBands() const
Represents serializable keyword/value map.
virtual void setProperty(ossimRefPtr< ossimProperty > property)
const char * find(const char *key) const
void runFilter(T dummyVariable, ossimRefPtr< ossimImageData > inputData)
bool contains(char aChar) const
virtual ossimRefPtr< ossimProperty > getProperty(const ossimString &name) const
ossimEdgeFilter(ossimObject *owner=NULL)
const ossimIpt & ul() const
virtual ossim_uint32 getHeight() const
virtual void setFilterType(const ossimString &filterType)
The filter type can be one of the following strings.
16 bit unsigned integer (14 bits used)
16 bit unsigned integer (13 bits used)
virtual void setReadOnlyFlag(bool flag)
unsigned short ossim_uint16
virtual void initialize()
Initialize the data buffer.
virtual bool loadState(const ossimKeywordlist &kwl, const char *prefix=0)
Method to the load (recreate) the state of an object from a keyword list.
virtual void initialize()
void add(const char *prefix, const ossimKeywordlist &kwl, bool overwrite=true)
virtual void getFilterTypeNames(std::vector< ossimString > &filterNames) const
static ossimImageDataFactory * instance()
virtual ossimDataObjectStatus validate() const
signed short ossim_sint16
virtual void getPropertyNames(std::vector< ossimString > &propertyNames) const
virtual void setImageRectangleAndBands(const ossimIrect &rect, ossim_uint32 numberOfBands)
virtual void getPropertyNames(std::vector< ossimString > &propertyNames) const
unsigned int ossim_uint32
virtual const ossim_float64 * getNullPix() const
32 bit normalized floating point
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
static ossimString downcase(const ossimString &aString)
virtual ossimRefPtr< ossimImageData > create(ossimSource *owner, ossimScalarType scalar, ossim_uint32 bands=1) const
ossimString theFilterType
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 ossimString getFilterType() const
virtual bool saveState(ossimKeywordlist &kwl, const char *prefix=0) const
Method to save the state of an object to a keyword list.
void runRobertsFilter(T dummyVariable, ossimRefPtr< ossimImageData > inputData)
virtual const void * getBuf() const
void runLocalMax8Filter(T dummyVariable, ossimRefPtr< ossimImageData > inputData)
virtual ossimRefPtr< ossimProperty > getProperty(const ossimString &name) const
void adjustRequestRect(ossimIrect &requestRect) const
ossimRefPtr< ossimImageData > theTile
virtual void initialize()
virtual bool saveState(ossimKeywordlist &kwl, const char *prefix=0) const
Method to save the state of an object to a keyword list.
virtual ossimRefPtr< ossimImageData > getTile(const ossimIrect &rect, ossim_uint32 resLevel=0)
void runSimpleFilter(T dummyVariable, ossimRefPtr< ossimImageData > inputData)
void runPrewittFilter(T dummyVariable, ossimRefPtr< ossimImageData > inputData)
unsigned char ossim_uint8
void runSobelFilter(T dummyVariable, ossimRefPtr< ossimImageData > inputData)
OSSIMDLLEXPORT std::ostream & ossimNotify(ossimNotifyLevel level=ossimNotifyLevel_WARN)
void setCacheRefreshBit()
const ossimString & getName() const
virtual ossimRefPtr< ossimImageData > getTile(const ossimIpt &origin, ossim_uint32 resLevel=0)
16 bit unsigned integer (12 bits used)