aboutsummaryrefslogtreecommitdiff
path: root/fly-tools/background/pixel.c
diff options
context:
space:
mode:
Diffstat (limited to 'fly-tools/background/pixel.c')
-rw-r--r--fly-tools/background/pixel.c185
1 files changed, 0 insertions, 185 deletions
diff --git a/fly-tools/background/pixel.c b/fly-tools/background/pixel.c
deleted file mode 100644
index 2330678..0000000
--- a/fly-tools/background/pixel.c
+++ /dev/null
@@ -1,185 +0,0 @@
-#include <wand/MagickWand.h>
-#include <gsl/gsl_histogram.h>
-#include <inttypes.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-//#define round(x)((x)>=0?(int)((x)+0.5):(int)((x)-0.5))
-#define round(x)((int)((x)+0.5))
-#define ThrowWandException(wand) { char *description; ExceptionType severity; description=MagickGetException(wand,&severity); (void) fprintf(stderr,"%s %s %lu %s\n",GetMagickModule(),description); description=(char *) MagickRelinquishMemory(description); exit(-1); }
-
-int findmax (uint8_t *p, int n)
-{
- int mx = 0, v = p[0];
- for (int i = 1; i < n; i++) {
- if (p[i] > v) {
- v = p[i];
- mx = i;
- }
- }
- return mx;
-}
-
-int main(int argc, char **argv ) {
-
- MagickWand *magick_wand, *first_wand, *output_wand;
- PixelIterator *input_iterator, *output_iterator;
- PixelWand **pixels, *p_out;
-
- double green, red, blue;
-
- int i,j, k, x, y;
- int image = 0;
- int nImages = 0;
-
- unsigned long height, width;
-
-
- char filename[256];
- char rgb[128];
- char *temp;
-
- FILE *input_file;
-
- uint8_t ****array;
- uint8_t ***output;
-
- // open the first image and get the height and width
- first_wand = NewMagickWand();
- if(MagickReadImage(first_wand, argv[2]) == MagickFalse) {
- ThrowWandException(first_wand);
- }
-
- height = MagickGetImageHeight(first_wand);
- width = MagickGetImageWidth(first_wand);
-
- first_wand = DestroyMagickWand(first_wand);
-
- printf("height: %ld width:%ld \n", height, width);
-
-
- // count how many images there are in the input file
- FILE *count = fopen( argv[1], "r");
- if(count != NULL) {
- while((fgets(filename, sizeof(filename), count)) != NULL) {
- nImages++;
- }
- fclose(count);
- }
-
- printf("number of images: %d \n", nImages);
-
-
- // initialize the storage arrays
- output = calloc(height, sizeof(output[0]));
- for(i = 0; i < height; i++) {
- output[i] = calloc(width, sizeof(output[0][0]));
- for(j = 0; j < width; j++) {
- output[i][j] = calloc(3, sizeof(output[0][0][0]));
- }
- }
-
- array = calloc(nImages, sizeof(array[0]));
- for(i = 0; i < nImages; i++) {
- array[i] = calloc(height, sizeof(array[0][0]));
- for(j = 0; j < (long) height; j++) {
- array[i][j] = calloc(width, sizeof(array[0][0][0]));
- for(k = 0; k < width; k++){
- array[i][j][k] = calloc(3, sizeof(array[0][0][0][0]));
- }
- }
- }
-
- MagickWandGenesis();
-
- // store each pixel in the storage array. array[nImage][height][width][ { R, G, B} ]
- input_file = fopen ( argv[1], "r" );
- if ( input_file != NULL ) {
- while ((fgets(filename, sizeof(filename), input_file)) != NULL ) {
- temp = strchr(filename, '\n');
- if (temp != NULL) *temp = '\0';
-
- magick_wand = NewMagickWand();
- MagickReadImage(magick_wand, filename);
-
- input_iterator = NewPixelIterator(magick_wand);
-
- printf("Image number:%d Filename: %s \n", image, filename);
- for (i=0; i<height; i++) {
- pixels = PixelGetNextIteratorRow(input_iterator, &width);
- for (j=0; j<width ; j++) {
-
- green = PixelGetGreen(pixels[j]);
- blue = PixelGetBlue(pixels[j]);
- red = PixelGetRed(pixels[j]);
-
- array[image][i][j][0] = round(red*255);
- array[image][i][j][1] = round(green*255);
- array[image][i][j][2] = round(blue*255);
- // printf("array: (%d, %d,%d,%d,%d,%d) \n", image, i, j, array[image][i][j][0], array[image][i][j][1], array[image][i][j][2]);
- }
- PixelSyncIterator(input_iterator);
- }
- PixelSyncIterator(input_iterator);
- input_iterator=DestroyPixelIterator(input_iterator);
- ClearMagickWand(magick_wand);
-
- image++;
- }
- fclose ( input_file );
- }
- else {
- printf("could not open file \n");
- exit(1);
- }
-
- // calculate histograms
-
- for (j = 0; j < height; j++) {
- for (k = 0; k < width; k++) {
-
- uint8_t histr[256] = { 0 }, histg[256] = { 0 }, histb[256] = { 0 };
- for (i = 0; i < nImages; i++) {
- histr[array[i][j][k][0]] += 1;
- histg[array[i][j][k][1]] += 1;
- histb[array[i][j][k][2]] += 1;
- }
-
- output[j][k][0] = findmax(histr, 256);
- output[j][k][1] = findmax(histg, 256);
- output[j][k][2] = findmax(histb, 256);
-
- printf("out (%d,%d,%d,%d,%d) \n ", j, k, output[j][k][0], output[j][k][1], output[j][k][2]);
-
- }
- }
-
- pixels = NewPixelWand();
- p_out = NewPixelWand();
- PixelSetColor(p_out,"white");
-
- output_wand = NewMagickWand();
- MagickNewImage(output_wand,width,height,p_out);
-
- output_iterator=NewPixelIterator(output_wand);
- for(x=0;x<height;x++) {
-
- pixels=PixelGetNextIteratorRow(output_iterator,&y);
-
- for(y=0;y<width;y++) {
- sprintf(rgb, "rgb(%d,%d,%d)", output[x][y][0], output[x][y][1], output[x][y][2]);
- printf("write (%d,%d), %s \n", x ,y, rgb);
- PixelSetColor(pixels[y],rgb);
- }
- PixelSyncIterator(output_iterator);
- }
-
- output_iterator=DestroyPixelIterator(output_iterator);
- MagickWriteImage(output_wand,"output.png");
- DestroyMagickWand(output_wand);
-
- MagickWandTerminus();
-
- return 0;
-}