使用VC++设计程序:对于一幅256级灰度图像,求其一元熵值、二维熵值

news2024/11/18 13:43:40

数字图像处理–实验二B图像的一维熵与二维熵算法

本文主要是对图像进行一维熵以及二维熵的计算,下面附有实现的代码

文章目录

  • 数字图像处理--实验二B图像的一维熵与二维熵算法
    • 一、 实验内容
    • 二、 一维熵
      • 1. 一维熵的定义
      • 2. 一维熵的C++代码实现
    • 三、 二维熵
      • 1. 二维熵的定义
      • 2. 二维熵的C++代码实现

一、 实验内容

B实验:使用VC++设计程序:对于一幅256级灰度图像,求其一元熵值、二维熵值

实验现象:
在这里插入图片描述

二、 一维熵

1. 一维熵的定义

一元灰度熵的定义:

  1. 概念: 图像熵是一种特征的统计形式,用于反映图像中平均信息量的多少。

  2. 一维熵: 表示图像中灰度分布的聚集特征所包含的信息量。

  3. 概率 (p_i): 用于描述某个灰度值 (i) 在图像中出现的概率,其取值范围是 (0 \leq p_i \leq 1)。这个概率可以通过灰度直方图获得。

  4. 一元灰度熵 (H_1): 通过以下公式定义:

H 1 = − ∑ i = 0 L − 1 p i ⋅ log ⁡ 2 ( p i ) H_1 = - \sum_{i=0}^{L-1} p_i \cdot \log_2(p_i) H1=i=0L1pilog2(pi)

其中,(L) 是灰度级别的数量, p i p_i pi 是灰度值为 (i) 的像素在图像中出现的概率。

这个一元灰度熵的计算利用了香农熵的概念,衡量了图像中灰度分布的聚集特征所包含的信息量。高一元灰度熵通常表示图像的灰度分布较分散,低一元灰度熵表示图像的灰度分布较集中。

2. 一维熵的C++代码实现

double entropy_1 = 0.0;  //一维熵
 double entropy_2 = 0.0;  //二维熵

 //获取图高
 int height = pDoc->m_pDibInit->GetHeight();
 //获取图宽
 int width = pDoc->m_pDibInit->GetWidth();

 int pixelGray[256] = { 0 };
 for(int i=0;i<height;i++)  //统计各灰度值的像素点的个数
  for (int j = 0; j < width; j++)
  {
   int grey = pDoc->m_pDibInit->GetPixelGray(i, j);
   pixelGray[grey]++; 
  }
 //将各灰度值个数转换成概率
 double PixGray[256] = { 0.0 };
 for (int i = 0; i < 256; i++)
 {
  PixGray[i] = (pixelGray[i]+0.0) / width /height;
  if (PixGray[i])
   entropy_1 += PixGray[i] * (log(PixGray[i]) / log(2));  //将log(e)转换成log(2)
 }
 entropy_1 = -entropy_1;

三、 二维熵

1. 二维熵的定义

图像的一维熵可以表示图像灰度分布的聚集特征,却不能反映图像灰度分布的空间特征,为了表征这种空间特征,可以在一维熵的基础上引入能够反映灰度分布空间特征的特征量来组成图像的二维熵。
选择图像的邻域灰度均值作为灰度分布的空间特征量,与图像的像素灰度组成特征二元组,记为(i, j),其中i表示像素的灰度值(0 ≤ i≤ 255),j表示邻域灰度均值(0≤j≤255):
P i j = f ( i , j ) / ( M ∗ N ) P_{ij}=f(i,j)/(M*N) Pij=f(i,j)/(MN)
上式能反应某像素位置上的灰度值与其周围像素灰度分布的

综合特征,其中f(i, j)为特征二元组(i, j)出现的频数,M、N分别为图像的宽度和高度,定义离散的图像二维熵为:
H = − ∑ i = 0 L − 1 ∑ j = 0 L − 1 p i ⋅ log ⁡ 2 ( p i ) H = - \sum_{i=0}^{L-1}\sum_{j=0}^{L-1} p_i \cdot \log_2(p_i) H=i=0L1j=0L1pilog2(pi)
其中,(L) 是灰度级别的数量, p i p_i pi 是灰度值为 (i) 的像素在图像中出现的概率。

构造的图像二维熵可以在图像所包含信息量的前提下,突出反映图像中像素位置的灰度信息和像素邻域内灰度分布的综合特征。

