/* lin_hst.c */ #include #include #include "mypgm.h" void linear_transform_histogram( ) /* linear transformation as applied to graylevel histogram */ /* input image1[y][x] ===> output image2[y][x] */ { int min, max; /* maximum & minimum graylevels */ int x, y; /* Loop variables */ /* detection of maximum & minimum values of gray levels */ min = max = image1[0][0]; for (y = 0; y < y_size1; y++) { for (x = 0; x < x_size1; x++) { if (image1[y][x] < min) min = image1[y][x]; if (image1[y][x] > max) max = image1[y][x]; } } printf("Minimum graylevel = %d --- Maximum graylevel = %d\n", min, max); if ((max - min) == 0) { printf("Nothing in image!!!\n\n"); exit(1); } /* result of linear transformation stored into image2[y][x] */ x_size2 = x_size1; y_size2 = y_size1; for (y = 0; y < y_size1; y++) { for (x = 0; x < x_size1; x++) { image2[y][x] = (unsigned char)((image1[y][x] - min) * MAX_BRIGHTNESS / (max - min)); } } } main( ) { load_image_data( ); /* input image1 */ linear_transform_histogram( ); /* linear transformation of histogram */ save_image_data( ); /* output image2 */ return 0; }