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 class ImageCompressor {
00021 public:
00022 virtual ~ImageCompressor() {}
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 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;
00061 uint _px, _py;
00062 };
00063
00068 class MLPCompressor : public TileCompressor, public ValueUpdateListener
00069 {
00070 public:
00071 enum { RESHOW = 20 };
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);
00084 protected:
00085 MultiLayerNetwork _net;
00086 std::vector<Vector> vectored;
00087
00088
00089 Image *getResult();
00090 Creal _reshow;
00091 };
00092
00093
00094
00095
00096
00097
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 }
00112 #endif