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

数字图像处理–实验二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.hqwc.cn/news/177070.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Android】画面卡顿优化列表流畅度五之下拉刷新上拉加载更多组件RefreshLayout修改

之前也写过类似组件的介绍&#xff1a; 地址&#xff1a;下拉刷新&上拉加载更多组件SmartRefreshLayout 本来打算用这个替换的&#xff0c;但在进行仔细研究发现不太合适。功能都很好&#xff0c;但嵌入不了当前的工程体系里。原因就是那啥体制懂的都懂。这样的组件需要改…

VUE组件的生命周期

每个 Vue 组件实例在创建时都需要经历一系列的初始化步骤&#xff0c;比如设置好数据侦听&#xff0c;编译模板&#xff0c;挂载实例到 DOM&#xff0c;以及在数据改变时更新 DOM。在此过程中&#xff0c;它也会运行被称为生命周期钩子的函数&#xff0c;让开发者有机会在特定阶…

数字人,虚拟数字人——你看好数字人领域的发展吗?

你看好数字人领域的发展吗&#xff1f; 目录 一、虚拟人、数字人、虚拟数字人基本概念 1.1、虚拟人&#xff08;Virtual Person&#xff09; 1.2、 数字人&#xff08;Digital Human&#xff09; 1.3、虚拟数字人&#xff08;Virtual Digital Human&#xff09; 1.4、侧重…

chatGPT真的会改变我们的生活吗?

先不说生活影响有多大&#xff0c;工作职场影响很大&#xff0c;现在在职场&#xff0c;随处可见Chat GPT的身影 OpenAI 开发的 ChatGPT 和类似的人工智能工具在短时间内不会取代我们的工作。但是&#xff0c;在科技、媒体等许多行业中&#xff0c;它们可以帮助员工更好、更快地…

百度飞浆环境安装

前言&#xff1a; 在安装飞浆环境之前得先把pytorch环境安装好&#xff0c;不过关于pytorch网上教程最多的都是通过Anaconda来安装&#xff0c;但是Anaconda环境安装容易遇到安装超时导致安装失败的问题&#xff0c;本文将叫你如何通过pip安装的方式快速安装&#xff0c;其实这…

PHP 论文发表管理系统mysql数据库web结构layUI布局apache计算机软件工程网页wamp

一、源码特点 PHP 论文发表管理系统是一套完善的web设计系统mysql数据库 &#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 php 论文发表系统1 代码 https://download.csdn.net/download/qq_412213…

一则DNS被重定向导致无法获取MySQL连接处理

同事反馈xwik应用端报java exception 获取MySQL连接超时无法连接到数据库实例 经过告警日志发现访问进来的IP地址数据库端无法被解析&#xff0c;这里可以知道问题出现在Dns配置上了 通过以上报错检查/etc/resolve.conf 发现namesever 被重定向设置成了114.114.114.114 域名 …

11.3SpringMVC

一.概念 1.SpringMvc: a.构建在Servlet(api)基础上. b.是一个Web框架(HTTP). c.来自于Spring webMVC模块. 2.MVC 二.注册路由的注解 1.RequestMapping("/test") // 路由注册 注意: 这个注解在类和方法上都要使用,代表不同等级的路由. 2.RestController a)R…

【华为OD题库-022】阿里巴巴找黄金宝箱(IV)-java

题目 一贫如洗的椎夫阿里巴巴在去砍柴的路上&#xff0c;无意中发现了强盗集团的藏宝地&#xff0c;藏宝地有编号从0-N的子&#xff0c;每个箱子上面有一个数字&#xff0c;箱子排列成一个环&#xff0c;编号最大的箱子的下一个是编号为0的箱子。请输出每个箱子贴的数字之后的第…

「题解」相交链表

&#x1f349;题目 题目链接 &#x1f349;解析 “提示”部分有提示链表数不为零&#xff0c;所以讨论链表为空的情况。 最简单粗暴的思路就是&#xff1a;遍历链表&#xff0c;先使用循环遍历A链表&#xff0c;然后嵌套循环遍历B&#xff0c;比对A、B是否存在地址相同的…

libusb获取Windows设备实例路径DevicePath

libusb 当前版本&#xff08;1.0.26&#xff09;libusb.h 头文件提供的接口似乎没有办法获取 Windows 平台相关的设备实例路径&#xff0c;其形如&#xff1a; \\?\usb#vid_04ca&pid_7070#5&20d34a76&0&6#{a5dcbf10-6530-11d2-901f-00c04fb951ed} 只是提供了…

AIGC大模型-初探

大语⾔模型技术链 1. ⾃然语⾔处理 2. 神经⽹络 3. ⾃注意⼒机制 4. Transformer 架构 5. 具体模型 - GPT6. 预训练&#xff0c;微调 7. ⼤模型应⽤ - LangChain 大语⾔模型有什么用&#xff1f; 利⽤⼤语⾔模型帮助我们理解⼈类的命令&#xff0c;从⽽处理⽂本分析…