2004年09月23日 16:00:00
图像的象素值变换,包括亮度、对比度和GAMMA校正算法,环境是OPENCV4.0,VC6.0。算法参考了MATLAB函数imadjust
。
//
// 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;
}
Trackback:http://tb.blog.csdn.net/TrackBack.aspx?PostId=114398