Isis 3 Programmer Reference
ProcessRubberSheet.h
Go to the documentation of this file.
1 #ifndef ProcessRubberSheet_h
2 #define ProcessRubberSheet_h
3 
25 #include "Process.h"
26 #include "Buffer.h"
27 #include "Transform.h"
28 #include "Interpolator.h"
29 #include "Portal.h"
30 #include "TileManager.h"
31 
32 namespace Isis {
33  class Brick;
34 
120  class ProcessRubberSheet : public Process {
121  public:
122 
123  ProcessRubberSheet(int startSize = 128, int endSize = 8);
124 
126  virtual ~ProcessRubberSheet() {};
127 
129  // Output driven processing method for one input and output cube
130  virtual void StartProcess(Transform &trans, Interpolator &interp);
131 
132  // Input driven processing method for one input and output cube
133  void processPatchTransform(Transform &trans, Interpolator &interp);
134 
135  // Register a function to be called when the band number changes
136  void BandChange(void (*funct)(const int band));
137 
138  void ForceTile(double Samp, double Line) {
139  p_forceSamp = Samp;
140  p_forceLine = Line;
141  }
142 
151  void SetTiling(long long start, long long end) {
152  p_startQuadSize = start;
153  p_endQuadSize = end;
154  }
155 
156  void setPatchParameters(int startSample, int startLine,
157  int samples, int lines,
158  int sampleIncrement, int lineIncrement);
159 
160 
161  private:
162 
168  class Quad {
169  public:
170  int slineTile;
171  int ssampTile;
172  int sline;
173  int ssamp;
174  int eline;
175  int esamp;
176  };
177 
178  void ProcessQuad(std::vector<Quad *> &quadTree, Transform &trans,
179  std::vector< std::vector<double> > &lineMap,
180  std::vector< std::vector<double> > &sampMap);
181 
182  void SplitQuad(std::vector<Quad *> &quadTree);
183  void SlowQuad(std::vector<Quad *> &quadTree, Transform &trans,
184  std::vector< std::vector<double> > &lineMap,
185  std::vector< std::vector<double> > &sampMap);
186  double Det4x4(double m[4][4]);
187  double Det3x3(double m[3][3]);
188 
189  // SlowGeom method is never used but saved for posterity
190  void SlowGeom(TileManager &otile, Portal &iportal,
191  Transform &trans, Interpolator &interp);
192  void QuadTree(TileManager &otile, Portal &iportal,
193  Transform &trans, Interpolator &interp,
194  bool useLastTileMap);
195 
196  bool TestLine(Transform &trans, int ssamp, int esamp, int sline,
197  int eline, int increment);
198 
199  void (*p_bandChangeFunct)(const int band);
200 
201  void transformPatch (double startingSample, double endingSample,
202  double startingLine, double endingLine,
203  Portal &iportal, Transform &trans, Interpolator &interp);
204 
205  void splitPatch (double startingSample, double endingSample,
206  double startingLine, double endingLine,
207  Portal &iportal, Transform &trans, Interpolator &interp);
208 #if 0
209  void transformPatch (double startingSample, double endingSample,
210  double startingLine, double endingLine);
211 
212  void splitPatch (double startingSample, double endingSample,
213  double startingLine, double endingLine);
214 #endif
215 
216  std::vector< std::vector<double> > p_sampMap;
217  std::vector< std::vector<double> > p_lineMap;
218 
219  double p_forceSamp;
220  double p_forceLine;
221 
222  long long p_startQuadSize;
223  long long p_endQuadSize;
224 
225  int m_patchStartSample;
226  int m_patchStartLine;
227  int m_patchSamples;
228  int m_patchLines;
229  int m_patchSampleIncrement;
230  int m_patchLineIncrement;
231 
232 #if 0
233  Portal *m_iportal;
234  Brick *m_obrick;
235  Transform *m_transform;
236  Interpolator *m_interpolator;
237 #endif
238  };
239 };
240 
241 #endif
virtual void StartProcess(Transform &trans, Interpolator &interp)
Applies a Transform and an Interpolator to every pixel in the output cube.
void BandChange(void(*funct)(const int band))
Registers a function to be called when the current output cube band number changes.
void setPatchParameters(int startSample, int startLine, int samples, int lines, int sampleIncrement, int lineIncrement)
This method allows the programmer to override the default values for patch parameters used in the pat...
virtual ~ProcessRubberSheet()
Destroys the RubberSheet object.
Buffer for containing a two dimensional section of an image.
Definition: Portal.h:52
ProcessRubberSheet(int startSize=128, int endSize=8)
Constructs a ProcessRubberSheet class with the default tile size range.
Buffer for containing a three dimensional section of an image.
Definition: Brick.h:61
virtual void StartProcess(void funct())
In the base class, this method will invoked a user-specified function exactly one time...
Definition: Process.h:228
void processPatchTransform(Transform &trans, Interpolator &interp)
Applies a Transform and an Interpolator to small patches.
Derivative of Process, designed for geometric transformations.
bool TestLine(Transform &trans, int ssamp, int esamp, int sline, int eline, int increment)
This function walks a line (or rectangle) and tests a point every increment pixels.
Pixel interpolator.
Definition: Interpolator.h:51
void SetTiling(long long start, long long end)
This sets the start and end tile sizes for the rubber sheet; numbers are inclusive and must be powers...
Namespace for ISIS/Bullet specific routines.
Definition: Apollo.h:31
Pixel transformation.
Definition: Transform.h:89
Buffer manager, for moving through a cube in tiles.
Definition: TileManager.h:55
Base class for all cube processing derivatives.
Definition: Process.h:158