00001 #ifndef __BILATERAL_H__
00002 #define __BILATERAL_H__
00003
00004 #include <vector>
00005
00006 #include <stdint.h>
00007
00008 #include "utils.h"
00009 #include "image.h"
00010 #include "processor.h"
00011 #include "thread.h"
00012
00013 namespace spectral
00014 {
00015
00017
00018 class MlBilateral : public Processor
00019 {
00020 public:
00021 MlBilateral();
00022 ~MlBilateral();
00023
00024
00025
00026 virtual uint32_t GetInterface(
00027 std::list<std::pair<uint32_t, uint32_t> > &mandatory,
00028 std::list<std::pair<uint32_t, uint32_t> > &optional) const;
00029
00030
00031 virtual bool SetImage(uint32_t slot, const Image *img);
00032
00033
00034 virtual void SetParameters(const Parameters *);
00035
00036
00037 virtual Image *Process(void);
00038
00039
00040 virtual void ClearImage(uint32_t slot);
00041
00042 protected:
00043
00044
00045 virtual void GetParameters(Parameters *) const;
00046
00047 private:
00048 void CrunchImage(const Image *reference,
00049 const Image *input,
00050 int32_t radius,
00051 bool wrap_horizontal,
00052 bool wrap_vertical,
00053 uint32_t pass,
00054 uint32_t num_passes,
00055 Image *result);
00056
00057
00058 void CleanUp(void);
00059 void CreateLayers(void);
00060 Image *Generate(void);
00061
00062 const Image *m_lumImage;
00063 Image *m_baseLayer;
00064 std::vector<Image *> m_layers;
00065
00066 float m_large_threshold;
00067 float m_small_threshold;
00068
00069 float m_large_contrast;
00070 float m_medium_contrast;
00071 float m_small_contrast;
00072
00073 int32_t m_base_radius;
00074 int32_t m_num_layers;
00075 bool m_wrap_horizontal, m_wrap_vertical;
00076 };
00077
00078 }
00079
00080 #endif