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 bilateral
00014 {
00015
00017
00019 class Bilateral : public spectral::Processor
00020 {
00021 public:
00022 Bilateral();
00023 ~Bilateral();
00024
00025
00026
00027 virtual uint32_t GetInterface(
00028 std::list<std::pair<uint32_t, uint32_t> > &mandatory,
00029 std::list<std::pair<uint32_t, uint32_t> > &optional) const;
00030
00031
00032 virtual bool SetImage(uint32_t slot, const spectral::Image *img);
00033
00034
00035 virtual void SetParameters(const spectral::Parameters *);
00036
00037
00038 virtual spectral::Image *Process(void);
00039
00040
00041 virtual void ClearImage(uint32_t slot);
00042
00043 protected:
00044
00045
00046 virtual void GetParameters(spectral::Parameters *) const;
00047
00048 private:
00050 void CrunchImage(const spectral::Image *reference,
00051 const spectral::Image *input,
00052 int32_t radius,
00053 bool wrap_horizontal,
00054 bool wrap_vertical,
00055 uint32_t pass,
00056 uint32_t num_passes,
00057 spectral::Image *result);
00058
00059
00060 const spectral::Image *m_lumImage;
00061 int32_t m_radius;
00062 int32_t m_passes;
00063 float m_threshold;
00064 bool m_wrap_horizontal, m_wrap_vertical;
00065 };
00066
00067 }
00068
00069 #endif