14#ifndef GDALPANSHARPEN_H_INCLUDED
15#define GDALPANSHARPEN_H_INCLUDED
105 int nXOff,
int nYOff,
int nXSize,
106 int nYSize,
void *pDataBuf,
129 const void *pPanBuffer;
130 const void *pUpsampledSpectralBuffer;
143struct GDALPansharpenResampleJob
154 void *pBuffer =
nullptr;
163 struct timeval *ptv =
nullptr;
167 std::string osLastErrorMsg{};
181 std::vector<int> anInputBands{};
182 std::vector<GDALDataset *> aVDS{};
183 std::vector<GDALRasterBand *> aMSBands{};
185 int bPositiveWeights = TRUE;
187 int nKernelRadius = 0;
188 std::array<double, 6> m_adfPanToMSGT = {{0.0, 1.0, 0, 0.0, 0.0, 1.0}};
190 static void PansharpenJobThreadFunc(
void *pUserData);
191 static void PansharpenResampleJobThreadFunc(
void *pUserData);
193 template <
class WorkDataType,
class OutDataType>
194 void WeightedBroveyWithNoData(
const WorkDataType *pPanBuffer,
195 const WorkDataType *pUpsampledSpectralBuffer,
196 OutDataType *pDataBuf,
size_t nValues,
198 WorkDataType nMaxValue)
const;
199 template <
class WorkDataType,
class OutDataType,
int bHasBitDepth>
200 void WeightedBrovey3(
const WorkDataType *pPanBuffer,
201 const WorkDataType *pUpsampledSpectralBuffer,
202 OutDataType *pDataBuf,
size_t nValues,
203 size_t nBandValues, WorkDataType nMaxValue)
const;
206 template <
class WorkDataType,
class OutDataType>
207 void WeightedBrovey(
const WorkDataType *pPanBuffer,
208 const WorkDataType *pUpsampledSpectralBuffer,
209 OutDataType *pDataBuf,
size_t nValues,
210 size_t nBandValues, WorkDataType nMaxValue)
const;
211 template <
class WorkDataType>
212 CPLErr WeightedBrovey(
const WorkDataType *pPanBuffer,
213 const WorkDataType *pUpsampledSpectralBuffer,
215 size_t nValues,
size_t nBandValues,
216 WorkDataType nMaxValue)
const;
219 template <
class WorkDataType>
220 CPLErr WeightedBrovey(
const WorkDataType *pPanBuffer,
221 const WorkDataType *pUpsampledSpectralBuffer,
223 size_t nValues,
size_t nBandValues)
const;
225 void WeightedBroveyPositiveWeights(
const T *pPanBuffer,
226 const T *pUpsampledSpectralBuffer,
227 T *pDataBuf,
size_t nValues,
228 size_t nBandValues, T nMaxValue)
const;
230 template <
class T,
int NINPUT,
int NOUTPUT>
231 size_t WeightedBroveyPositiveWeightsInternal(
232 const T *pPanBuffer,
const T *pUpsampledSpectralBuffer, T *pDataBuf,
233 size_t nValues,
size_t nBandValues, T nMaxValue)
const;
237 void WeightedBroveyGByteOrUInt16(
const T *pPanBuffer,
238 const T *pUpsampledSpectralBuffer,
239 T *pDataBuf,
size_t nValues,
240 size_t nBandValues, T nMaxValue)
const;
245 const void *pUpsampledSpectralBuffer,
void *pDataBuf,
246 size_t nValues,
size_t nBandValues,
Pool of worker threads.
Definition cpl_worker_thread_pool.h:66
A set of associated raster bands, usually from one file.
Definition gdal_priv.h:495
Pansharpening operation class.
Definition gdalpansharpen.h:177
CPLErr ProcessRegion(int nXOff, int nYOff, int nXSize, int nYSize, void *pDataBuf, GDALDataType eBufDataType)
Executes a pansharpening operation on a rectangular region of the resulting dataset.
Definition gdalpansharpen.cpp:1157
GDALPansharpenOperation()
Pansharpening operation constructor.
~GDALPansharpenOperation()
Pansharpening operation destructor.
Definition gdalpansharpen.cpp:155
GDALPansharpenOptions * GetOptions()
Return options.
Definition gdalpansharpen.cpp:1819
CPLErr Initialize(const GDALPansharpenOptions *psOptions)
Initialize the pansharpening operation.
Definition gdalpansharpen.cpp:174
CPLErr
Error category.
Definition cpl_error.h:37
#define CPL_C_END
Macro to end a block of C symbols.
Definition cpl_port.h:283
#define CPL_C_START
Macro to start a block of C symbols.
Definition cpl_port.h:279
unsigned int GUInt32
Unsigned int32 type.
Definition cpl_port.h:161
#define CPL_DISALLOW_COPY_ASSIGN(ClassName)
Helper to remove the copy and assignment constructors so that the compiler will not generate the defa...
Definition cpl_port.h:1030
Public (C callable) GDAL entry points.
GIntBig GSpacing
Type to express pixel, line or band spacing.
Definition gdal.h:400
GDALDataType
Definition gdal.h:48
@ GDT_Unknown
Definition gdal.h:49
GDALRIOResampleAlg
RasterIO() resampling method.
Definition gdal.h:128
@ GRIORA_NearestNeighbour
Definition gdal.h:129
void * GDALRasterBandH
Opaque type used for the C bindings of the C++ GDALRasterBand class.
Definition gdal.h:379
CPLErr GDALPansharpenProcessRegion(GDALPansharpenOperationH hOperation, int nXOff, int nYOff, int nXSize, int nYSize, void *pDataBuf, GDALDataType eBufDataType)
Executes a pansharpening operation on a rectangular region of the resulting dataset.
Definition gdalpansharpen.cpp:1894
GDALPansharpenOperationH GDALCreatePansharpenOperation(const GDALPansharpenOptions *)
Instantiate a pansharpening operation.
Definition gdalpansharpen.cpp:1840
GDALPansharpenAlg
Pansharpening algorithms.
Definition gdalpansharpen.h:32
@ GDAL_PSH_WEIGHTED_BROVEY
Definition gdalpansharpen.h:34
void GDALDestroyPansharpenOptions(GDALPansharpenOptions *)
Destroy pansharpening options.
Definition gdalpansharpen.cpp:73
void * GDALPansharpenOperationH
Definition gdalpansharpen.h:99
GDALPansharpenOptions * GDALCreatePansharpenOptions(void)
Create pansharpening options.
Definition gdalpansharpen.cpp:52
GDALPansharpenOptions * GDALClonePansharpenOptions(const GDALPansharpenOptions *psOptions)
Clone pansharpening options.
Definition gdalpansharpen.cpp:98
void GDALDestroyPansharpenOperation(GDALPansharpenOperationH)
Destroy a pansharpening operation.
Definition gdalpansharpen.cpp:1860
Pansharpening options.
Definition gdalpansharpen.h:40
GDALPansharpenAlg ePansharpenAlg
Definition gdalpansharpen.h:42
int bHasNoData
Definition gdalpansharpen.h:80
int nBitDepth
Definition gdalpansharpen.h:50
double * padfWeights
Definition gdalpansharpen.h:56
int nThreads
Number of threads or -1 to mean ALL_CPUS.
Definition gdalpansharpen.h:90
int nWeightCount
Definition gdalpansharpen.h:53
GDALRasterBandH * pahInputSpectralBands
Array of nInputSpectralBands input spectral bands.
Definition gdalpansharpen.h:70
int * panOutPansharpenedBands
Definition gdalpansharpen.h:77
GDALRIOResampleAlg eResampleAlg
Definition gdalpansharpen.h:46
GDALRasterBandH hPanchroBand
Definition gdalpansharpen.h:59
int nInputSpectralBands
Definition gdalpansharpen.h:62
int nOutPansharpenedBands
Definition gdalpansharpen.h:73
double dfNoData
NoData value of the panchromatic and spectral bands (only taken into account if bHasNoData = TRUE).
Definition gdalpansharpen.h:85