18 #ifndef PIC_FILTERING_FILTER_DCT_1D_HPP 19 #define PIC_FILTERING_FILTER_DCT_1D_HPP 21 #include "../filtering/filter.hpp" 60 this->bForward =
true;
75 this->bForward =
false;
96 float size2 = float(size * 2);
97 float *ret =
new float[size * size];
102 for(
int u = 0; u < size; u++) {
103 for(
int x = 0; x < size; x++) {
104 val = u * (2 * x + 1);
105 ret[ind] = cosf(
C_PI *
float(val) / size2);
124 float size2 = float(size * 2);
125 float *ret =
new float[size * size];
129 sqr[0] = sqrtf(1.0
f /
float(size));
130 sqr[1] = sqrtf(2.0
f /
float(size));
134 for(
int x = 0; x < size; x++) {
135 for(
int u = 0; u < size; u++) {
136 val = u * (2 * x + 1);
137 ret[ind] = cosf(
C_PI *
float(val) / size2);
204 printf(
"ERROR: FilterDCT1D::changePass");
209 dirs[pass % tMod] = 1;
211 for(
int i = 1; i < tMod; i++) {
212 dirs[(pass + i) % tMod] = 0;
228 Image *source = src[0];
230 for(
int m = box->
z0; m < box->z1; m++) {
231 for(
int j = box->
y0; j < box->y1; j++) {
232 for(
int i = box->
x0; i < box->x1; i++) {
233 float *tmpDst = (*dst)(i, j, m);
235 for(
int l = 0; l < channels; l++) {
242 for(
int k = 0; k <
nCoeff; k++) {
245 int cj = j + k2 *
dirs[0];
247 int ci = i + k2 *
dirs[1];
249 int cm = m + k2 *
dirs[2];
251 float *tmpSource = (*source)(ci, cj, cm);
253 float tmpCoeff =
coeff[ind2];
255 for(
int l = 0; l < channels; l++) {
256 tmpDst[l] += tmpSource[l] * tmpCoeff;
263 int select = (ind == 0) ? 0 : 1;
264 for(
int l = 0; l < channels; l++) {
265 tmpDst[l] *=
sqr[select];
int dirs[3]
Definition: filter_dct_1d.hpp:31
The BBox class manages the creation of bounding boxes for images.
Definition: bbox.hpp:29
bool bForward
Definition: filter_dct_1d.hpp:34
int channels
Definition: image.hpp:80
~FilterDCT1D()
Definition: filter_dct_1d.hpp:187
void changePass(int pass, int tPass)
changePass
Definition: filter_dct_1d.hpp:194
static float * createCoefficientsTransform(int size)
createCoefficientsTransform
Definition: filter_dct_1d.hpp:90
std::vector< Image * > ImageVec
ImageVec an std::vector of pic::Image.
Definition: image_vec.hpp:29
int x0
Definition: bbox.hpp:32
FilterDCT1D(int nCoeff, bool bForward)
FilterDCT1D.
Definition: filter_dct_1d.hpp:168
float sqr[2]
Definition: filter_dct_1d.hpp:32
The Filter class.
Definition: filter.hpp:50
const float C_PI
Definition: math.hpp:50
void setInverse()
setInverse
Definition: filter_dct_1d.hpp:73
float * coeff
Definition: filter_dct_1d.hpp:32
int y0
Definition: bbox.hpp:32
#define PIC_INLINE
Definition: base.hpp:33
The Image class stores an image as buffer of float.
Definition: image.hpp:60
virtual void f(FilterFData *data)
f
Definition: filter_radial_basis_function.hpp:69
void setForward()
setForward
Definition: filter_dct_1d.hpp:58
static float * createCoefficientsInverse(int size)
createCoefficientsInverse
Definition: filter_dct_1d.hpp:118
int nCoeff
Definition: filter_dct_1d.hpp:33
The FilterDCT1D class.
Definition: filter_dct_1d.hpp:28
Definition: bilateral_separation.hpp:25
int z0
Definition: bbox.hpp:32
void ProcessBBox(Image *dst, ImageVec src, BBox *box)
ProcessBBox.
Definition: filter_dct_1d.hpp:224