void CSDIELSView::OnSmoothingChooseMask()
  {
//选择式掩膜平滑,从多个模板中选择一个最优模板来使用
//程序设计:
//2012-8-8
    if(myImage1.IsNull())
      OnOpenResourceFile();
    if(!myImage2.IsNull())
      myImage2.Destroy();
    if(myImage2.IsNull()){
      myImage2.Create(myImage1.GetWidth(),myImage1.GetHeight(),24,0);
    }
    //COLORREF pixel; 
    int maxY = myImage1.GetHeight();
    int maxX=myImage1.GetWidth();
    byte* pRealData;
    byte* pRealData2;
    pRealData=(byte*)myImage1.GetBits();
    pRealData2=(byte*)myImage2.GetBits();
    int pit=myImage1.GetPitch();
    int pit2=myImage2.GetPitch();
    //需要注意,pit和pit2的值并不一样,所以如果使用一个值,会导致不同的结果出现
    //CString str;
    //str.Format(TEXT("%d"),pit);
    //MessageBox(str);
    //str.Format(TEXT("%d"),pit2);
    //MessageBox(str);
    int bitCount=myImage1.GetBPP()/8;
    int bitCount2=myImage2.GetBPP()/8;
    int tempR,tempG,tempB;
    int temp,tempX,tempY;
    float mean[9][3];  //用于存储每个邻域的均值9个邻域,每个邻域考虑RGB
    float var[9][3];   //存储方差
    float value[9];  //用来存储邻域个点的像素值
    float varRGB[9];  //用来存储每个邻域的RGB方差和 
    float min;   //存储最小方差
    int minIndex;   //存储最小方差的邻域号码
    //  tempR=tempG=tempG=0;
    //说明:将生产的图像作为24位图处理。
    for (int y=2; y<maxY-3; y++) {
      for (int x=2; x<maxX-3; x++) {
        //=====第1个邻域开始
        //第1个邻域第1个色彩空间
        value[0]=*(pRealData+pit*(y-1)+(x-1)*bitCount);
        value[1]=*(pRealData+pit*(y-1)+(x)*bitCount);
        value[2]=*(pRealData+pit*(y-1)+(x+1)*bitCount);
        value[3]=*(pRealData+pit*(y)+(x-1)*bitCount);
        value[4]=*(pRealData+pit*(y)+(x)*bitCount);
        value[5]=*(pRealData+pit*(y)+(x+1)*bitCount);
        value[6]=*(pRealData+pit*(y+1)+(x-1)*bitCount);
        value[7]=*(pRealData+pit*(y+1)+(x)*bitCount);
        value[8]=*(pRealData+pit*(y+1)+(x+1)*bitCount);
        //for(int n=0;n<=1;n++)
        //  mean[0][0]+=(float)value[n]/2.0;
        //mean[0][0]=(value[0]+value[1])/2;
        mean[0][0]=(value[0]+value[1]+value[2]+value[3]+value[4]+value[5]+value[6]+value[7]+value[8])/9;
        //mean[0][0]=mean[0][0]/9;
        //    CString str;
        //    str.Format(TEXT("%f"),mean[0][0]);
        //MessageBox(str);
        var[0][0]=0;
        for(int n=0;n<=8;n++)
          var[0][0]+=value[n]*value[n]-mean[0][0]*mean[0][0];
        if(bitCount==1)
        {
          var[0][1]=0;
          var[0][2]=0;
          mean[0][1]=mean[0][0];
          mean[0][2]=mean[0][0];
        }
        else
        {
          //第1个邻域第2个色彩空间
          value[0]=*(pRealData+pit*(y-1)+(x-1)*bitCount+1);
          value[1]=*(pRealData+pit*(y-1)+(x)*bitCount+1);
          value[2]=*(pRealData+pit*(y-1)+(x+1)*bitCount+1);
          value[3]=*(pRealData+pit*(y)+(x-1)*bitCount+1);
          value[4]=*(pRealData+pit*(y)+(x)*bitCount+1);
          value[5]=*(pRealData+pit*(y)+(x+1)*bitCount+1);
          value[6]=*(pRealData+pit*(y+1)+(x-1)*bitCount+1);
          value[7]=*(pRealData+pit*(y+1)+(x)*bitCount+1);
          value[8]=*(pRealData+pit*(y+1)+(x+1)*bitCount+1);
          mean[0][1]=(value[0]+value[1]+value[2]+value[3]+value[4]+value[5]+value[6]+value[7]+value[8])/9;
          var[0][1]=0;
          for(int n=0;n<=8;n++)
            var[0][1]+=value[n]*value[n]-mean[0][1]*mean[0][1];
          //第1个邻域第3个色彩空间
          value[0]=*(pRealData+pit*(y-1)+(x-1)*bitCount+2);
          value[1]=*(pRealData+pit*(y-1)+(x)*bitCount+2);
          value[2]=*(pRealData+pit*(y-1)+(x+1)*bitCount+2);
          value[3]=*(pRealData+pit*(y)+(x-1)*bitCount+2);
          value[4]=*(pRealData+pit*(y)+(x)*bitCount+2);
          value[5]=*(pRealData+pit*(y)+(x+1)*bitCount+2);
          value[6]=*(pRealData+pit*(y+1)+(x-1)*bitCount+2);
          value[7]=*(pRealData+pit*(y+1)+(x)*bitCount+2);
          value[8]=*(pRealData+pit*(y+1)+(x+1)*bitCount+2);
          mean[0][2]=(value[0]+value[1]+value[2]+value[3]+value[4]+value[5]+value[6]+value[7]+value[8])/9;
          var[0][2]=0;
          for(int n=0;n<=8;n++)
            var[0][2]+=value[n]*value[n]-mean[0][2]*mean[0][2];
        }
        varRGB[0]=var[0][0]+var[0][1]+var[0][2];
        //=====第2个邻域开始
        //第2个邻域第1个色彩空间
        value[0]=*(pRealData+pit*(y-2)+(x-1)*bitCount);
        value[1]=*(pRealData+pit*(y-2)+(x)*bitCount);
        value[2]=*(pRealData+pit*(y-2)+(x+1)*bitCount);
        value[3]=*(pRealData+pit*(y-1)+(x-1)*bitCount);
        value[4]=*(pRealData+pit*(y-1)+(x)*bitCount);
        value[5]=*(pRealData+pit*(y-1)+(x+1)*bitCount);
        value[6]=*(pRealData+pit*(y)+(x)*bitCount);
        mean[1][0]=(value[0]+value[1]+value[2]+value[3]+value[4]+value[5]+value[6])/7;
        var[1][0]=0;
        for(int n=0;n<=8;n++)
          var[1][0]+=value[n]*value[n]-mean[1][0]*mean[1][0];
        if(bitCount==1)
        {
          var[1][1]=0;
          var[1][2]=0;
          mean[1][1]=mean[1][2]=mean[1][0];
        }
        else
        {
          //第2个邻域第2个色彩空间
          value[0]=*(pRealData+pit*(y-2)+(x-1)*bitCount+1);
          value[1]=*(pRealData+pit*(y-2)+(x)*bitCount+1);
          value[2]=*(pRealData+pit*(y-2)+(x+1)*bitCount+1);
          value[3]=*(pRealData+pit*(y-1)+(x-1)*bitCount+1);
          value[4]=*(pRealData+pit*(y-1)+(x)*bitCount+1);
          value[5]=*(pRealData+pit*(y-1)+(x+1)*bitCount+1);
          value[6]=*(pRealData+pit*(y)+(x)*bitCount+1);
          mean[1][1]=(value[0]+value[1]+value[2]+value[3]+value[4]+value[5]+value[6])/7;
          var[1][1]=0;
          for(int n=0;n<=8;n++)
            var[1][1]+=value[n]*value[n]-mean[1][1]*mean[1][1];
          //第2个邻域第3个色彩空间
          value[0]=*(pRealData+pit*(y-2)+(x-1)*bitCount);
          value[1]=*(pRealData+pit*(y-2)+(x)*bitCount+2);
          value[2]=*(pRealData+pit*(y-2)+(x+1)*bitCount+2);
          value[3]=*(pRealData+pit*(y-1)+(x-1)*bitCount+2);
          value[4]=*(pRealData+pit*(y-1)+(x)*bitCount+2);
          value[5]=*(pRealData+pit*(y-1)+(x+1)*bitCount+2);
          value[6]=*(pRealData+pit*(y)+(x)*bitCount+2);
          mean[0][2]=(value[0]+value[1]+value[2]+value[3]+value[4]+value[5]+value[6])/7;
          var[1][2]=0;
          for(int n=0;n<=8;n++)
            var[1][2]+=value[n]*value[n]-mean[1][2]*mean[1][2];
        }
        varRGB[1]=var[1][0]+var[1][1]+var[1][2];
        //=====第3个邻域开始
        //第3个邻域第1个色彩空间
        
        value[0]=*(pRealData+pit*(y-1)+(x-2)*bitCount);
        value[1]=*(pRealData+pit*(y-1)+(x-1)*bitCount);
        value[2]=*(pRealData+pit*(y)+(x-2)*bitCount);
        value[3]=*(pRealData+pit*(y)+(x-1)*bitCount);
        value[4]=*(pRealData+pit*(y)+(x)*bitCount);
        value[5]=*(pRealData+pit*(y+1)+(x-2)*bitCount);
        value[6]=*(pRealData+pit*(y+1)+(x-1)*bitCount);
        mean[2][0]=(value[0]+value[1]+value[2]+value[3]+value[4]+value[5]+value[6])/7;
        var[2][0]=0;
        for(int n=0;n<=8;n++)
          var[2][0]+=value[n]*value[n]-mean[2][0]*mean[2][0];
        if(bitCount==1)
        {
          var[2][1]=0;
          var[2][2]=0;
          mean[2][1]=mean[2][2]=mean[2][0];
        }
        else
        {
          //第3个邻域第2个色彩空间
        value[0]=*(pRealData+pit*(y-1)+(x-2)*bitCount+1);
        value[1]=*(pRealData+pit*(y-1)+(x-1)*bitCount+1);
        value[2]=*(pRealData+pit*(y)+(x-2)*bitCount+1);
        value[3]=*(pRealData+pit*(y)+(x-1)*bitCount+1);
        value[4]=*(pRealData+pit*(y)+(x)*bitCount+1);
        value[5]=*(pRealData+pit*(y+1)+(x-2)*bitCount+1);
        value[6]=*(pRealData+pit*(y+1)+(x-1)*bitCount+1);
          mean[2][1]=(value[0]+value[1]+value[2]+value[3]+value[4]+value[5]+value[6])/7;
          var[2][1]=0;
          for(int n=0;n<=8;n++)
            var[2][1]+=value[n]*value[n]-mean[2][1]*mean[2][1];
          //第3个邻域第3个色彩空间
        value[0]=*(pRealData+pit*(y-1)+(x-2)*bitCount+2);
        value[1]=*(pRealData+pit*(y-1)+(x-1)*bitCount+2);
        value[2]=*(pRealData+pit*(y)+(x-2)*bitCount+2);
        value[3]=*(pRealData+pit*(y)+(x-1)*bitCount+2);
        value[4]=*(pRealData+pit*(y)+(x)*bitCount+2);
        value[5]=*(pRealData+pit*(y+1)+(x-2)*bitCount+2);
        value[6]=*(pRealData+pit*(y+1)+(x-1)*bitCount+2);
          mean[2][2]=(value[0]+value[1]+value[2]+value[3]+value[4]+value[5]+value[6])/7;
          var[2][2]=0;
          for(int n=0;n<=8;n++)
            var[2][2]+=value[n]*value[n]-mean[2][2]*mean[2][2];
        }
        varRGB[2]=var[2][0]+var[2][1]+var[2][2];
        //=====第4个邻域开始
        //第4个邻域第1个色彩空间
        value[0]=*(pRealData+pit*(y)+(x)*bitCount);
        value[1]=*(pRealData+pit*(y+1)+(x-1)*bitCount);
        value[2]=*(pRealData+pit*(y+1)+(x)*bitCount);
        value[3]=*(pRealData+pit*(y+1)+(x+1)*bitCount);
        value[4]=*(pRealData+pit*(y+2)+(x-1)*bitCount);
        value[5]=*(pRealData+pit*(y+2)+(x)*bitCount);
        value[6]=*(pRealData+pit*(y+2)+(x+1)*bitCount);
        mean[3][0]=(value[0]+value[1]+value[2]+value[3]+value[4]+value[5]+value[6])/7;
        var[3][0]=0;
        for(int n=0;n<=8;n++)
          var[3][0]+=value[n]*value[n]-mean[3][0]*mean[3][0];
        if(bitCount==1)
        {
          var[3][1]=0;
          var[3][2]=0;
          mean[3][1]=mean[3][2]=mean[1][0];
        }
        else
        {
          //第4个邻域第2个色彩空间
        value[0]=*(pRealData+pit*(y)+(x)*bitCount+1);
        value[1]=*(pRealData+pit*(y+1)+(x-1)*bitCount+1);
        value[2]=*(pRealData+pit*(y+1)+(x)*bitCount+1);
        value[3]=*(pRealData+pit*(y+1)+(x+1)*bitCount+1);
        value[4]=*(pRealData+pit*(y+2)+(x-1)*bitCount+1);
        value[5]=*(pRealData+pit*(y+2)+(x)*bitCount+1);
        value[6]=*(pRealData+pit*(y+2)+(x+1)*bitCount+1);
          mean[3][1]=(value[0]+value[1]+value[2]+value[3]+value[4]+value[5]+value[6])/7;
          var[3][1]=0;
          for(int n=0;n<=8;n++)
            var[3][1]+=value[n]*value[n]-mean[3][1]*mean[3][1];
          //第4个邻域第3个色彩空间
        value[0]=*(pRealData+pit*(y)+(x)*bitCount+2);
        value[1]=*(pRealData+pit*(y+1)+(x-1)*bitCount+2);
        value[2]=*(pRealData+pit*(y+1)+(x)*bitCount+2);
        value[3]=*(pRealData+pit*(y+1)+(x+1)*bitCount+2);
        value[4]=*(pRealData+pit*(y+2)+(x-1)*bitCount+2);
        value[5]=*(pRealData+pit*(y+2)+(x)*bitCount+2);
        value[6]=*(pRealData+pit*(y+2)+(x+1)*bitCount+2);
          mean[3][2]=(value[0]+value[1]+value[2]+value[3]+value[4]+value[5]+value[6])/7;
          var[3][2]=0;
          for(int n=0;n<=8;n++)
            var[3][2]+=value[n]*value[n]-mean[3][2]*mean[3][2];
        }
        varRGB[3]=var[3][0]+var[3][1]+var[3][2];
        //=====第5个邻域开始
        //第5个邻域第1个色彩空间
        value[0]=*(pRealData+pit*(y-1)+(x+1)*bitCount);
        value[1]=*(pRealData+pit*(y-1)+(x+2)*bitCount);
        value[2]=*(pRealData+pit*(y)+(x)*bitCount);
        value[3]=*(pRealData+pit*(y)+(x+1)*bitCount);
        value[4]=*(pRealData+pit*(y)+(x+2)*bitCount);
        value[5]=*(pRealData+pit*(y+1)+(x+1)*bitCount);
        value[6]=*(pRealData+pit*(y+1)+(x+2)*bitCount);
        mean[4][0]=(value[0]+value[1]+value[2]+value[3]+value[4]+value[5]+value[6])/7;
        var[4][0]=0;
        for(int n=0;n<=8;n++)
          var[4][0]+=value[n]*value[n]-mean[4][0]*mean[4][0];
        if(bitCount==1)
        {
          var[4][1]=0;
          var[4][2]=0;
          mean[4][1]=mean[4][2]=mean[4][0];
        }
        else
        {
          //第5个邻域第2个色彩空间
        value[0]=*(pRealData+pit*(y-1)+(x+1)*bitCount+1);
        value[1]=*(pRealData+pit*(y-1)+(x+2)*bitCount+1);
        value[2]=*(pRealData+pit*(y)+(x)*bitCount+1);
        value[3]=*(pRealData+pit*(y)+(x+1)*bitCount+1);
        value[4]=*(pRealData+pit*(y)+(x+2)*bitCount+1);
        value[5]=*(pRealData+pit*(y+1)+(x+1)*bitCount+1);
        value[6]=*(pRealData+pit*(y+1)+(x+2)*bitCount+1);
          mean[4][1]=(value[0]+value[1]+value[2]+value[3]+value[4]+value[5]+value[6])/7;
          var[4][1]=0;
          for(int n=0;n<=8;n++)
            var[4][1]+=value[n]*value[n]-mean[4][1]*mean[4][1];
          //第5个邻域第3个色彩空间
        value[0]=*(pRealData+pit*(y-1)+(x+1)*bitCount+2);
        value[1]=*(pRealData+pit*(y-1)+(x+2)*bitCount+2);
        value[2]=*(pRealData+pit*(y)+(x)*bitCount+2);
        value[3]=*(pRealData+pit*(y)+(x+1)*bitCount+2);
        value[4]=*(pRealData+pit*(y)+(x+2)*bitCount+2);
        value[5]=*(pRealData+pit*(y+1)+(x+1)*bitCount+2);
        value[6]=*(pRealData+pit*(y+1)+(x+2)*bitCount+2);
          mean[4][2]=(value[0]+value[1]+value[2]+value[3]+value[4]+value[5]+value[6])/7;
          var[4][2]=0;
          for(int n=0;n<=8;n++)
            var[4][2]+=value[n]*value[n]-mean[4][2]*mean[4][2];
        }
        varRGB[4]=var[4][0]+var[4][1]+var[4][2];
        //=====第6个邻域开始
        //第6个邻域第1个色彩空间
        value[0]=*(pRealData+pit*(y-2)+(x+1)*bitCount);
        value[1]=*(pRealData+pit*(y-2)+(x+2)*bitCount);
        value[2]=*(pRealData+pit*(y-1)+(x)*bitCount);
        value[3]=*(pRealData+pit*(y-1)+(x+1)*bitCount);
        value[4]=*(pRealData+pit*(y-1)+(x+2)*bitCount);
        value[5]=*(pRealData+pit*(y)+(x)*bitCount);
        value[6]=*(pRealData+pit*(y)+(x+1)*bitCount);
        mean[5][0]=(value[0]+value[1]+value[2]+value[3]+value[4]+value[5]+value[6])/7;
        var[5][0]=0;
        for(int n=0;n<=8;n++)
          var[5][0]+=value[n]*value[n]-mean[5][0]*mean[5][0];
        if(bitCount==1)
        {
          var[5][1]=0;
          var[5][2]=0;
          mean[5][1]=mean[5][2]=mean[5][0];
        }
        else
        {
          //第6个邻域第2个色彩空间
        value[0]=*(pRealData+pit*(y-2)+(x+1)*bitCount+1);
        value[1]=*(pRealData+pit*(y-2)+(x+2)*bitCount+1);
        value[2]=*(pRealData+pit*(y-1)+(x)*bitCount+1);
        value[3]=*(pRealData+pit*(y-1)+(x+1)*bitCount+1);
        value[4]=*(pRealData+pit*(y-1)+(x+2)*bitCount+1);
        value[5]=*(pRealData+pit*(y)+(x)*bitCount+1);
        value[6]=*(pRealData+pit*(y)+(x+1)*bitCount+1);
          mean[5][1]=(value[0]+value[1]+value[2]+value[3]+value[4]+value[5]+value[6])/7;
          var[5][1]=0;
          for(int n=0;n<=8;n++)
            var[5][1]+=value[n]*value[n]-mean[5][1]*mean[5][1];
          //第6个邻域第3个色彩空间
        value[0]=*(pRealData+pit*(y-2)+(x+1)*bitCount+2);
        value[1]=*(pRealData+pit*(y-2)+(x+2)*bitCount+2);
        value[2]=*(pRealData+pit*(y-1)+(x)*bitCount+2);
        value[3]=*(pRealData+pit*(y-1)+(x+1)*bitCount+2);
        value[4]=*(pRealData+pit*(y-1)+(x+2)*bitCount+2);
        value[5]=*(pRealData+pit*(y)+(x)*bitCount+2);
        value[6]=*(pRealData+pit*(y)+(x+1)*bitCount+2);
          mean[5][2]=(value[0]+value[1]+value[2]+value[3]+value[4]+value[5]+value[6]+value[7]+value[8])/9;
          var[5][2]=0;
          for(int n=0;n<=8;n++)
            var[5][2]+=value[n]*value[n]-mean[5][2]*mean[5][2];
        }
        varRGB[5]=var[5][0]+var[5][1]+var[5][2];
        //=====第7个邻域开始
        //第7个邻域第1个色彩空间
        value[0]=*(pRealData+pit*(y-2)+(x-2)*bitCount);
        value[1]=*(pRealData+pit*(y-2)+(x-1)*bitCount);
        value[2]=*(pRealData+pit*(y-1)+(x-2)*bitCount);
        value[3]=*(pRealData+pit*(y-1)+(x-1)*bitCount);
        value[4]=*(pRealData+pit*(y-1)+(x)*bitCount);
        value[5]=*(pRealData+pit*(y)+(x-1)*bitCount);
        value[6]=*(pRealData+pit*(y)+(x)*bitCount);
        mean[6][0]=(value[0]+value[1]+value[2]+value[3]+value[4]+value[5]+value[6])/9;
        var[6][0]=0;
        for(int n=0;n<=8;n++)
          var[6][0]+=value[n]*value[n]-mean[6][0]*mean[6][0];
        if(bitCount==1)
        {
          var[6][1]=0;
          var[6][2]=0;
          mean[6][1]=mean[6][2]=mean[6][0];
        }
        else
        {
          //第7个邻域第2个色彩空间
        value[0]=*(pRealData+pit*(y-2)+(x-2)*bitCount+1);
        value[1]=*(pRealData+pit*(y-2)+(x-1)*bitCount+1);
        value[2]=*(pRealData+pit*(y-1)+(x-2)*bitCount+1);
        value[3]=*(pRealData+pit*(y-1)+(x-1)*bitCount+1);
        value[4]=*(pRealData+pit*(y-1)+(x)*bitCount+1);
        value[5]=*(pRealData+pit*(y)+(x-1)*bitCount+1);
        value[6]=*(pRealData+pit*(y)+(x)*bitCount+1);
          mean[6][1]=(value[0]+value[1]+value[2]+value[3]+value[4]+value[5]+value[6])/7;
          var[6][1]=0;
          for(int n=0;n<=8;n++)
            var[6][1]+=value[n]*value[n]-mean[6][1]*mean[6][1];
          //第7个邻域第3个色彩空间
        value[0]=*(pRealData+pit*(y-2)+(x-2)*bitCount+2);
        value[1]=*(pRealData+pit*(y-2)+(x-1)*bitCount+2);
        value[2]=*(pRealData+pit*(y-1)+(x-2)*bitCount+2);
        value[3]=*(pRealData+pit*(y-1)+(x-1)*bitCount+2);
        value[4]=*(pRealData+pit*(y-1)+(x)*bitCount+2);
        value[5]=*(pRealData+pit*(y)+(x-1)*bitCount+2);
        value[6]=*(pRealData+pit*(y)+(x)*bitCount+2);
          mean[6][2]=(value[0]+value[1]+value[2]+value[3]+value[4]+value[5]+value[6])/7;
          var[6][2]=0;
          for(int n=0;n<=8;n++)
            var[6][2]+=value[n]*value[n]-mean[6][2]*mean[6][2];
        }
        varRGB[6]=var[6][0]+var[6][1]+var[6][2];
        //=====第8个邻域开始
        //第8个邻域第1个色彩空间
        value[0]=*(pRealData+pit*(y)+(x-1)*bitCount);
        value[1]=*(pRealData+pit*(y)+(x)*bitCount);
        value[2]=*(pRealData+pit*(y+1)+(x-2)*bitCount);
        value[3]=*(pRealData+pit*(y+1)+(x-1)*bitCount);
        value[4]=*(pRealData+pit*(y+1)+(x)*bitCount);
        value[5]=*(pRealData+pit*(y+2)+(x-2)*bitCount);
        value[6]=*(pRealData+pit*(y+2)+(x-1)*bitCount);
        mean[7][0]=(value[0]+value[1]+value[2]+value[3]+value[4]+value[5]+value[6])/7;
        var[7][0]=0;
        for(int n=0;n<=8;n++)
          var[7][0]+=value[n]*value[n]-mean[7][0]*mean[7][0];
        if(bitCount==1)
        {
          var[7][1]=0;
          var[7][2]=0;
          mean[7][1]=mean[7][2]=mean[7][0];
        }
        else
        {
          //第8个邻域第2个色彩空间
        value[0]=*(pRealData+pit*(y)+(x-1)*bitCount+1);
        value[1]=*(pRealData+pit*(y)+(x)*bitCount+1);
        value[2]=*(pRealData+pit*(y+1)+(x-2)*bitCount+1);
        value[3]=*(pRealData+pit*(y+1)+(x-1)*bitCount+1);
        value[4]=*(pRealData+pit*(y+1)+(x)*bitCount+1);
        value[5]=*(pRealData+pit*(y+2)+(x-2)*bitCount+1);
        value[6]=*(pRealData+pit*(y+2)+(x-1)*bitCount+1);
          mean[7][1]=(value[0]+value[1]+value[2]+value[3]+value[4]+value[5]+value[6])/7;
          var[7][1]=0;
          for(int n=0;n<=8;n++)
            var[7][1]+=value[n]*value[n]-mean[7][1]*mean[7][1];
          //第8个邻域第3个色彩空间
        value[0]=*(pRealData+pit*(y)+(x-1)*bitCount+2);
        value[1]=*(pRealData+pit*(y)+(x)*bitCount+2);
        value[2]=*(pRealData+pit*(y+1)+(x-2)*bitCount+2);
        value[3]=*(pRealData+pit*(y+1)+(x-1)*bitCount+2);
        value[4]=*(pRealData+pit*(y+1)+(x)*bitCount+2);
        value[5]=*(pRealData+pit*(y+2)+(x-2)*bitCount+2);
        value[6]=*(pRealData+pit*(y+2)+(x-1)*bitCount+2);
          mean[7][2]=(value[0]+value[1]+value[2]+value[3]+value[4]+value[5]+value[6])/7;
          var[7][2]=0;
          for(int n=0;n<=8;n++)
            var[7][2]+=value[n]*value[n]-mean[7][2]*mean[7][2];
        }
        varRGB[1]=var[7][0]+var[7][1]+var[7][2];
        //=====第9个邻域开始
        //第9个邻域第1个色彩空间
        value[0]=*(pRealData+pit*(y)+(x)*bitCount);
        value[1]=*(pRealData+pit*(y)+(x+1)*bitCount);
        value[2]=*(pRealData+pit*(y+1)+(x)*bitCount);
        value[3]=*(pRealData+pit*(y+1)+(x+1)*bitCount);
        value[4]=*(pRealData+pit*(y+1)+(x+2)*bitCount);
        value[5]=*(pRealData+pit*(y+2)+(x+1)*bitCount);
        value[6]=*(pRealData+pit*(y+2)+(x+2)*bitCount);
        mean[8][0]=(value[0]+value[1]+value[2]+value[3]+value[4]+value[5]+value[6])/7;
        var[8][0]=0;
        for(int n=0;n<=8;n++)
          var[8][0]+=value[n]*value[n]-mean[8][0]*mean[8][0];
        if(bitCount==1)
        {
          var[8][1]=0;
          var[8][2]=0;
          mean[8][1]=mean[8][2]=mean[8][0];
        }
        else
        {
          //第9个邻域第2个色彩空间
        value[0]=*(pRealData+pit*(y)+(x)*bitCount+1);
        value[1]=*(pRealData+pit*(y)+(x+1)*bitCount+1);
        value[2]=*(pRealData+pit*(y+1)+(x)*bitCount+1);
        value[3]=*(pRealData+pit*(y+1)+(x+1)*bitCount+1);
        value[4]=*(pRealData+pit*(y+1)+(x+2)*bitCount+1);
        value[5]=*(pRealData+pit*(y+2)+(x+1)*bitCount+1);
        value[6]=*(pRealData+pit*(y+2)+(x+2)*bitCount+1);
          mean[8][1]=(value[0]+value[1]+value[2]+value[3]+value[4]+value[5]+value[6])/7;
          var[8][1]=0;
          for(int n=0;n<=8;n++)
            var[8][1]+=value[n]*value[n]-mean[8][1]*mean[8][1];
          //第9个邻域第3个色彩空间
        value[0]=*(pRealData+pit*(y)+(x)*bitCount+2);
        value[1]=*(pRealData+pit*(y)+(x+1)*bitCount+2);
        value[2]=*(pRealData+pit*(y+1)+(x)*bitCount+2);
        value[3]=*(pRealData+pit*(y+1)+(x+1)*bitCount+2);
        value[4]=*(pRealData+pit*(y+1)+(x+2)*bitCount+2);
        value[5]=*(pRealData+pit*(y+2)+(x+1)*bitCount+2);
        value[6]=*(pRealData+pit*(y+2)+(x+2)*bitCount+2);
          mean[8][2]=(value[0]+value[1]+value[2]+value[3]+value[4]+value[5]+value[6])/7;
          var[8][2]=0;
          for(int n=0;n<=8;n++)
            var[8][2]+=value[n]*value[n]-mean[8][2]*mean[8][2];
        }
        varRGB[8]=var[8][0]+var[8][1]+var[8][2];
        min=varRGB[0];
        minIndex=0;
        for(int i=1;i<=8;i++)
        {
          if(min>varRGB[0])
          {
            min=varRGB[i];
            minIndex=i;
          }
        }
        *(pRealData2+pit2*y+x*bitCount2)=(int)mean[minIndex][0];
        *(pRealData2+pit2*y+x*bitCount2+1)=(int)mean[minIndex][1];
        *(pRealData2+pit2*y+x*bitCount2+2)=(int)mean[minIndex][2];
      }
    }
    Invalidate();
  }