C#图像处理之图像均值方差计算的方法
本文实例讲述了C#图像处理之图像均值方差计算的方法。分享给大家供大家参考。具体如下:
//本函数均是基于RGB颜色空间计算 //定义图像均值函数(RGB空间) publicdoubleAnBitmap(Bitmapa) { doubleV=0; Rectanglerect=newRectangle(0,0,a.Width,a.Height); System.Drawing.Imaging.BitmapDatabmpData=a.LockBits(rect,System.Drawing.Imaging.ImageLockMode.ReadWrite,System.Drawing.Imaging.PixelFormat.Format24bppRgb); unsafe { byte*pIn=(byte*)bmpData.Scan0.ToPointer(); byte*P; intR,G,B; doublemeanvalue=0,sum=0; intstride=bmpData.Stride; for(inty=0;y<a.Height;y++) { for(intx=0;x<a.Width;x++) { P=pIn; B=P[0]; G=P[1]; R=P[2]; sum+=B*0.114+G*0.587+R*0.299; pIn+=3; } pIn+=stride-a.Width*3; } meanvalue=sum/(a.Width*a.Height); V=meanvalue; } a.UnlockBits(bmpData); returnV;//返回图像均值V } //定义图像统计方差函数(RGB空间) publicdoubleAnCONBitmap(Bitmapa,doublemeanvalue) { doubleV=0; Rectanglerect=newRectangle(0,0,a.Width,a.Height); System.Drawing.Imaging.BitmapDatabmpData=a.LockBits(rect,System.Drawing.Imaging.ImageLockMode.ReadWrite,System.Drawing.Imaging.PixelFormat.Format24bppRgb); unsafe { byte*pIn=(byte*)bmpData.Scan0.ToPointer(); byte*P; intR,G,B; doubleconv=0,sum=0; intstride=bmpData.Stride; for(inty=0;y<a.Height;y++) { for(intx=0;x<a.Width;x++) { P=pIn; B=P[0]; G=P[1]; R=P[2]; sum+=(B*0.114+G*0.587+R*0.299-meanvalue)*(B*0.114+G*0.587+R*0.299-meanvalue); pIn+=3; } pIn+=stride-a.Width*3; } conv=sum/(a.Width*a.Height-1); V=conv; } a.UnlockBits(bmpData); returnV;//返回图像方差V }
希望本文所述对大家的C#程序设计有所帮助。