| | |
| | | } |
| | | } |
| | | |
| | | void transpose_image(image im) |
| | | { |
| | | assert(im.w == im.h); |
| | | int n, m; |
| | | int c; |
| | | for(c = 0; c < im.c; ++c){ |
| | | for(n = 0; n < im.w-1; ++n){ |
| | | for(m = n + 1; m < im.w; ++m){ |
| | | float swap = im.data[m + im.w*(n + im.h*c)]; |
| | | im.data[m + im.w*(n + im.h*c)] = im.data[n + im.w*(m + im.h*c)]; |
| | | im.data[n + im.w*(m + im.h*c)] = swap; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | void rotate_image_cw(image im, int times) |
| | | { |
| | | assert(im.w == im.h); |
| | | times = (times + 400) % 4; |
| | | int i, x, y, c; |
| | | int n = im.w; |
| | | for(i = 0; i < times; ++i){ |
| | | for(c = 0; c < im.c; ++c){ |
| | | for(x = 0; x < n/2; ++x){ |
| | | for(y = 0; y < (n-1)/2 + 1; ++y){ |
| | | float temp = im.data[y + im.w*(x + im.h*c)]; |
| | | im.data[y + im.w*(x + im.h*c)] = im.data[n-1-x + im.w*(y + im.h*c)]; |
| | | im.data[n-1-x + im.w*(y + im.h*c)] = im.data[n-1-y + im.w*(n-1-x + im.h*c)]; |
| | | im.data[n-1-y + im.w*(n-1-x + im.h*c)] = im.data[x + im.w*(n-1-y + im.h*c)]; |
| | | im.data[x + im.w*(n-1-y + im.h*c)] = temp; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | void flip_image(image a) |
| | | { |
| | |
| | | return filters; |
| | | } |
| | | |
| | | void show_image_normalized(image im, const char *name) |
| | | { |
| | | image c = copy_image(im); |
| | | normalize_image(c); |
| | | show_image(c, name); |
| | | free_image(c); |
| | | } |
| | | |
| | | void show_images(image *ims, int n, char *window) |
| | | { |
| | | image m = collapse_images_vert(ims, n); |