#include <stdio.h>
#include <cstdlib>
 
 
static const float pyramid_kernel[] = {1,  4, 6,  4,  1,  4, 16, 24, 16,
                                       4,  6, 24, 36, 24, 6, 4,  16, 24,
                                       16, 4, 1,  4,  6,  4, 1};
 
array pyramid(
const array& img, 
const int level, 
const bool sampling) {
 
    array kernel(5, 5, pyramid_kernel);
 
    kernel = kernel / 256.f;
    if (sampling) {  
        for (int i = 0; i < level; i++) {
            for (
int j = 0; j < pyr.
dims(2); j++)
 
        }
    } else {  
        for (int i = 0; i < level; i++) {
            for (
int j = 0; j < pyr.
dims(2); j++)
 
            pyr = tmp;
        }
    }
    return pyr;
}
 
void pyramids_demo() {
    af::Window wnd_rgb(
"Image Pyramids - RGB Images");
 
    af::Window wnd_gray(
"Image Pyramids - Grayscale Images");
 
    wnd_rgb.setPos(25, 25);
    wnd_gray.setPos(150, 150);
 
        loadImage(ASSETS_DIR 
"/examples/images/atlantis.png", 
true) /
 
        255.f;  
 
    array downc1 = pyramid(img_rgb, 1, 
true);
 
    array downc2 = pyramid(img_rgb, 2, 
true);
 
    array upc1   = pyramid(img_rgb, 1, 
false);
 
    array upc2   = pyramid(img_rgb, 2, 
false);
 
 
    array downg1 = pyramid(img_gray, 1, 
true);
 
    array downg2 = pyramid(img_gray, 2, 
true);
 
    array upg1   = pyramid(img_gray, 1, 
false);
 
    array upg2   = pyramid(img_gray, 2, 
false);
 
 
    while (!wnd_rgb.close() && !wnd_gray.close()) {
        wnd_rgb.grid(2, 3);
        wnd_rgb(0, 0).image(img_rgb, "color image");
        wnd_rgb(1, 0).image(downc1, "downsample 1 level");
        wnd_rgb(0, 1).image(downc2, "downsample 2 levels");
        wnd_rgb(1, 1).image(upc1, "upsample 1 level");
        wnd_rgb(0, 2).image(upc2, "upsample 2 level");
        wnd_rgb.show();
 
        wnd_gray.grid(2, 3);
        wnd_gray(0, 0).image(img_gray, "grayscale image");
        wnd_gray(1, 0).image(downg1, "downsample 1 level");
        wnd_gray(0, 1).image(downg2, "downsample 2 levels");
        wnd_gray(1, 1).image(upg1, "upsample 1 level");
        wnd_gray(0, 2).image(upg2, "upsample 2 level");
        wnd_gray.show();
    }
}
 
int main(int argc, char** argv) {
    int device = argc > 1 ? atoi(argv[1]) : 0;
 
    try {
        printf("** ArrayFire Image Pyramids Demo **\n\n");
        pyramids_demo();
 
        fprintf(stderr, 
"%s\n", e.
what());
        throw;
    }
 
    return 0;
}
Window object to render af::arrays.
A multi dimensional data container.
dim4 dims() const
Get dimensions of the array.
array copy() const
Perform deep copy of the array.
An ArrayFire exception class.
virtual const char * what() const
Returns an error message for the exception in a string format.
seq is used to create sequences for indexing af::array
array constant(T val, const dim4 &dims, const dtype ty=(af_dtype) dtype_traits< T >::ctype)
C++ Interface to generate an array with elements set to a specified value.
void setDevice(const int device)
Sets the current device.
array colorSpace(const array &image, const CSpace to, const CSpace from)
C++ Interface wrapper for colorspace conversion.
array loadImage(const char *filename, const bool is_color=false)
C++ Interface for loading an image.
array convolve(const array &signal, const array &filter, const convMode mode=AF_CONV_DEFAULT, const convDomain domain=AF_CONV_AUTO)
C++ Interface for convolution any(one through three) dimensional signals.
seq span
A special value representing the entire axis of an af::array.