#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");
array img_rgb =
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);
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_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");
}
}
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;
}