//
// perform histgram equalization for single channel image
//
#include "cv.h"
#include "highgui.h"
int ImageAdjust(IplImage* src, IplImage* dst,
double low, double high, // lowand high are the intensities of src
double bottom, double top, // mapped to bottom and top of dst
double gamma )
{
double low2= low*255;
double high2= high*255;
doublebottom2 = bottom*255;
double top2= top*255;
doubleerr_in = high2 - low2;
doubleerr_out = top2 - bottom2;
intx,y;
doubleval;
if(low<0 && low>1 && high <0 &&high>1 && bottom<0 && bottom>1 &&top<0 && top>1)
return 1;
// intensitytransform
for( y = 0;y < src->height; y++)
{
for (x = 0; x < src->width; x++)
{
val = ((uchar*)(src->imageData + src->widthStep*y))[x];
val = pow((val - low2)/err_in, gamma) * err_out + bottom2;
if(val>255) val=255; if(val<0) val=0; // Make sure src is inthe range [low,high]
((uchar*)(dst->imageData + dst->widthStep*y))[x] = (uchar)val;
}
}
return0;
}