/*--------------------------- Commande MegaWave -----------------------------*/
/* mwcommand
   name = {enhancement};
   author = {"Trung Nguyen"};
   version = {"1.0"};
   function = {"Enhancement image"};
   usage = {   
     in->in             "Input positive image",
     inf->inf           "Inferior image",
     sup->sup           "Superior image",
     a->a               "Coefficient a",
     b->b               "Coefficient b",
     out<-out           "Output Fimage"
   };
*/

#include "mw.h"

void enhancement(in, inf, sup, a, b, out)
     Fimage in, inf, sup, out;
     float a, b;
{
  int i;  
    
  if (in->ncol != inf->ncol || in->nrow != inf->nrow || 
      in->ncol != sup->ncol || in->nrow != sup->nrow )
    mwerror(FATAL, 1, "Image in, inf and sup must have the same size!\n");
  
  if ((out = mw_change_fimage(out, in->nrow, in->ncol)) == NULL)
    mwerror(FATAL, 1, "Not enough memory !\n");
  
  for (i = 0; i < in->ncol * in->nrow; i++) {
    if (inf->gray[i] <= in->gray[i] && 
	in->gray[i] <= inf->gray[i] + (a)*(sup->gray[i] - inf->gray[i]))
      out->gray[i] = inf->gray[i] - 1 * (in->gray[i] - inf->gray[i]);
    else
      if (sup->gray[i] - (b)*(sup->gray[i] - inf->gray[i]) <= in->gray[i] &&
	  in->gray[i] <= sup->gray[i])
	out->gray[i] = sup->gray[i] + 1 * (sup->gray[i] - in->gray[i]);
      else
	if (inf->gray[i] + (a)*(sup->gray[i] - inf->gray[i]) <= in->gray[i] &&
	    in->gray[i] <= sup->gray[i] - (b)*(sup->gray[i] - inf->gray[i]))
	  out->gray[i] = in->gray[i];
	  }
}

