/usr/include/ossim/imaging/ossimResampler.h is in libossim-dev 2.2.2-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 | //*******************************************************************
//
// License: See top level LICENSE.txt file.
//
// Author: Garrett Potts
//*******************************************************************
// $Id: ossimResampler.h 17195 2010-04-23 17:32:18Z dburken $
#ifndef ossimResampler_HEADER
#define ossimResampler_HEADER
#include <ossim/base/ossimConnectableObject.h>
#include <ossim/base/ossimIpt.h>
#include <ossim/base/ossimDrect.h>
#include <ossim/base/ossimRationalNumber.h>
class ossimImageData;
/*!
* This is currently implemented as a symmetric kernel resampler.
* It will use a lookup table idea to precompute
*
* The resampler will support Nearest neighbor, Bilinear and Bicubic
*
* The lookup table approach will be borrowed from Michael J. Aramini
* implementation of the Bicubic convolution:
*
* http://www.ultranet.com/~aramini/
* under:
* Efficient Image Magnification by Bicubic Spline Interpolation.
*/
class ossimResampler : public ossimConnectableObject
{
public:
enum ossimResLevelResamplerType
{
ossimResampler_NONE = 0,
ossimResampler_NEAREST_NEIGHBOR = 1,
ossimResampler_BILINEAR = 2,
ossimResampler_BICUBIC = 3
};
ossimResampler();
/*!
* Will apply the kernel to the input and write it to the output.
*
* Note: theTable is re-generated if the Max(out_width, out_height).
* changes from the previous call.
*/
virtual void resample(ossimImageData* input, // input buffer
ossimImageData* output);
virtual void resample(ossimImageData* input,
ossimImageData* output,
const ossimDpt& ul,
const ossimDpt& ur,
const ossimDpt& deltaUl,
const ossimDpt& deltaUr,
const ossimDpt& length);
virtual void resample(ossimImageData* input,
ossimImageData* output,
const ossimIrect& outputSubRect,
const ossimDpt& ul,
const ossimDpt& ur,
const ossimDpt& deltaUl,
const ossimDpt& deltaUr,
const ossimDpt& length);
virtual void resampleNearestNeighbor(ossimImageData* input,
ossimImageData* output,
const ossimIrect& outputSubRect,
const ossimDpt& ul,
const ossimDpt& ur,
const ossimDpt& deltaUl,
const ossimDpt& deltaUr,
const ossimDpt& length);
virtual void resampleNearestNeighbor(ossimImageData* input,
ossimImageData* output,
const ossimDpt& ul,
const ossimDpt& ur,
const ossimDpt& deltaUl,
const ossimDpt& deltaUr,
const ossimDpt& length);
/*!
* Will re-allocate the table
*/
virtual void setResamplerType(ossimResLevelResamplerType type);
virtual ossimResLevelResamplerType getResamplerType()const
{
return theResamplerType;
}
virtual double getCubicParameter()const
{
return theCubicAdjustableParameter;
}
virtual void setCubicParameter(double parameter)
{
theCubicAdjustableParameter = parameter;
theCubicAdjustableParameter = theCubicAdjustableParameter<-1?-1:theCubicAdjustableParameter;
theCubicAdjustableParameter = theCubicAdjustableParameter>0?0:theCubicAdjustableParameter;
if(theResamplerType == ossimResampler_BICUBIC)
{
generateWeightTable();
}
}
/*!
* Will reallocate the table
*/
void setRatio(double outputToInputRatio);
void setRatio(const ossimDpt& outputToInputRatio);
ossimDpt getRatio()const
{
return theOutputToInputRatio;
}
virtual ossim_int32 getKernelWidth()const;
virtual ossim_int32 getKernelHeight()const;
/*!
* Method to save the state of an object to a keyword list.
* Return true if ok or false on error.
*/
virtual bool saveState(ossimKeywordlist& kwl,
const char* prefix=0)const;
/*!
* Method to the load (recreate) the state of an object from a keyword
* list. Return true if ok or false on error.
*/
virtual bool loadState(const ossimKeywordlist& kwl,
const char* prefix=0);
bool canConnectMyInputTo(ossim_int32 /* inputIndex */,
const ossimConnectableObject* /* object */)const
{
return false;
}
protected:
virtual ~ossimResampler();
ossimDpt theOutputToInputRatio;
ossimResLevelResamplerType theResamplerType;
ossim_int32 theTableWidthX;
ossim_int32 theTableWidthY;
ossim_int32 theTableHeight;
ossim_int32 theKernelWidth;
ossim_int32 theKernelHeight;
/*!
*/
double **theWeightTableX;
double **theWeightTableY;
/*!
* This adjustable parameter can vary between
* -1 to 0. as the paramter goes from 0
* to -1 the output goes from blocky to smooth.
* The default value is -.5
*/
double theCubicAdjustableParameter;
template <class T>
void resampleTile(T, // dummy tmeplate variable
ossimImageData* input,
ossimImageData* output);
template <class T>
void resampleFullTile(T, // dummy tmeplate variable
ossimImageData* input,
ossimImageData* output);
template <class T>
void resamplePartialTile(T, // dummy tmeplate variable
ossimImageData* input,
ossimImageData* output);
template <class T>
void resampleTile(T, // dummy template variable
ossimImageData* input,
ossimImageData* output,
const ossimIrect& outputSubRect,
const ossimDpt& ul,
const ossimDpt& ur,
const ossimDpt& deltaUl,
const ossimDpt& deltaUr,
const ossimDpt& length);
template <class T>
void resampleTileNearestNeighbor(T, // dummy template variable
ossimImageData* input,
ossimImageData* output,
const ossimDpt& ul,
const ossimDpt& ur,
const ossimDpt& deltaUl,
const ossimDpt& deltaUr,
const ossimDpt& length);
template <class T>
void resampleTileNearestNeighbor(T, // dummy template variable
ossimImageData* input,
ossimImageData* output,
const ossimIrect& subRect,
const ossimDpt& ul,
const ossimDpt& ur,
const ossimDpt& deltaUl,
const ossimDpt& deltaUr,
const ossimDpt& length);
virtual void deleteWeightTable();
virtual void allocateWeightTable();
virtual void generateWeightTable();
double getCubicC0(double t)const;
double getCubicC1(double t)const;
double getCubicC2(double t)const;
double getCubicC3(double t)const;
TYPE_DATA
};
#endif
|