下面这段程序是想计算一个区域的直方图分布,为什么最后得到的ColorHist似乎为0????请高手指教
#define R_BIN     8
#define G_BIN     8
#define B_BIN     8#define R_SHIFT     5
#define G_SHIFT     5
#define B_SHIFT     5
float   ColorHist[512];
int     bins=R_BIN*G_BIN*B_BIN;
void MyIPlClass::CalcuColorHistogram(BITMAP bmp,HBITMAP hbitmap2)
{//计算一图像某个区域的彩色直方图分布
 
    int i,index;
int x,y;
int r,g,b;
float r2,k,f;
int a2; int W=bmp.bmWidth;
int H=bmp.bmHeight;
int WB=bmp.bmWidthBytes;
    int x0=W/2,y0=H/2; int x_begin=0;
int y_begin=0;
if(x_begin<0)x_begin=0;
if(y_begin<0)y_begin=0; int x_end=W;
int y_end=H;
if(x_end>=W)x_end=W-1;
if(y_end>=H)y_end=H-1;
    a2=W*W+H*H;
f=0.0; unsigned char *px=new unsigned char [H*WB];
    GetBitmapBits(hbitmap2,H*WB,px);//数组指针px读取像素颜色信息
     for(i=0;i<bins;i++)
ColorHist[i]=0.0; for(y=y_begin;y<=y_end;y++)
for(x=x_begin;x<=x_end;x++)
{b=px[(y*W+x)*3]>>B_SHIFT;
 g=px[(y*W+x)*3+1]>>R_SHIFT;
 r=px[(y*W+x)*3+2]>>G_SHIFT;
index=b*G_BIN*B_BIN+g*B_BIN+r;
r2=(float)((y-y0)*(y-y0)+(x-x0)*(x-x0)*1.0/a2);
k=1-r2;
f=f+k;
ColorHist[index]=ColorHist[index]+k;
}
   for(i=0;i<bins;i++)
   ColorHist[i]=ColorHist[i]/f;   
}