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#程序设计有所帮助。