//图像的熵=========================================================================================
        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);
               
            }
        }

//计算熵的函数-----------------------------------------------
        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);

//获取各灰度值的像素个数
            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);
            }
        }

//计算灰度平均值的函数---------------------------------------
        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" +
                    "左上角坐标为(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);
            }
        }

//计算方差值的函数-------------------------------------------
        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

转载于:https://www.cnblogs.com/pengkunfan/p/3444580.html

图像的熵、灰度平均值、灰度中值、方差相关推荐

  1. 图像滤波算法整理--均值、中值、高斯、拉普拉斯算子、梯度算子:

    首先分为平滑空间滤波器和锐化空间滤波器来进行介绍.平滑空间滤波器主要用于模糊处理和降低噪声,主要两类:均值滤波器和中值滤波器.锐化空间滤波器主要是:拉普拉斯算子和梯度算子. 一.均值滤波方法:对高斯噪 ...

  2. 5.1matlab数据统计分析(最大值、最小值、平均值、中值、和、积、累加和、累加积、标准差、相关系数、排序)

    1.求最大元素和最小元素 max():求向量或矩阵的最大元素. min( ):求向量或矩阵的最小元素. (1)当参数为向量时,函数有两种调用格式: ①y=max(X):返回向量X的最大值存入y,如果X ...

  3. 使用numpy计算平均值,中值,方差,标准差

    使用numpy计算平均值,中值,方差,标准差 import numpy as np dataset = np.random.rand(10,12) # 输出前两行 dataset[0:2] # 平均值 ...

  4. 【Python】两种方法计算平均值、中值、众数、方差、标准差、百分位数

    目录 数据特征 数据集 均值(Mean) - 平均值 中值(Median) - 中点值,又称中位数 众数(Mode) - 最常见的值 方差 标准差(欧式距离) 百分位数 数据特征 特征探索主要是对数据 ...

  5. 采用灰度分组统计方法实现图像中值滤波

    中值滤波是图像处理中常用的一种噪声滤波方法.传统的图像中值滤波代码采用排序方法实现,处理速度主要取决于排序算法,但无论什么排序算法,总离不开大量的元素比较.交换或移动,而这些恰好是当前计算机处理的&q ...

  6. 基于FPGA的图像中值滤波原理与实现

    图像中值滤波的FPGA实现 项目简述 中值滤波器原理 中值滤波器的实现 测试模块的代码 仿真结果 下板结果 总结 项目简述 中值滤波器在去除尖端噪声中非常重要,是信号处理中最长用到的滤波器.图像中的一 ...

  7. 关于中值滤波算法,以及C语言实现(转)

    源:关于中值滤波算法,以及C语言实现 1.什么是中值滤波? 中值滤波是对一个滑动窗口内的诸像素灰度值排序,用其中值代替窗口中心象素的原来灰度值,它是一种非线性的图像平滑法,它对脉冲干扰级椒盐噪声的抑制 ...

  8. 中值滤波matlab

    摘  要 中值滤波技术是一种在去除噪声的同时能较好保护图像边缘细节的非线性技术,在图像增强和恢复等领域中得到了广泛的应用.文章阐述了中值滤波的原理和特点,并使用软件工具MATLAB实现了图像的中值滤波 ...

  9. matlab编程实现自适应均值滤波和自适应中值滤波

    matlab编程实现自适应滤波器 一.自适应均值滤波器 1. 原理部分: 2. 程序代码 3. 结果对比 二.自适应中值滤波 1. 原理部分 2.程序代码 3. 结果对比 一.自适应均值滤波器 1. ...

  10. opencv 滤波 方框滤波 均值滤波 高斯滤波 中值滤波 双边滤波

    文章目录 一. 线性滤波 1.1. 方框滤波 demo 1.2. 均值滤波 demo 1.3. 高斯滤波 demo 二. 非线性滤波 2.1. 中值滤波 demo 2.2. 双边滤波 demo 结构体 ...

最新文章

  1. 【哲学百科】文艺复兴及唯理主义时期(公元1500~公元1750)
  2. iOS9中如何在日历App中创建一个任意时间之前开始的提醒(一)
  3. BREW 计费模式概览
  4. AI工程师面试知识点:神经网络相关
  5. 数电实验报告实验一_大二下学期的两三事之数电实验amp;课设
  6. C语言函数集(十四)
  7. POJ1552-Doubles
  8. [vue] 如果让你教一个2-3年经验前端经验的同事使用vue,你该怎么教?
  9. html5文件域的自动获取,HTML5 文件域+FileReader 读取文件(一)
  10. 第二部分_搭建Java Web开发环境与配置Tomcat服务器JSP详解
  11. 少儿编程:C++绘图相关书籍篇
  12. 虚拟化系列-Windows server 2012 备份管理
  13. 如何选择合适的BI工具
  14. linux pstree(process status tree) 命令详解
  15. 节奏大师乐谱破解 续
  16. 微信小程序----实现YDUI的ScrollNav组件(滚动导航)
  17. 国家各个政府机构网站
  18. licode erizo pipleline 1 : handlercontext
  19. 如何在 Windows 中快速查找文档
  20. 编程该学什么以及vc++一些心得

热门文章

  1. 正则表达式 (练习)
  2. C#3.0 自动属性——只能在简单属性上偷懒
  3. SQL Server 2008 性能测试和调优
  4. 高级软件工程第七次作业:东理三剑客团队作业-随笔5
  5. Hexo瞎折腾系列(5) - 使用hexo-neat插件压缩页面静态资源
  6. LeetCode 102. Binary Tree Level Order Traversal
  7. VBA与Excel内置的函数
  8. iOS中js与objective-c的交互(转)
  9. 750px设计稿处理方式
  10. (九)数据结构之“图”