/// <summary> ///Two value image/// </summary> /// <param name= "BMP" ></param> /// <returns></returns> Private Static unsafeBitmap binaryzation (Bitmap bmp) {BitmapData Dstdata= BMP. LockBits (NewRectangle (0,0, BMP. Width, BMP. Height), Imagelockmode.readwrite, BMP. PixelFormat); byte* Data = (byte*) (dstdata.scan0); //convert the image to 0, 12 is worth the image; intStep =Dstdata.stride; intmeans = Getthreshold (data, BMP. Height *step); for(inty =0; Y < BMP. Height; y++) { for(intx =0; x < BMP. Width *3; X + =3) { if(Data[y * step + x +2] >means) Data[y* Step +x]= Data[y * Step + x +1] = Data[y * Step + x +2] =255; ElseData[y* Step +x]= Data[y * Step + x +1] = Data[y * Step + x +2] =0; }} BMP. Unlockbits (Dstdata); returnbmp; } /// <summary> ///binary Image acquisition of threshold value/// </summary> /// <param name= "Inpixels" ></param> /// <param name= "Length" >Height * Stride</param> /// <returns></returns> Private Static unsafe intGetthreshold (byte* Inpixels,intlength) { intInithreshold =127; intFinalthreshold =0; List<int> temp =Newlist<int>(); for(intindex =0; Index < length; Index + =3) {temp. ADD (Inpixels[index+2]); } List<int> sub1 =Newlist<int>(); List<int> sub2 =Newlist<int>(); intMEANS1 =0, Means2 =0; while(Finalthreshold! =inithreshold) {Finalthreshold=Inithreshold; for(inti =0; I < temp. Count (); i++) { if(Temp[i] <=inithreshold) {sub1. ADD (Temp[i]); } Else{sub2. ADD (Temp[i]); }} means1=Getmeans (SUB1); Means2=Getmeans (SUB2); Sub1. Clear (); Sub2. Clear (); Inithreshold= (means1 + means2)/2; } returnFinalthreshold; } /// <summary> ///Image binary acquisition means/// </summary> /// <param name= "Data" ></param> /// <returns></returns> Private Static intGetmeans (list<int>data) { intresult =0; intSize =data. Count (); foreach(intIinchdata) {Result+=i; } return(Result/size); }
C # pointer manipulation image binary processing