MFC实现图像选择式掩膜平滑

来源:互联网 发布:puppy linux 编辑:程序博客网 时间:2024/05/22 10:42



void CSDIELSView::OnSmoothingChooseMask(){//选择式掩膜平滑,从多个模板中选择一个最优模板来使用//程序设计:李立宗 lilizong@gmail.com//2012-8-8if(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个邻域,每个邻域考虑RGBfloat 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();}