| //----------------------------------------------------------------------------- |
| // ____ _ |
| // | ___| | ___ _ _ |
| // | ___| | / __)\ \/ / |
| // | | | |_| ___) | | |
| // |_| \___|\___)/_/\_\ Image Library |
| // |
| // 2006, Intel Corporation, licensed under Apache 2.0 |
| // |
| // file : FlexDefs.h |
| // author : Scott Ettinger - scott.m.ettinger@intel.com |
| // description: Flex Image geometric transformation functions |
| // |
| // modified : |
| //----------------------------------------------------------------------------- |
| |
| #ifndef FLEXTRANSFORM_H |
| #define FLEXTRANSFORM_H |
| |
| #if defined(HAVE_CONFIG_H) |
| # include "config.h" |
| #endif |
| |
| #include "FlexFilter.h" |
| |
| |
| //downsamples image by factor of two with simple anti-aliasing |
| template<class T> |
| void FlexDownSample2(FlexImage<T,1> &src, FlexImage<T,1> &dst, bool reallocate = true); |
| |
| |
| //------------------ Implementation ------------------------------------------- |
| |
| //Separable 3x3 gaussian filter |
| template<class T> |
| inline void GaussianBlur3x3(FlexImage<T,1> &src, FlexImage<T,1> &dst) |
| { |
| float k[] = {0.25f, 0.5f, 0.25f}; |
| FlexImage<T,1> tmp; |
| FlexFilterRowV(src, tmp, k, 3); |
| FlexFilterColumnV(tmp, dst, k, 3); |
| } |
| |
| //downsamples image by factor of two with simple anti-aliasing |
| template<class T> |
| void FlexDownSample2(FlexImage<T,1> &src, FlexImage<T,1> &dst, bool reallocate) |
| { |
| if(reallocate) |
| dst.Reallocate(src.Width() / 2, src.Height() / 2); |
| FlexImage<T,1> tmp; |
| GaussianBlur3x3(src, tmp); |
| for(int y = 0; y < src.Height() / 2; y++) |
| { T *ps = &src(0,y * 2), *pd = &dst(0,y); |
| for(int x = 0; x < src.Width() / 2; x++) |
| { *(pd++) = *ps; |
| ps += 2; |
| } |
| } |
| } |
| |
| #endif |
| |