void CISLSView::OnGradientA() { //灰度形态学梯度 //李立宗 lilizong@gmail.com //2012-8-23 int structure[3][3]={5,25,15,0,25,0,25,25,25}; CImage myImage1Copy,erosionImage,dilationImage; dilationGray(structure); imageCopy(dilationImage,myImage2); imageCopy(myImage1Copy,myImage1); imageCopy(myImage1,myImage2); erosionGray(structure); imageCopy(erosionImage,myImage2); int maxX=myImage1.GetWidth(); int maxY=myImage1.GetHeight(); byte* pRealDataDilation; byte* pRealDataErosion; byte* pRealData2; pRealDataDilation=(byte*)dilationImage.GetBits(); pRealDataErosion=(byte*)erosionImage.GetBits(); pRealData2=(byte*)myImage2.GetBits(); int pitDilation=dilationImage.GetPitch(); int pitErosion=erosionImage.GetPitch(); int pit2=myImage2.GetPitch(); int bitCountDilation=dilationImage.GetBPP()/8; int bitCountErosion=erosionImage.GetBPP()/8; int bitCount2=myImage2.GetBPP()/8; int erosionValue,dilationValue; int temp; for (int y=0; y<maxY; y++) { for (int x=0; x<maxX; x++) { erosionValue=*(pRealDataDilation+pitDilation*(y)+(x)*bitCountDilation); dilationValue=*(pRealDataErosion+pitErosion*(y)+(x)*bitCountErosion); temp=dilationValue-erosionValue; //if(temp<0) // temp=0; //temp=abs(temp); *(pRealData2+pit2*(y)+(x)*bitCount2)=temp; *(pRealData2+pit2*(y)+(x)*bitCount2+1)=temp; *(pRealData2+pit2*(y)+(x)*bitCount2+2)=temp; } } imageCopy(myImage1,myImage1Copy); Invalidate(); } void CISLSView::OnGradientB() { //灰度形态学梯度 //李立宗 lilizong@gmail.com //2012-8-23 int structure[3][3]={5,25,15,0,25,0,25,25,25}; CImage myImage1Copy,erosionImage,dilationImage; dilationGray(structure); imageCopy(dilationImage,myImage2); imageCopy(myImage1Copy,myImage1); imageCopy(myImage1,myImage2); erosionGray(structure); imageCopy(erosionImage,myImage2); int maxX=myImage1.GetWidth(); int maxY=myImage1.GetHeight(); byte* pRealDataDilation; byte* pRealDataErosion; byte* pRealData2; pRealDataDilation=(byte*)dilationImage.GetBits(); pRealDataErosion=(byte*)erosionImage.GetBits(); pRealData2=(byte*)myImage2.GetBits(); int pitDilation=dilationImage.GetPitch(); int pitErosion=erosionImage.GetPitch(); int pit2=myImage2.GetPitch(); int bitCountDilation=dilationImage.GetBPP()/8; int bitCountErosion=erosionImage.GetBPP()/8; int bitCount2=myImage2.GetBPP()/8; int erosionValue,dilationValue; int temp; for (int y=0; y<maxY; y++) { for (int x=0; x<maxX; x++) { erosionValue=*(pRealDataDilation+pitDilation*(y)+(x)*bitCountDilation); dilationValue=*(pRealDataErosion+pitErosion*(y)+(x)*bitCountErosion); temp=dilationValue-erosionValue; //if(temp<0) // temp=0; temp=abs(temp); *(pRealData2+pit2*(y)+(x)*bitCount2)=temp; *(pRealData2+pit2*(y)+(x)*bitCount2+1)=temp; *(pRealData2+pit2*(y)+(x)*bitCount2+2)=temp; } } imageCopy(myImage1,myImage1Copy); Invalidate(); } void CISLSView::OnGradientC() { //灰度形态学梯度 //李立宗 lilizong@gmail.com //2012-8-23 int structure[3][3]={5,25,15,0,25,0,25,25,25}; CImage myImage1Copy,erosionImage,dilationImage; erosionGray(structure); imageCopy(erosionImage,myImage2); imageCopy(myImage1Copy,myImage1); imageCopy(myImage1,myImage2); dilationGray(structure); imageCopy(dilationImage,myImage2); int maxX=myImage1.GetWidth(); int maxY=myImage1.GetHeight(); byte* pRealDataDilation; byte* pRealDataErosion; byte* pRealData2; pRealDataDilation=(byte*)dilationImage.GetBits(); pRealDataErosion=(byte*)erosionImage.GetBits(); pRealData2=(byte*)myImage2.GetBits(); int pitDilation=dilationImage.GetPitch(); int pitErosion=erosionImage.GetPitch(); int pit2=myImage2.GetPitch(); int bitCountDilation=dilationImage.GetBPP()/8; int bitCountErosion=erosionImage.GetBPP()/8; int bitCount2=myImage2.GetBPP()/8; int erosionValue,dilationValue; int temp; for (int y=0; y<maxY; y++) { for (int x=0; x<maxX; x++) { erosionValue=*(pRealDataDilation+pitDilation*(y)+(x)*bitCountDilation); dilationValue=*(pRealDataErosion+pitErosion*(y)+(x)*bitCountErosion); temp=dilationValue-erosionValue; //if(temp<0) // temp=0; //temp=abs(temp); *(pRealData2+pit2*(y)+(x)*bitCount2)=temp; *(pRealData2+pit2*(y)+(x)*bitCount2+1)=temp; *(pRealData2+pit2*(y)+(x)*bitCount2+2)=temp; } } imageCopy(myImage1,myImage1Copy); Invalidate(); } void CISLSView::OnGradientD() { //灰度形态学梯度 //李立宗 lilizong@gmail.com //2012-8-23 int structure[3][3]={5,25,15,0,25,0,25,25,25}; CImage myImage1Copy,erosionImage,dilationImage; erosionGray(structure); imageCopy(erosionImage,myImage2); imageCopy(myImage1Copy,myImage1); imageCopy(myImage1,myImage2); dilationGray(structure); imageCopy(dilationImage,myImage2); int maxX=myImage1.GetWidth(); int maxY=myImage1.GetHeight(); byte* pRealDataDilation; byte* pRealDataErosion; byte* pRealData2; pRealDataDilation=(byte*)dilationImage.GetBits(); pRealDataErosion=(byte*)erosionImage.GetBits(); pRealData2=(byte*)myImage2.GetBits(); int pitDilation=dilationImage.GetPitch(); int pitErosion=erosionImage.GetPitch(); int pit2=myImage2.GetPitch(); int bitCountDilation=dilationImage.GetBPP()/8; int bitCountErosion=erosionImage.GetBPP()/8; int bitCount2=myImage2.GetBPP()/8; int erosionValue,dilationValue; int temp; for (int y=0; y<maxY; y++) { for (int x=0; x<maxX; x++) { erosionValue=*(pRealDataDilation+pitDilation*(y)+(x)*bitCountDilation); dilationValue=*(pRealDataErosion+pitErosion*(y)+(x)*bitCountErosion); temp=dilationValue-erosionValue; //if(temp<0) // temp=0; temp=abs(temp); *(pRealData2+pit2*(y)+(x)*bitCount2)=temp; *(pRealData2+pit2*(y)+(x)*bitCount2+1)=temp; *(pRealData2+pit2*(y)+(x)*bitCount2+2)=temp; } } imageCopy(myImage1,myImage1Copy); Invalidate(); }