33 ImagePyramid::ImagePyramid(
const GrayImage &level0,
unsigned nbLevels)
35 BuildPyramid(level0, nbLevels);
41 if (!_levels.empty()) {
42 for (vector<GrayImage *>::iterator im = _levels.begin(), imend = _levels.end(); im != imend;
49 ImagePyramid::~ImagePyramid()
51 if (!_levels.empty()) {
52 for (vector<GrayImage *>::iterator im = _levels.begin(), imend = _levels.end(); im != imend;
65 float ImagePyramid::pixel(
int x,
int y,
int level)
71 unsigned int i = 1 << level;
72 unsigned int sx =
x >> level;
73 unsigned int sy =
y >> level;
74 if (sx >= img->
width()) {
75 sx = img->
width() - 1;
82 float A = i * (sx + 1) -
x;
84 float C = i * (sy + 1) -
y;
88 P1 =
A * img->
pixel(sx, sy);
89 if (sx < img->
width() - 1) {
91 P1 +=
B * img->
pixel(sx + 1, sy);
95 P1 +=
B * img->
pixel(sx, sy);
97 if (sy < img->
height() - 1) {
99 P2 =
A * img->
pixel(sx, sy + 1);
100 if (sx < img->
width() - 1) {
102 P2 +=
B * img->
pixel(sx + 1, sy + 1);
106 P2 +=
B * img->
pixel(sx, sy + 1);
113 return (1.0f / (
float)(1 << (2 * level))) * (
C * P1 +
D * P2);
118 return _levels[level]->width();
123 return _levels[level]->height();
126 GaussianPyramid::GaussianPyramid(
const GrayImage &level0,
unsigned nbLevels,
float iSigma)
129 BuildPyramid(level0, nbLevels);
132 GaussianPyramid::GaussianPyramid(
GrayImage *level0,
unsigned nbLevels,
float iSigma)
135 BuildPyramid(level0, nbLevels);
155 unsigned w = pLevel->
width();
156 unsigned h = pLevel->
height();
158 for (
unsigned int i = 0; i < nbLevels; ++i) {
160 h = pLevel->
height() >> 1;
162 for (
unsigned int y = 0;
y < h; ++
y) {
163 for (
unsigned int x = 0;
x <
w; ++
x) {
173 while ((
w > 1) && (h > 1)) {
175 h = pLevel->
height() >> 1;
177 for (
unsigned int y = 0;
y < h; ++
y) {
178 for (
unsigned int x = 0;
x <
w; ++
x) {
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei width
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei height
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint y
Class to perform gaussian filtering operations on an image.
Class to represent a pyramid of images.
ATTR_WARN_UNUSED_RESULT const BMLoop * l
ATTR_WARN_UNUSED_RESULT const BMVert * v
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
float getSmoothedPixel(Map *map, int x, int y)
virtual void BuildPyramid(const GrayImage &level0, unsigned nbLevels)
float pixel(unsigned x, unsigned y) const
void setPixel(unsigned x, unsigned y, float v)
std::vector< GrayImage * > _levels