2. 二维熵的C++代码实现

 //二维熵
 int val[256][256] = { 0 };  //存储每一个像素点的领域灰度均值

 for (int i = 0; i < height; i++)
 {
  for (int j = 0; j < width; j++)
  {
   int sum = 0; //记录领域灰度之和
   int num = 0; //统计领域取点的数量

   for (int k = -1; k <= 1; k++)
   {
    for (int m = -1; m <= 1; m++)
    {
     if (i + k >= 0 && i + k < 256 && j + m >= 0 && j + m < 255)
     {
      sum += pDoc->m_pDibInit->GetPixelGray(i + k, j + m);
      num++;
     }
    }
   }
   val[i][j] = sum / num;
  }
 }

 int F[256][256] = { 0 }; //统计f[i][j]的频数,i为该点灰度值,j为该点领域灰度均值
 float p_F[256][256] = { 0.0 }; //将频数转换成概率
 for(int i=0;i<height;i++)
  for (int j = 0; j < width; j++)
  {
   int gray = pDoc->m_pDibInit->GetPixelGray(i, j);
   F[gray][val[i][j]]++;
  }

 for (int k = 0; k < height; k++)
  for (int m = 0; m < width; m++)
  {
   p_F[k][m] = (F[k][m]+0.0) / height /width;
   if (p_F[k][m])
   {
    entropy_2 += p_F[k][m] * (log(p_F[k][m]) / log(2)); //将log(e)转换成log(2)
   }
  }
 entropy_2 = -entropy_2;
 CString str1;
 // 显示信息 
 str1.Format("图像一维熵:%f,图像二维熵:%f", entropy_1, entropy_2);
 MessageBox(str1);
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1210934.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JSP注释方式演示 讲解显式与隐式注释

好 今天我们来了解一下jsp中的注释哦 它支持两种注释: 显式注释/隐式注释 显式注释 是 允许被客户端看到的 就是 打开浏览器 用查看源码方式能看到的注释 与之对应 隐式注释 就是 在客户端 是无法看到这些注释信息的 显式注释 的语法就是html的注释语法 <!-- 显式注释 --…

03-学成在线内容管理模块之课程查询

课程查询 需求分析 教学机构人员点击课程管理按钮进入课程查询界面,在课程列表页面输入查询条件查询课程的信息 当不输入查询条件时默认会全部课程信息,输入查询条件会查询符合条件的课程信息,约束条件是本教学机构查询本机构的课程信息 数据模型(model工程) 课程查询功能…

ACM练习——第三天

今天继续练习C和ACM模式 在写题之前先了解一些新的知识 1.#include <algorithm> #include <algorithm> 是 C 标准库中的头文件之一&#xff0c;其中包含了一系列用于处理各种容器&#xff08;如数组、向量、列表等&#xff09;和其他数据结构的算法。这个头文件提供…

spring cloud alibaba之nacos

spring cloud nacos 安装和启动nacos # 解压nacos安装包 # tar -zvxf nacos-server-1.4.1.tar.gz# nacos默认是以集群的模式启动&#xff0c;此处先用单机模式 # cd /usr/local/mysoft/nacos/bin # sh startup.sh -m standalone# nacos 日志 # tail -f /usr/local/mysoft/na…

C++ [多态]

本文已收录至《C语言和高级数据结构》专栏&#xff01; 作者&#xff1a;ARMCSKGT 多态 前言正文多态的概念多态的定义构成多态的条件关于final和override关于重载,重写和重定义 抽象类概念补充 多态的原理虚表指针和虚表关于虚函数的调用动态绑定和静态绑定 单继承与多继承中的…

Python 如何实现解释器(Interpreter)设计模式?什么是解释器设计模式?

什么是解释器&#xff08;Interpreter&#xff09;设计模式&#xff1f; 解释器&#xff08;Interpreter&#xff09;设计模式是一种行为型设计模式&#xff0c;它定义了一种语言文法的表示&#xff0c;并提供了一个解释器&#xff0c;用于解释语言中的句子。该模式使得可以定…

程序员黑话之故障专辑(中英文对照版)

去年出过一期「程序员黑话集」&#xff0c;一直想着更新一季&#xff0c;正好最近业内接连发生了几起影响比较大的故障&#xff0c;那我们就专门做一期「故障专辑」吧。 故障 故障有好几种叫法&#xff0c;比较正式的 故障 - Outage事故 - Incident 不怎么严重的&#xff0…

文生图超级大合集!几乎包含所有模型,提示词教程

除了DALLE 3、Midjourney、Stable Difusion&#xff0c;你还知道哪些好用小众的文生图模型吗&#xff1f; 你知道一张精美的AI图片&#xff0c;需要哪些精准的提示词、效果融合以及制作流程吗&#xff1f; 如果把几乎所有文生图模型集合在一个平台中&#xff0c;并且还能叠加…

Python小白之PyCharm仍然显示“No module named ‘xlwings‘”

