Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members | Related Pages

ImageCompress.h

Go to the documentation of this file.
00001 
00007 #ifndef IMAGE_COMPRESS_H
00008 #define IMAGE_COMPRESS_H
00009 
00010 #include "annie/defines.h"
00011 #include "annie/MultiLayerNetwork.h"
00012 #include <vector>
00013 
00014 namespace annie {
00015 class TrainingSet;
00016 class Image;
00020 /*abstract */class ImageCompressor  {
00021   public:
00022     virtual ~ImageCompressor() {}   //be happy, my dear compiler :)
00023     class PartialListener   {
00024       public:
00025         virtual void showProgress(const Image &partialResult) = 0;
00026     };
00027     virtual Image *compress(const Image &i) = 0;
00028 
00033     void setPartialListener(PartialListener *pl)    {   _partialListener = pl; }
00034   protected:
00035     void showPartialProgress(const Image &partialResult)    { if( _partialListener)  _partialListener->showProgress(partialResult); }
00036     ImageCompressor() :  _partialListener(NULL) {}
00037   private:
00038     PartialListener *_partialListener;
00039 };
00040 
00042 typedef std::vector<annie::Image *> Images;
00043 
00048 /*abstract */class TileCompressor : public ImageCompressor  {
00049   public:
00050     TileCompressor(uint partSize) : _partSize(partSize) {}
00051     uint getPartSize()  const { return _partSize; }
00052     virtual Image *compress(const Image &i);
00053     virtual Image *compressTiles(const Images &images) = 0;
00054  
00058     Images cut(const Image &source) const;
00059   protected:
00060     uint _partSize; //<some implementations may allow to change it during lifetime
00061     uint _px, _py;  //< valid only during compress - count of cols and rows
00062 };
00063 
00068 class MLPCompressor : public TileCompressor, public ValueUpdateListener     
00069 {
00070   public:
00071     enum { RESHOW = 20 };   //redraw period
00075     MLPCompressor(uint partSize, uint hidden1, uint hidden2, PublicValues &pv = defaultControl);
00076     virtual Image *compressTiles(const Images &images);
00077     virtual void valueChanged(const Value &val);
00078     
00080     MultiLayerNetwork &getNet() { return _net; }
00081 
00083     void fillExamples(const Images &images, TrainingSet &dest); //TS is not a result because pass by value of TS is slowwwww
00084   protected:
00085     MultiLayerNetwork _net;
00086     std::vector<Vector> vectored;   //< vectored tiles
00087 
00088     //construct result using vectored and the net
00089     Image *getResult();
00090     Creal _reshow;  //re-show period
00091 };
00092 
00093 
00094 
00095     
00096         
00097     // utility functions for creating images
00098     Images makeSubimages(const annie::Image &i, unsigned xSize, unsigned ySize);
00099 
00102     TrainingSet *makeSubImageExamples(const Images &outImages, std::vector<Vector> &outExamples);
00103 
00109     void runCompressor(ImageCompressor &ic, const char *image, bool graay=false);
00110 
00111 }   //annie
00112 #endif

Generated on Fri Jun 18 13:18:10 2004 for Annie by doxygen 1.3.5