/*Intcorr:	This routine performs the intensity correction. Each
			float variable in buffer is multiplied by the corresponding
			one in intcorr. The image is assumed to by size*size
			floating point variables.

Written by Sandor L. Barna, December 1993.
*/


#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include "objects.h"

void intenscorr(float *buffer,float *intcorr,int size,
 struct oblparams *params) {
int i,j;
int index;
float f_saturated,test_satd;

f_saturated = params->satn_level;
test_satd = f_saturated - 0.4;
printf("On line: ");
fflush(stdout);
for (i=0;i<size;i++) {
  for (j=0;j<size;j++) {
    index=i*size+j;
    if (buffer[index]<f_saturated) 
      buffer[index] *= intcorr[index];
    if (buffer[index]>test_satd) 
      buffer[index]=f_saturated;
  }
  if (i%100 == 0) {
    printf("%d ",i);
    fflush(stdout);
  }
}

printf("\n");
return;
}

void intenscorr_int(unsigned short int *i2buffer,float *intcorr,int size,
 struct oblparams *params) {
int i,j;
int index;
unsigned short int i2_satd;
float f_saturated, rhold;

f_saturated = params->satn_level;
i2_satd = f_saturated;
printf("On line: ");
fflush(stdout);
for (i=0;i<size;i++) {
  for (j=0;j<size;j++) {
    index=i*size+j;
    if (i2buffer[index]<i2_satd) {
      rhold = i2buffer[index];
      rhold *= intcorr[index]; 
      i2buffer[index] = rhold;
    }
  }
  if (i%100 == 0) {
    printf("%d ",i);
    fflush(stdout);
  }
}

printf("\n");
return;
}