Python小白之“没有名称为xlwings‘的模块”-CSDN博客文章浏览阅读8次。cmd 打开命令行&#xff0c;输入python出现>>>的提示格&#xff0c;输入import xlwings 回车&#xff0c;正常报错&#xff1a;No module named xlwings。输入python 回车后&#xff0c;再输入im…

连小白都在用的电子期刊制作网站

你是不是也想制作一份精美的电子期刊&#xff0c;却苦于没有专业的技能和工具&#xff1f;现在&#xff0c;有一款制作电子期刊的网站&#xff0c;连小白都能轻松制作电子期刊&#xff01;它就是今天要介绍的——【FLBOOK在线制作电子杂志平台】&#xff01; 【FLBOOK在线制作电…

Java智慧工地云SaaS源码,AI服务器、智能硬件

智慧工地智能硬件 一、自动喷淋控制 当扬尘监测值超过在智慧工地系统中设定的闽值后自动喷淋控制系统通过接收系统发出的开关指令&#xff0c;实现自动、及时喷淋降尘&#xff0c;同时系统可设置自动喷淋时间段&#xff0c;每天定时喷淋&#xff0c;避免环境污染。 二、智能电…

uniapp app tabbar 页面默认隐藏

1.在page.json 中找到tabbar visible 默认为true,设为false则是不显示 uni.setTabBarItem({ index: 1, //列表索引 visible:true //显示或隐藏 })

AI+视觉,共话新能源企业数字化转型新可能

​ 近日&#xff0c;“新能源芯机遇2023新能源行业数字化赋能高峰论坛”在江苏常州隆重召开。本次论坛由常州市人民政府、中国能源研究会指导&#xff0c;武进区人民政府、常州市工业和信息化局、英特尔&#xff08;中国&#xff09;有限公司、阿里云计算有限公司共同举办&…

LeetCode 1334. 阈值距离内邻居最少的城市:多次运用单源最短路的迪杰斯特拉算法

【LetMeFly】1334.阈值距离内邻居最少的城市&#xff1a;多次运用单源最短路的迪杰斯特拉算法 力扣题目链接&#xff1a;https://leetcode.cn/problems/find-the-city-with-the-smallest-number-of-neighbors-at-a-threshold-distance/ 有 n 个城市&#xff0c;按从 0 到 n-1…

【吐血总结】前端开发:一文带你精通Vue.js前端框架(七)

文章目录 前言1️⃣事件处理器2️⃣表单3️⃣总结 前言 上一篇中我们学习了vue.js 的条件语句、循环语句等知识点.&#xff0c;现在让我们接着Vue系列的学习。 Vue中事件处理器、表单等在开发中的作用不可或缺&#xff0c;本文将基于实例进行以上知识点的讲解。 1️⃣事件处理器…

传统游戏难产 育碧瞄向Web3

出品过《刺客信条》的游戏大厂育碧&#xff08;Ubisoft&#xff09;又在Web3游戏领域有了新动作。 首次试水NFT无功而返后&#xff0c;育碧&#xff08;Ubisoft&#xff09;战略创新实验室与Web3游戏网络Immutable达成合作&#xff0c;将利用Immutable 开发游戏的经验和及生态…

计算机视觉+深度学习+机器学习+opencv+目标检测跟踪+一站式学习(代码+视频+PPT)

第1章&#xff1a;视觉项目资料介绍与学习指南 相关知识&#xff1a; 介绍计算机视觉、OpenCV库&#xff0c;以及课程的整体结构。学习概要&#xff1a; 了解课程的目标和学习路径&#xff0c;为后续章节做好准备。重要性&#xff1a; 提供学生对整个课程的整体认识&#xff0…

全彩LED显示屏的质量怎样判断

判断全彩LED显示屏的质量需要考虑多个方面&#xff0c;包括平整度、白平衡、可视角度、分辨率、亮度、可靠性和稳定性等。以下是一些建议&#xff0c;供你参考&#xff1a; 平整度&#xff1a;LED显示屏的表面平整度应在1mm以内&#xff0c;以保证显示图像不发生扭曲。局部凸起…

2024免费的内存卡数据恢复软件EasyRecovery

内存卡删除的视频是有可能恢复的&#xff0c;当您在内存卡上删除视频文件时&#xff0c;实际上只是将该文件标记为可被覆盖&#xff0c;而并不是立即将其从内存卡上删除。这意味着在文件被覆盖之前&#xff0c;您有机会将其恢复。内存卡上的数据恢复原理有以下几点&#xff1a;…

HTML5响应式网页设计(考试题:旅游项目)

效果图 .html代码 <!DOCTYPE html> <html><head><meta name"viewport"content"widthdevice-width,initial-scale1,minimum-scale1,maximum-scale1,user-scalableno" /><meta charset"utf-8" /><title></…