灰度图像的膨胀操作(vc实现)
void CISLSView::dilationGray(int structure[3][3]){//灰度图像的膨胀操作 //李立宗 lilizong@gmail.com//2012-8-22if(myImage1.IsNull())OnOpenResourceFile();if(!myImage2.IsNull())myImage2.Destroy();if(myImage2.IsNull()){myImage2.Create(myImage1.GetWidth(),myImage1.GetHeight(),24,0);}if(myImage3.IsNull()){myImage3.Create(myImage1.GetWidth(),myImage1.GetHeight(),24,0);}//COLORREF pixel; int maxY = myImage1.GetHeight();int maxX=myImage1.GetWidth();byte* pRealData;byte* pRealData2;byte* pRealData3;pRealData=(byte*)myImage1.GetBits();pRealData2=(byte*)myImage2.GetBits();pRealData3=(byte*)myImage3.GetBits();int pit=myImage1.GetPitch();int pit2=myImage2.GetPitch();int pit3=myImage3.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 bitCount3=myImage3.GetBPP()/8;int tempR,tempG,tempB;//float temp,tempX,tempY;int temp;float u0,u1; //均值float w0,w1; //概率float sum0,sum1; //像素和int optIndex,optT; //最优阈值,及其所在像素的值float fVaria,fMaxVaria=0; //临时方差,最大方差//int pixelR[256],pixelG[256],pixelB[256];int pixel[256]={0}; //不要忘记初始化//灰度化for (int y=0; y<maxY; y++) {for (int x=0; x<maxX; x++) {temp=*(pRealData+pit*(y)+(x)*bitCount);if(bitCount==3){tempR=*(pRealData+pit*(y)+(x)*bitCount);tempG=*(pRealData+pit*(y)+(x)*bitCount+1);tempB=*(pRealData+pit*(y)+(x)*bitCount+2);temp=(int)(tempR*0.49+tempG*0.31+tempB*0.2);//temp=(int)((tempR+tempG+tempB)/3);}*(pRealData3+pit3*(y)+(x)*bitCount3)=temp;*(pRealData3+pit3*(y)+(x)*bitCount3+1)=temp;*(pRealData3+pit3*(y)+(x)*bitCount3+2)=temp;}}//CString str;//str.Format(TEXT("%d"),Td);//AfxMessageBox(str);////for (int y=0; y<maxY; y++) {//for (int x=0; x<maxX; x++) {//*(pRealData2+pit2*(y)+(x)*bitCount2)=255;//*(pRealData2+pit2*(y)+(x)*bitCount2+1)=255;//*(pRealData2+pit2*(y)+(x)*bitCount2+2)=255;//}//}int m,n;int src,des;for (int y=1; y<maxY-1; y++) {for (int x=1; x<maxX-1; x++) {src=des=0;for(m=0;m<3;m++)for(n=0;n<3;n++){src=*(pRealData3+pit3*(y-m+1)+(x+n-1)*bitCount3)+structure[m][n];//src=abs(src);if(src>255)src=255;if(src>des){des=src;}}//des=abs(des);//if(des>255)//des=255;*(pRealData2+pit2*(y)+(x)*bitCount2)=des;*(pRealData2+pit2*(y)+(x)*bitCount2+1)=des;*(pRealData2+pit2*(y)+(x)*bitCount2+2)=des;}}Invalidate();}