OSSIM - Open Source Software Image Map  Version 1.9.0 (20180803)
ossimImageSourceFactory.cpp
Go to the documentation of this file.
1 //*******************************************************************
2 // Copyright (C) 2000 ImageLinks Inc.
3 //
4 // License: LGPL
5 //
6 // See LICENSE.txt file in the top level directory for more details.
7 //
8 // Author: Garrett Potts
9 //
10 // Description: This is the image source factory.
11 // It will try to create image filters
12 // first then it will try the image writers
13 // and image handlers (image readers)
14 //
15 //*************************************************************************
16 // $Id: ossimImageSourceFactory.cpp 22981 2014-11-13 22:08:39Z okramer $
17 
99 
100 // Not sure if we want to keep this here
102 
103 #include <ossim/base/ossimTrace.h>
104 
106 
107 static ossimTrace traceDebug("ossimImageSourceFactory:debug");
108 
110 
112 {
113  theInstance = NULL;
115 }
117 {
118  if(!theInstance)
119  {
121  }
122 
123  return theInstance;
124 }
125 
127 {
128 
129  // lets do the filters first
130  if( name == STATIC_TYPE_NAME(ossimBandSelector) ||
131  name == "ossimNativeBandSelectorTileSource" )
132  {
133  //---
134  // For backwards compatibility check old name:
135  // "ossimNativeBandSelectorTileSource"
136  //---
137  return new ossimBandSelector;
138  }
139  else if(name == STATIC_TYPE_NAME(ossimMultiThreadSequencer) || name == "ossimMultiThreadSequencer")
140  {
141  return new ossimMultiThreadSequencer;
142  }
143  else if(name == STATIC_TYPE_NAME(ossimNullPixelFlip))
144  {
145  return new ossimNullPixelFlip;
146  }
147  else if(name == STATIC_TYPE_NAME(ossimElevRemapper))
148  {
149  return new ossimElevRemapper;
150  }
151  else if(name == STATIC_TYPE_NAME(ossimImageRenderer))
152  {
153  return new ossimImageRenderer;
154  }
155  else if(name == STATIC_TYPE_NAME(ossimCacheTileSource))
156  {
157  return new ossimCacheTileSource;
158  }
160  {
161  return new ossimColorNormalizedFusion;
162  }
164  {
165  return new ossimLocalCorrelationFusion;
166  }
167  else if(name == STATIC_TYPE_NAME(ossimSFIMFusion))
168  {
169  return new ossimSFIMFusion;
170  }
171  else if(name == STATIC_TYPE_NAME(ossimBlendMosaic))
172  {
173  return new ossimBlendMosaic;
174  }
175  else if(name == STATIC_TYPE_NAME(ossimMaxMosaic))
176  {
177  return new ossimMaxMosaic;
178  }
179  else if(name == STATIC_TYPE_NAME(ossimHistogramRemapper))
180  {
181  return new ossimHistogramRemapper;
182  }
183  else if(name == STATIC_TYPE_NAME(ossimImageMosaic))
184  {
185  return new ossimImageMosaic;
186  }
187  else if(name == STATIC_TYPE_NAME(ossimElevationMosaic))
188  {
189  return new ossimElevationMosaic;
190  }
191  else if(name == STATIC_TYPE_NAME(ossimPiecewiseRemapper))
192  {
193  return new ossimPiecewiseRemapper;
194  }
196  {
197  return new ossimImageSourceSequencer;
198  }
200  {
201  return new ossimClosestToCenterCombiner;
202  }
203  else if(name == STATIC_TYPE_NAME(ossimRgbToGreyFilter))
204  {
205  return new ossimRgbToGreyFilter;
206  }
207  else if(name == STATIC_TYPE_NAME(ossimNBandToIndexFilter))
208  {
209  return new ossimNBandToIndexFilter;
210  }
211  else if(name == STATIC_TYPE_NAME(ossimImageChain))
212  {
213  return new ossimImageChain;
214  }
215  else if(name == STATIC_TYPE_NAME(ossimPolyCutter))
216  {
217  return new ossimPolyCutter;
218  }
219  else if(name == STATIC_TYPE_NAME(ossimGeoPolyCutter))
220  {
221  return new ossimGeoPolyCutter;
222  }
224  {
225  return new ossimJpegYCbCrToRgbSource;
226  }
228  {
229  return new ossimRgbToJpegYCbCrSource;
230  }
231  else if(name == STATIC_TYPE_NAME(ossimHsiToRgbSource))
232  {
233  return new ossimHsiToRgbSource;
234  }
235  else if(name == STATIC_TYPE_NAME(ossimRgbToHsiSource))
236  {
237  return new ossimRgbToHsiSource;
238  }
239  else if(name == STATIC_TYPE_NAME(ossimHsvToRgbSource))
240  {
241  return new ossimHsvToRgbSource;
242  }
243  else if(name == STATIC_TYPE_NAME(ossimRgbToHsvSource))
244  {
245  return new ossimRgbToHsvSource;
246  }
248  {
249  return new ossimHistogramEqualization;
250  }
252  {
253  return new ossimHistogramMatchFilter;
254  }
256  {
258  }
260  {
261  return new ossimGeoAnnotationSource;
262  }
263  else if(name == STATIC_TYPE_NAME(ossimConvolutionSource))
264  {
265  return new ossimConvolutionSource;
266  }
268  {
269  return new ossimSICDToDetectedImage;
270  }
272  {
274  }
275  else if(name == STATIC_TYPE_NAME(ossimBrightnessMatch))
276  {
277  return new ossimBrightnessMatch;
278  }
279  else if(name == STATIC_TYPE_NAME(ossimScalarRemapper))
280  {
281  return new ossimScalarRemapper;
282  }
283  else if(name == STATIC_TYPE_NAME(ossimBandMergeSource))
284  {
285  return new ossimBandMergeSource;
286  }
287  else if(name == STATIC_TYPE_NAME(ossimFeatherMosaic))
288  {
289  return new ossimFeatherMosaic;
290  }
291  else if(name == STATIC_TYPE_NAME(ossimGridRemapSource))
292  {
293  return new ossimGridRemapSource;
294  }
295  else if(name == STATIC_TYPE_NAME(ossimEquationCombiner))
296  {
297  return new ossimEquationCombiner;
298  }
300  {
301  return new ossimConvolutionFilter1D;
302  }
304  {
305  return new ossimImageGaussianFilter;
306  }
307  // Not sure if we want to keep this here
308  else if(name == STATIC_TYPE_NAME(ossimAtbController))
309  {
310  return new ossimAtbController;
311  }
313  {
314  return new ossimIndexToRgbLutFilter;
315  }
317  {
318  return new ossimBumpShadeTileSource;
319  }
320  else if(name == STATIC_TYPE_NAME(ossimSubImageTileSource))
321  {
322  return new ossimSubImageTileSource;
323  }
324  else if(name == STATIC_TYPE_NAME(ossimRLevelFilter))
325  {
326  return new ossimRLevelFilter;
327  }
328  else if(name == STATIC_TYPE_NAME(ossimBandClipFilter))
329  {
330  return new ossimBandClipFilter;
331  }
332  else if(name == STATIC_TYPE_NAME(ossimHsiRemapper))
333  {
334  return new ossimHsiRemapper;
335  }
336  else if(name == STATIC_TYPE_NAME(ossimHistogramWriter))
337  {
338  return new ossimHistogramWriter;
339  }
341  {
342  return new ossimImageHistogramSource;
343  }
344  else if(name == STATIC_TYPE_NAME(ossimRectangleCutFilter))
345  {
346  return new ossimRectangleCutFilter;
347  }
349  {
350  return new ossimCastTileSourceFilter;
351  }
352  // all the image handlers
354  {
356  }
357  else if(name == STATIC_TYPE_NAME(ossimImageSharpenFilter))
358  {
359  return new ossimImageSharpenFilter;
360  }
362  {
363  return new ossim3x3ConvolutionFilter;
364  }
365  else if(name == STATIC_TYPE_NAME(ossimOrthoImageMosaic))
366  {
367  return new ossimOrthoImageMosaic;
368  }
369  else if(name == STATIC_TYPE_NAME(ossimPiecewiseRemapper))
370  {
371  return new ossimPiecewiseRemapper;
372  }
374  {
375  return new ossimMapCompositionSource;
376  }
377  else if(name == STATIC_TYPE_NAME(ossimElevImageSource))
378  {
379  return new ossimElevImageSource;
380  }
381  else if(name == STATIC_TYPE_NAME(ossimMaskFilter))
382  {
383  return new ossimMaskFilter;
384  }
386  {
388  }
389  else if(name == STATIC_TYPE_NAME(ossimBandAverageFilter))
390  {
391  return new ossimBandAverageFilter;
392  }
393  else if(name == STATIC_TYPE_NAME(ossimPixelFlipper))
394  {
395  return new ossimPixelFlipper();
396  }
397  else if(name == STATIC_TYPE_NAME(ossimScaleFilter))
398  {
399  return new ossimScaleFilter();
400  }
402  {
403  return new ossimImageToPlaneNormalFilter();
404  }
406  {
408  }
410  {
412  }
413  else if(name == STATIC_TYPE_NAME(ossimAtCorrRemapper))
414  {
415  return new ossimAtCorrRemapper();
416  }
417  else if(name == STATIC_TYPE_NAME(ossimAtCorrGridRemapper))
418  {
419  return new ossimAtCorrGridRemapper();
420  }
422  {
423  return new ossimEastingNorthingCutter();
424  }
425  else if(name == STATIC_TYPE_NAME(ossimEdgeFilter))
426  {
427  return new ossimEdgeFilter();
428  }
429  else if(name == STATIC_TYPE_NAME(ossimFftFilter))
430  {
431  return new ossimFftFilter();
432  }
433  else if(name == STATIC_TYPE_NAME(ossimWatermarkFilter))
434  {
435  return new ossimWatermarkFilter();
436  }
438  {
439  return new ossimImageGaussianFilter();
440  }
441  else if(name == STATIC_TYPE_NAME(ossimTrimFilter))
442  {
443  return new ossimTrimFilter();
444  }
445  else if(name == STATIC_TYPE_NAME(ossimTwoColorView))
446  {
447  return new ossimTwoColorView;
448  }
450  {
451  return new ossimImageHistogramSource();
452  }
453  else if(name == STATIC_TYPE_NAME(ossimImageSourceFilter))
454  {
455  // this is just a pass through source
456  return new ossimImageSourceFilter;
457  }
458  else if(name == STATIC_TYPE_NAME(ossimMemoryImageSource))
459  {
460  // this is just a pass through source
461  return new ossimMemoryImageSource;
462  }
463  else if(name == STATIC_TYPE_NAME(ossimDilationFilter))
464  {
465  return new ossimDilationFilter();
466  }
467  else if(name == STATIC_TYPE_NAME(ossimErosionFilter))
468  {
469  return new ossimErosionFilter();
470  }
471  return NULL;
472 }
473 
475  const char* prefix)const
476 {
477  static const char* MODULE = "ossimImageSourceFactory::createSource";
478 
479  ossimString copyPrefix;
480  if (prefix)
481  {
482  copyPrefix = prefix;
483  }
484 
485  ossimObject* result = NULL;
486 
487  if(traceDebug())
488  {
489  CLOG << "looking up type keyword for prefix = " << copyPrefix << endl;
490  }
491 
492  const char* lookup = kwl.find(copyPrefix, "type");
493  if(lookup)
494  {
495  ossimString name = lookup;
496  result = createObject(name);
497 
498  if(result)
499  {
500  if(traceDebug())
501  {
502  CLOG << "found source " << result->getClassName() << " now loading state" << endl;
503  }
504  result->loadState(kwl, copyPrefix.c_str());
505  }
506  else
507  {
508  if(traceDebug())
509  {
510  CLOG << "type not found " << lookup << endl;
511  }
512  }
513  }
514  else
515  {
516  if(traceDebug())
517  {
518  CLOG << "type keyword not found" << endl;
519  }
520  }
521  return result;
522 }
523 
524 void ossimImageSourceFactory::getTypeNameList(std::vector<ossimString>& typeList)const
525 {
526  typeList.push_back(STATIC_TYPE_NAME(ossimBandSelector));
527  typeList.push_back(STATIC_TYPE_NAME(ossimMultiThreadSequencer));
528  typeList.push_back(STATIC_TYPE_NAME(ossimImageRenderer));
529  typeList.push_back(STATIC_TYPE_NAME(ossimCacheTileSource));
530  typeList.push_back(STATIC_TYPE_NAME(ossimBlendMosaic));
531  typeList.push_back(STATIC_TYPE_NAME(ossimMaxMosaic));
532  typeList.push_back(STATIC_TYPE_NAME(ossimNullPixelFlip));
533  typeList.push_back(STATIC_TYPE_NAME(ossimElevRemapper));
534  typeList.push_back(STATIC_TYPE_NAME(ossimColorNormalizedFusion));
535  typeList.push_back(STATIC_TYPE_NAME(ossimLocalCorrelationFusion));
536  typeList.push_back(STATIC_TYPE_NAME(ossimSFIMFusion));
537  typeList.push_back(STATIC_TYPE_NAME(ossimHistogramRemapper));
538  typeList.push_back(STATIC_TYPE_NAME(ossimImageMosaic));
539  typeList.push_back(STATIC_TYPE_NAME(ossimElevationMosaic));
540  typeList.push_back(STATIC_TYPE_NAME(ossimClosestToCenterCombiner));
541  typeList.push_back(STATIC_TYPE_NAME(ossimRgbToGreyFilter));
542  typeList.push_back(STATIC_TYPE_NAME(ossimNBandToIndexFilter));
543  typeList.push_back(STATIC_TYPE_NAME(ossimImageChain));
544  typeList.push_back(STATIC_TYPE_NAME(ossimPolyCutter));
545  typeList.push_back(STATIC_TYPE_NAME(ossimGeoPolyCutter));
546  typeList.push_back(STATIC_TYPE_NAME(ossimJpegYCbCrToRgbSource));
547  typeList.push_back(STATIC_TYPE_NAME(ossimRgbToJpegYCbCrSource));
548  typeList.push_back(STATIC_TYPE_NAME(ossimHsiToRgbSource));
549  typeList.push_back(STATIC_TYPE_NAME(ossimRgbToHsiSource));
550  typeList.push_back(STATIC_TYPE_NAME(ossimHsvToRgbSource));
551  typeList.push_back(STATIC_TYPE_NAME(ossimRgbToHsvSource));
552  typeList.push_back(STATIC_TYPE_NAME(ossimHistogramEqualization));
553  typeList.push_back(STATIC_TYPE_NAME(ossimHistogramMatchFilter));
555  typeList.push_back(STATIC_TYPE_NAME(ossimGeoAnnotationSource));
556  typeList.push_back(STATIC_TYPE_NAME(ossimConvolutionSource));
557  typeList.push_back(STATIC_TYPE_NAME(ossimSICDToDetectedImage));
558  typeList.push_back(STATIC_TYPE_NAME(ossimBrightnessContrastSource));
559  typeList.push_back(STATIC_TYPE_NAME(ossimBrightnessMatch));
560  typeList.push_back(STATIC_TYPE_NAME(ossimScalarRemapper));
561  typeList.push_back(STATIC_TYPE_NAME(ossimBandMergeSource));
562  typeList.push_back(STATIC_TYPE_NAME(ossimFeatherMosaic));
563  typeList.push_back(STATIC_TYPE_NAME(ossimGridRemapSource));
564  // Not sure if we want to keep this here
565  typeList.push_back(STATIC_TYPE_NAME(ossimAtbController));
566  typeList.push_back(STATIC_TYPE_NAME(ossimIndexToRgbLutFilter));
567  typeList.push_back(STATIC_TYPE_NAME(ossimBumpShadeTileSource));
568  typeList.push_back(STATIC_TYPE_NAME(ossimSubImageTileSource));
569  typeList.push_back(STATIC_TYPE_NAME(ossimRLevelFilter));
570  typeList.push_back(STATIC_TYPE_NAME(ossimBandClipFilter));
571  typeList.push_back(STATIC_TYPE_NAME(ossimHsiRemapper));
572  typeList.push_back(STATIC_TYPE_NAME(ossimHistogramWriter));
573  typeList.push_back(STATIC_TYPE_NAME(ossimImageHistogramSource));
574  typeList.push_back(STATIC_TYPE_NAME(ossimRectangleCutFilter));
575  typeList.push_back(STATIC_TYPE_NAME(ossimElevImageSource));
576 
578  typeList.push_back(STATIC_TYPE_NAME(ossimImageSharpenFilter));
579  typeList.push_back(STATIC_TYPE_NAME(ossim3x3ConvolutionFilter));
580  typeList.push_back(STATIC_TYPE_NAME(ossimOrthoImageMosaic));
581  typeList.push_back(STATIC_TYPE_NAME(ossimPiecewiseRemapper));
582  typeList.push_back(STATIC_TYPE_NAME(ossimMapCompositionSource));
583  typeList.push_back(STATIC_TYPE_NAME(ossimCastTileSourceFilter));
584  typeList.push_back(STATIC_TYPE_NAME(ossimEquationCombiner));
585  typeList.push_back(STATIC_TYPE_NAME(ossimConvolutionFilter1D));
586  typeList.push_back(STATIC_TYPE_NAME(ossimImageGaussianFilter));
587  typeList.push_back(STATIC_TYPE_NAME(ossimMaskFilter));
589  typeList.push_back(STATIC_TYPE_NAME(ossimBandAverageFilter));
590  typeList.push_back(STATIC_TYPE_NAME(ossimPixelFlipper));
591  typeList.push_back(STATIC_TYPE_NAME(ossimScaleFilter));
592  typeList.push_back(STATIC_TYPE_NAME(ossimImageToPlaneNormalFilter));
595  typeList.push_back(STATIC_TYPE_NAME(ossimAtCorrRemapper));
596  typeList.push_back(STATIC_TYPE_NAME(ossimAtCorrGridRemapper));
597  typeList.push_back(STATIC_TYPE_NAME(ossimEastingNorthingCutter));
598  typeList.push_back(STATIC_TYPE_NAME(ossimEdgeFilter));
599  typeList.push_back(STATIC_TYPE_NAME(ossimFftFilter));
600  typeList.push_back(STATIC_TYPE_NAME(ossimWatermarkFilter));
601  typeList.push_back(STATIC_TYPE_NAME(ossimImageGaussianFilter));
602  typeList.push_back(STATIC_TYPE_NAME(ossimTrimFilter));
603  typeList.push_back(STATIC_TYPE_NAME(ossimTwoColorView));
604  typeList.push_back(STATIC_TYPE_NAME(ossimImageHistogramSource));
605  typeList.push_back(STATIC_TYPE_NAME(ossimImageSourceFilter));
606  typeList.push_back(STATIC_TYPE_NAME(ossimMemoryImageSource));
607  typeList.push_back(STATIC_TYPE_NAME(ossimPiecewiseRemapper));
608  typeList.push_back(STATIC_TYPE_NAME(ossimImageSourceSequencer));
609  typeList.push_back(STATIC_TYPE_NAME(ossimDilationFilter));
610  typeList.push_back(STATIC_TYPE_NAME(ossimErosionFilter));
611 }
612 
613 // Hide from use...
616 {}
617 
620 {}
621 
623 {
624  return *this;
625 }
This allows one to assign a value to a group of bands.
This uses a derivative of Blinn&#39;s bump function to compute a 3-D looking image.
This is a 2 color view of the input.
#define CLOG
Definition: ossimTrace.h:23
class ossimEdgeFilter
This filter outputs a single band that is the weighted average of all the input bands retrieved from ...
Represents serializable keyword/value map.
const char * find(const char *key) const
This implements a closest to center combiner.
virtual bool loadState(const ossimKeywordlist &kwl, const char *prefix=0)
Will combine the input data based on a supplied equation.
virtual void getTypeNameList(std::vector< ossimString > &typeList) const
static ossimObjectFactoryRegistry * instance()
virtual ossimString getClassName() const
Definition: ossimObject.cpp:64
Performs a spatial blend accross overlapping regions.
This class imlements the fusion algorithm from the paper:
An image mosaic is a simple combiner that will just do a simple mosaic.
static ossimImageSourceFactory * instance()
#define STATIC_TYPE_NAME(T)
Definition: ossimRtti.h:325
class for symmetric Gaussian filtering implemented as two separable horizontal/vertical gaussian filt...
void unregisterFactory(T *factory)
Will remove the factory from the registry.
Cache Tile Source.
const ossimImageSourceFactory & operator=(ossimImageSourceFactory &)
class for vertical or horizontal convolution
class ossimHistogramMatchFilter
This implements a Local correlation fusion based on the paper:
class ossimWatermarkFilter Applies an image or watermark to image.
This class manages the sequencing of tile requests across multiple threads.
Class to scan pixels and flip target dn value to a replacement dn value.
const char * c_str() const
Returns a pointer to a null-terminated array of characters representing the string&#39;s contents...
Definition: ossimString.h:396
RTTI_DEF1(ossimImageSourceFactory, "ossimImageSourceFactory", ossimImageSourceFactoryBase)
static ossimImageSourceFactory * theInstance
virtual ossimObject * createObject(const ossimString &name) const
An image mosaic is a simple combiner that will just do a simple mosaic.
This class provides piecewise linear remapping of input pixels to output pixels.
An image mosaic is a simple combiner that will just do a simple mosaic.