triclops.h
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef __FIREVISION_STEREO_TRICLOPS_H_
00025 #define __FIREVISION_STEREO_TRICLOPS_H_
00026
00027 #include <stereo/stereo_processor.h>
00028 #include <sys/types.h>
00029
00030 namespace firevision {
00031 #if 0
00032 }
00033 #endif
00034
00035 class Bumblebee2Camera;
00036 class Camera;
00037 class TriclopsStereoProcessorData;
00038 class RectificationLutInfoBlock;
00039
00040 class TriclopsStereoProcessor : public StereoProcessor
00041 {
00042 public:
00043 TriclopsStereoProcessor(unsigned int width, unsigned int height,
00044 const char *context_file);
00045 TriclopsStereoProcessor(Camera *camera);
00046 virtual ~TriclopsStereoProcessor();
00047
00048 virtual unsigned int output_image_width();
00049 virtual unsigned int output_image_height();
00050 virtual bool subpixel_interpolation();
00051 virtual bool edge_correlation();
00052 virtual bool lowpass();
00053 virtual int disparity_range_min();
00054 virtual int disparity_range_max();
00055 virtual unsigned int edge_masksize();
00056 virtual unsigned int stereo_masksize();
00057 virtual bool surface_validation();
00058 virtual bool texture_validation();
00059 virtual unsigned char disparity_mapping_min();
00060 virtual unsigned char disparity_mapping_max();
00061 virtual bool disparity_mapping();
00062
00063 virtual void set_output_image_size(unsigned int width, unsigned int height);
00064 virtual void set_subpixel_interpolation(bool enabled);
00065 virtual void set_edge_correlation(bool enabled);
00066 virtual void set_lowpass(bool enabled);
00067 virtual void set_disparity_range(int min, int max);
00068 virtual void set_edge_masksize(unsigned int mask_size);
00069 virtual void set_stereo_masksize(unsigned int mask_size);
00070 virtual void set_surface_validation(bool enabled);
00071 virtual void set_texture_validation(bool enabled);
00072 virtual void set_disparity_mapping_range(unsigned char min, unsigned char max);
00073 virtual void set_disparity_mapping(bool enabled);
00074
00075 virtual bool get_xyz(unsigned int px, unsigned int py,
00076 float *x, float *y, float *z);
00077
00078 virtual bool get_world_xyz(unsigned int px, unsigned int py,
00079 float *x, float *y, float *z);
00080
00081 virtual void set_raw_buffer(unsigned char *raw16_buffer);
00082 virtual void preprocess_stereo();
00083 virtual void calculate_disparity(ROI *roi = 0);
00084 virtual void calculate_yuv(bool both = false);
00085 virtual unsigned char * disparity_buffer();
00086 virtual size_t disparity_buffer_size() const;
00087 virtual unsigned char * yuv_buffer();
00088 virtual unsigned char * auxiliary_yuv_buffer();
00089
00090 void generate_rectification_lut(const char *lut_file);
00091 bool verify_rectification_lut(const char *lut_file);
00092
00093 virtual void getall_world_xyz(float ***buffer, int hoff, int voff, int width, int height, float *settings);
00094
00095 private:
00096 void get_triclops_context_from_camera();
00097 void deinterlace_green( unsigned char* src,
00098 unsigned char* dest,
00099 unsigned int width,
00100 unsigned int height);
00101
00102 void create_buffers();
00103 void setup_triclops();
00104
00105
00106 private:
00107 Bumblebee2Camera *bb2;
00108 TriclopsStereoProcessorData *data;
00109
00110 unsigned char *buffer_rgb;
00111 unsigned char *buffer_green;
00112 unsigned char *buffer_rgb_left;
00113 unsigned char *buffer_rgb_right;
00114 unsigned char *buffer_rgb_center;
00115 unsigned char *buffer_yuv_left;
00116 unsigned char *buffer_yuv_right;
00117 unsigned char *buffer_yuv_center;
00118 unsigned char *_buffer;
00119 unsigned char *buffer_deinterlaced;
00120 unsigned char *buffer_raw16;
00121
00122 unsigned int _width;
00123 unsigned int _height;
00124
00125 unsigned int _output_image_width;
00126 unsigned int _output_image_height;
00127
00128 char *_context_file;
00129 };
00130
00131 }
00132
00133 #endif