图像的熵、灰度平均值、灰度中值、方差
//圖像的熵=========================================================================================
????????private void Menu_Entropy_Click(object sender, EventArgs e)
????????{
????????????if (curBitmap != null)
????????????{
????????????????//計算熵
????????????????double entropy = GetEntropy(curBitmap, curBitmap.Width, curBitmap.Height);
????????????????MessageBox.Show("圖像:"+curFileName +"nn"+"圖像熵為??H = " + entropy);
???????????????
????????????}
????????}
????????//計算熵的函數(shù)-----------------------------------------------
????????public double GetEntropy(Bitmap bmp, int w, int h)
????????{
????????????int g;
????????????double H = 0.0;
????????????int[] pix = new int[256];
????????????Array.Clear(pix, 0, 256);
????????????//獲取各灰度值的像素個數(shù)
????????????for (int i = 0; i < h; i++)
????????????{
????????????????for (int j = 0; j < w; j++)
????????????????{
????????????????????Color c = bmp.GetPixel(j, i);
????????????????????g = (int)(0.299*c.R + 0.587*c.B + 0.114*c.G);
????????????????????pix[g]++;
????????????????}
????????????}
???????????
????????????//計算熵
????????????for (int i = 0; i < 256; i++)
????????????????if (pix[i] > 0)
????????????????????H = H + pix[i] * Math.Log10(pix[i]);
????????????H = Math.Log10(w * h) / Math.Log10(2) - H / (w * h * Math.Log10(2));
????????????return H;
????????}
?
//灰度平均值=======================================================================================
????????private void Menu_GrayAverage_Click(object sender, EventArgs e)
????????{
????????????if (curBitmap != null)
????????????{
????????????????double aver = GetGrayAverage(curBitmap, curBitmap.Width, curBitmap.Height);
????????????????MessageBox.Show("圖像:" + curFileName +"nn"+ "灰度平均值為??A = " + aver);
????????????}
????????}
????????//計算灰度平均值的函數(shù)---------------------------------------
????????public double GetGrayAverage(Bitmap bmp, int w, int h)
????????{
????????????double sum = 0;
????????????//計算平均值
????????????for (int i = 0; i < w; i++)
????????????????for (int j = 0; j?< h; j++)
????????????????{
????????????????????Color c = bmp.GetPixel(i,?j);
????????????????????sum = sum + (int)(0.299 * c.R + 0.587?* c.B + 0.114 * c.G);
????????????????}
????????????double aver = sum / (w * h);
????????????return aver;
????????}
?
//灰度中值=========================================================================================
????????private void Menu_GrayMid_Click(object sender, EventArgs e)
????????{
????????????if (curBitmap != null)
????????????{
????????????????Bitmap bmp = curBitmap;
????????????????//由5 X 5的矩形獲取值
????????????????int[] pix = new int[25];
????????????????for (int j = 0; j < 5; j++)
????????????????{
????????????????????for (int i = 0; i < 5; i++)
????????????????????{
????????????????????????pix[i + j * 5] = bmp.GetPixel(100 + i, 100 + j).B;
????????????????????}
????????????????}
????????????????pix = MedianSorter(pix,25);
????????????????MessageBox.Show("圖像:" + curFileName + "n" +
????????????????????"左上角坐標(biāo)為(100,100)的5X5矩形塊n灰度中值為" +
????????????????????"??M = " + pix[12]);
????????????}
????????}
????????//排序-------------------------------------------------------
????????public int[] MedianSorter(int[] data, int m)
????????{
????????????int tem;
????????????for (int i = m - 1; i >= 1; i--)
????????????????for (int j = 1; j <= i; j++)
????????????????????if (data[j - 1] > data[j])
????????????????????{
????????????????????????tem = data[j];
????????????????????????data[j] = data[j - 1];
????????????????????????data[j - 1] = tem;
????????????????????}
????????????return data;
????????}
?
//方差=============================================================================================
????????private void Menu_Variance_Click(object sender, EventArgs e)
????????{
????????????if (curBitmap != null)
????????????{
????????????????double vari = GetVariance(curBitmap, curBitmap.Width, curBitmap.Height);
????????????????MessageBox.Show("圖像:" + curFileName + "nn" + "方差值??S = " + vari);
????????????}
????????}
????????//計算方差值的函數(shù)-------------------------------------------
????????public double GetVariance(Bitmap bmp, int w, int h)
????????{
????????????double aver, vari =0;
????????????int data;
????????????//求平均值
????????????aver = GetGrayAverage(bmp ,w , h);
????????????//求方差
????????????for (int i = 0; i < w; i++)
????????????{
????????????????for (int j = 0; j < h; j++)
????????????????{
????????????????????Color c = bmp.GetPixel(i, j);
????????????????????data = (int)(0.299 * c.R + 0.587 * c.B + 0.114 * c.G);
????????????????????vari = vari + (data - aver) * (data - aver);
????????????????}
????????????}
????????????vari = vari / (w * h);
????????????return vari;
????????}
?
?
?
連接:http://blog.sina.com.cn/s/blog_5edfc90301012nbz.html
轉(zhuǎn)載于:https://www.cnblogs.com/pengkunfan/p/3444580.html
總結(jié)
以上是生活随笔為你收集整理的图像的熵、灰度平均值、灰度中值、方差的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 团队招人宣传文案29句
- 下一篇: 夏天吃雪糕发朋友圈的句子 吃冰棍心情很爽