18 #ifndef PIC_GL_FILTERING_FILTER_WARP_2D_HPP 19 #define PIC_GL_FILTERING_FILTER_WARP_2D_HPP 21 #include "../util/matrix_3_x_3.hpp" 23 #include "../filtering/filter.hpp" 24 #include "../image_samplers/image_sampler_bilinear.hpp" 48 int channels = src[0]->channels;
50 float pos[2], pos_out[2];
52 for(
int j = box->
y0; j < box->y1; j++) {
53 pos[1] = float(j +
bmin[1]) -
mid[1];
55 for(
int i = box->
x0; i < box->x1; i++) {
56 float *tmp_dst = (*dst)(i, j);
58 pos[0] = float(i +
bmin[0]) -
mid[0];
65 if(pos_out[0] >= 0.0
f && pos_out[0] <= src[0]->width1f &&
66 pos_out[1] >= 0.0
f && pos_out[1] <= src[0]->height1f) {
84 this->bComputeBoundingBox =
true;
85 this->bCentroid =
false;
86 this->bSameSize =
false;
100 this->bComputeBoundingBox =
true;
123 float width,
float height,
126 float bbox_out[4][2];
143 mid[0] = width * 0.5f;
144 mid[1] = height * 0.5f;
157 for(
int i = 0; i < 4; i++) {
159 bbox[i][0] -=
mid[0];
160 bbox[i][1] -=
mid[1];
164 bbox_out[i][0] +=
mid[0];
165 bbox_out[i][1] +=
mid[1];
167 int x = int(bbox_out[i][0]);
168 int y = int(bbox_out[i][1]);
188 memcpy(this->bmin,
bmin,
sizeof(
int) * 2);
189 memcpy(this->bmax,
bmax,
sizeof(
int) * 2);
201 this->bComputeBoundingBox =
true;
221 mid[0] = imgIn[0]->widthf;
222 mid[1] = imgIn[0]->heightf;
231 imgIn[0]->widthf, imgIn[0]->heightf,
244 width = imgIn[0]->width;
245 height = imgIn[0]->height;
248 frames = imgIn[0]->frames;
249 channels = imgIn[0]->channels;
void getIdentity()
getIdentity sets the matrix as an identity matrix; diag(1, 1, 1);
Definition: matrix_3_x_3.hpp:96
int bmax[2]
Definition: filter_warp_2d.hpp:36
The BBox class manages the creation of bounding boxes for images.
Definition: bbox.hpp:29
void OutputSize(ImageVec imgIn, int &width, int &height, int &channels, int &frames)
OutputSize.
Definition: filter_warp_2d.hpp:218
void ProcessBBox(Image *dst, ImageVec src, BBox *box)
ProcessBBox.
Definition: filter_warp_2d.hpp:46
FilterWarp2D(Matrix3x3 h, bool bSameSize=false, bool bCentroid=false)
FilterWarp2D.
Definition: filter_warp_2d.hpp:98
float mid[2]
Definition: filter_warp_2d.hpp:37
std::vector< Image * > ImageVec
ImageVec an std::vector of pic::Image.
Definition: image_vec.hpp:29
int x0
Definition: bbox.hpp:32
void SampleImageUC(Image *img, float x, float y, float *vOut)
SampleImageUC samples an image in unnormalized coordinates [0,width-1]x[0,height-1].
Definition: image_sampler_bilinear.hpp:60
bool getBCentroid()
getBCentroid
Definition: filter_warp_2d.hpp:108
The Matrix3x3 class provides methods for managing a 3 by 3 matrix.
Definition: matrix_3_x_3.hpp:29
The Filter class.
Definition: filter.hpp:50
virtual Image * Process(ImageVec imgIn, Image *imgOut)
Process.
Definition: filter.hpp:390
static Image * execute(Image *img, Image *imgOut, Matrix3x3 h, bool bSameSize=false, bool bCentroid=false)
execute
Definition: filter_warp_2d.hpp:261
FilterWarp2D()
FilterWarp2D.
Definition: filter_warp_2d.hpp:82
Matrix3x3 * inverse(Matrix3x3 *ret)
inverse computes the inverse of the matrix.
Definition: matrix_3_x_3.hpp:257
bool bComputeBoundingBox
Definition: filter_warp_2d.hpp:38
int y0
Definition: bbox.hpp:32
Matrix3x3 h_inv
Definition: filter_warp_2d.hpp:35
bool bSameSize
Definition: filter_warp_2d.hpp:75
float * projection(float *vec, float *ret)
projection
Definition: matrix_3_x_3.hpp:186
The Image class stores an image as buffer of float.
Definition: image.hpp:60
void setBoundingBox(int *bmin, int *bmax)
setBoundingBox
Definition: filter_warp_2d.hpp:186
void update(Matrix3x3 h, bool bSameSize, bool bCentroid=false)
update
Definition: filter_warp_2d.hpp:199
virtual void f(FilterFData *data)
f
Definition: filter_radial_basis_function.hpp:69
Matrix3x3 h
Definition: filter_warp_2d.hpp:35
PIC_INLINE ImageVec Single(Image *img)
Single creates an std::vector which contains img; this is for filters input.
Definition: image_vec.hpp:36
Definition: bilateral_separation.hpp:25
static T * assign(T *data, int size, T *ret)
assign
Definition: array.hpp:464
ImageSamplerBilinear isb
Definition: filter_warp_2d.hpp:34
static void computeBoundingBox(Matrix3x3 &h, bool bCentroid, float width, float height, int *bmin, int *bmax)
computeBoundingBox
Definition: filter_warp_2d.hpp:122
int bmin[2]
Definition: filter_warp_2d.hpp:36
The ImageSamplerBilinear class.
Definition: image_sampler_bilinear.hpp:28
bool bCentroid
Definition: filter_warp_2d.hpp:75
The FilterWarp2D class.
Definition: filter_warp_2d.hpp:31