ClassNames.h 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. /**
  2. * @file ClassNames.h
  3. * @brief simple interface for class name confusion
  4. * @author Erik Rodner
  5. * @date 02/08/2008
  6. */
  7. #ifndef CLASSNAMESINCLUDE
  8. #define CLASSNAMESINCLUDE
  9. #include <vislearning/nice_nonvis.h>
  10. #include <string>
  11. #include <map>
  12. #include "core/basics/Config.h"
  13. #include "core/basics/Persistent.h"
  14. namespace OBJREC {
  15. /** simple interface for class name confusion */
  16. class ClassNames : public NICE::Persistent
  17. {
  18. protected:
  19. std::map<std::string, std::string> tbl_code_text;
  20. std::map<std::string, std::string> tbl_text_code;
  21. std::map<int, std::string> tbl_classno_code;
  22. std::map<std::string, int> tbl_code_classno;
  23. std::map<long, int> tbl_color_classno;
  24. std::map<int, long> tbl_classno_color;
  25. int maxClassNo;
  26. public:
  27. /** simple constructor */
  28. ClassNames();
  29. /** copy constructor */
  30. ClassNames ( const ClassNames & cn );
  31. /** create sub selection */
  32. ClassNames ( const ClassNames & cn,
  33. const std::string & classselection );
  34. /** simple destructor */
  35. virtual ~ClassNames();
  36. /** get the readable class number of a class number */
  37. std::string text ( int classno ) const;
  38. /** get the class code (e.g. ascii code) of a class number */
  39. std::string code ( int classno ) const;
  40. /** get the class number corresponding to the code */
  41. int classno ( std::string code ) const;
  42. /** get the class number corresponding to the name */
  43. int classnoFromText ( std::string text ) const;
  44. /** number of classes */
  45. int numClasses () const;
  46. void getSelection ( const std::string & classselection,
  47. std::set<int> & classnos ) const;
  48. /** add new class information
  49. * @param classno class number
  50. * @param code class code (such as ascii number or just the name)
  51. * @param text class name as readable ascii representation
  52. */
  53. void addClass ( int classno, const std::string & code,
  54. const std::string & text );
  55. bool readFromConfig ( const NICE::Config & datasetconf,
  56. const std::string & classselection );
  57. /** is there any class with this class number */
  58. bool existsClassno ( int classno ) const;
  59. /** is there any class with this class code */
  60. bool existsClassCode ( const std::string & classcode ) const;
  61. int getMaxClassno () const;
  62. void getRGBColor ( int classno, int & r, int & g, int & b ) const;
  63. void getClassnoFromColor ( int & classno, int r, int g, int b ) const;
  64. /** colorize a labeled image using color information given in the class
  65. * information file */
  66. void labelToRGB ( const NICE::Image & img, NICE::ColorImage & rgb ) const;
  67. int getBackgroundClass () const;
  68. /** restore classnames in the format <classtext> <classcode> <classno> */
  69. void restore (std::istream & is, int format = 0);
  70. /** store classnames in the format <classtext> <classcode> <classno> */
  71. void store (std::ostream & os, int format = 0) const;
  72. /** clear class information */
  73. void clear ();
  74. };
  75. } // namespace
  76. #endif