统计rgb与yuv文件中各分量的熵

  • 要求
  • 提示
  • 代码
  • 结果
  • 分析

要求

对群里发的down.rgb和down.yuv分析三个通道的概率分布,并计算各自的熵。

提示

两个文件的分辨率均为256*256,yuv为4:2:0采样空间,存储格式为:rgb文件按每个像素BGR分量依次存放;YUV格式按照全部像素的Y数据块、U数据块和V数据块依次存放。

代码

#include<iostream>
#include<fstream>
using namespace std;
#define height 256
#define width 256
#define size 65536
void H_RGB(unsigned char* buffer)
{FILE* fp;float level_r[256] = { 0 };float level_g[256] = { 0 };float level_b[256] = { 0 };float Hr = 0, Hg = 0, Hb = 0;fopen_s(&fp, "C:\\Users\\tonym\\Desktop\\down.rgb", "rb");if (fp == 0)return;fread(buffer, size * 3, 1, fp);for (int i = 0; i < size * 3; i){level_b[buffer[i++]] ++;level_g[buffer[i++]] ++;level_r[buffer[i++]] ++;}for (int i = 0; i < 256; i++){if (level_b[i] / 65536 != 0)Hb = Hb - (level_b[i] / 65536) * (log(level_b[i] / 65536) / (log(2)) );if (level_g[i] / 65536 != 0)Hg = Hg - (level_g[i] / 65536) * (log(level_g[i] / 65536) / (log(2)) );if (level_r[i] / 65536 != 0)Hr = Hr - (level_r[i] / 65536) * (log(level_r[i] / 65536) / (log(2)) );}printf("Hr=%f\nHg=%f\nHb=%f\n", Hr, Hg, Hb);
}
float H_YUV(unsigned char* buffer,int len)
{float level[256] = { 0 };float H=0;for (int i = 0; i < len; i){level[buffer[i++]] ++;}for (int i = 0; i < 256; i++){if (level[i] / len != 0)H = H - (level[i] / len) * (log(level[i] / len) / (log(2)));}return H;
}
int main()
{int level_RGB[256] = { 0 };float sum_RGB[256];unsigned char* RGB_buffer;unsigned char* YUV_buffer1, * YUV_buffer2, * YUV_buffer3;RGB_buffer = new unsigned char[size * 3];YUV_buffer1 = new unsigned char[size];YUV_buffer2 = new unsigned char[size/4];YUV_buffer3 = new unsigned char[size/4];FILE* fp_yuv;fopen_s(&fp_yuv, "C:\\Users\\tonym\\Desktop\\down.yuv", "rb");if (fp_yuv == 0)return 0;fread(YUV_buffer1, 65536, 1, fp_yuv);fread(YUV_buffer2, 16384, 1, fp_yuv);fread(YUV_buffer3, 16384, 1, fp_yuv);H_RGB(RGB_buffer);printf("Hy=%f\n", H_YUV(YUV_buffer1, 65536));printf("Hu=%f\n", H_YUV(YUV_buffer2, 16384));printf("Hv=%f\n", H_YUV(YUV_buffer3, 16384));return 0;
}

结果

分析

yuv文件中各分量的熵小于rgb中各分量的熵,说明rgb文件虽然体积大于4:2:0采样格式的yuv文件但所含信息量的密度更高。

统计rgb与yuv文件中各分量的熵相关推荐

  1. 统计RGB和YUV图像文件各分量的概率分布,并求出熵

    1 实验目的 给定两图片down.rgb和down.yuv,分辨率为256*256,色度采样格式4:2:0,统计RGB和YUV图像文件各分类的概率分布,并求出熵 2 实验思路 本实验先使用C++,根据 ...

  2. [数据压缩作业1]利用Audacity分析浊音、清音、爆破音|RGB文件三通道分量的熵计算

    一. 利用Audacity分析浊音.清音.爆破音 1. 音频分析工具 本次实验使用软件Audacity 2. 分析时域波形和频谱 (1)浊音 以a为例 时域波形 频谱 结论:浊音时域具有周期性.在频域 ...

  3. 批量统计多个PPTX文件中幻灯片总数量

    代码功能:统计指定文件夹及其子文件夹中所有PPTX文件中幻灯片总数量. 要求:安装扩展库python-pptx. 参考代码: 运行结果: ---------董付国老师Python系列教材------- ...

  4. 如何统计多个Excel文件中的信息,统计多个工作簿中的数据,统计多个表格中相同的条,统计多个表格的和等等

    做为信息收集人员,可能经常需要统计多个Excel文件收集来的信息,对多个Excel.对多个工作簿.对多个表格进行统计,统计的维度包含按文件名.按表名进行求和.求排名.求平均值.条件统计.条件求和.文字 ...

  5. matlab将yuv文件的luma分量矩阵转换为图像显示

    问题描述: 我将视频文件中的luma分量提取到txt文本中后,在matlab中存到了数值矩阵中,但当用imshow函数进行显示时居然是白色.其原因如下:(转载于别人的博客:http://blog.si ...

  6. python 统计多个json文件中某个标签的数量

    1.json文件数据 json文件数据长这样: 然后我们有多个json文件: 目标: 我们现在需要统计每个json文件所有label标签后的值的数量. 2.代码 import json from os ...

  7. Python统计多个Powerpoint文件中幻灯片总数量

    晚上吃饭时突然想知道自己做了多少页<Python程序设计>系列教材的配套PPT,于是就有了下面的代码,这套PPT综合了<Python程序设计基础>(ISBN:978730241 ...

  8. c语言编写程序统计某给定ascii文件中个字母的出现频率,2016年浙江理工大学理学院C语言程序设计考研复试题库...

    一.选择题 1. 对于一个正常运行的C 程序,以下叙述中正确的是( ). A. 程序的执行总是从程序的第一个函数开始,在main 函数结束 B. 程序的执行总是从main 函数开始 C. 程序的执行总 ...

  9. awk 统计数据在文件中的出现次数

    突然发现awk原来可以统计同一数据在要处理的文件中所出现的次数.原来的时候为了分析数据还自己写程序,哎,无语,当时还以为自己多强,手工分析不过来的东西写程序处理.现在想来实在是年少轻狂.解决问题嘛,不 ...

最新文章

  1. [错误]xstring(525) : warning C4530:
  2. 卷积神经网络的复杂度分析
  3. 嵌入式系统学习-面试要点总结
  4. 40+场面试,100%通过率,我想分享的 14 条经验
  5. Vs 正则表达式 查找替换 微软权威参考
  6. 【DB2】db2命令Export与Import
  7. Apache Flink 漫谈系列 - JOIN 算子
  8. Python-基于flask的接口框架
  9. 【技术综述】计算机审美,学的怎么样了?
  10. 大写牛逼,用 Python 登录主流 24 个网站
  11. 文本域字数限制统计(不区分中英文 符号)
  12. python图像处理opencv_使用Python+OpenCV进行图像处理(二)| 视觉入门
  13. React开发(150):判断方法有避免报错
  14. apache+php+mysql+phpadmin 服务环境搭建
  15. 第一部分:MongoDB备忘录
  16. 详解MySQL事务隔离
  17. Python datetime 格式化字符串:strftime()
  18. MSCRM4.0商机移除价目表引起的问题
  19. (六十五)for循环
  20. Java阶段三:基础项目—家庭记录收支程序

热门文章

  1. 小白的CMMI3体验
  2. 在虚拟机上为红帽7Linux设置中文输入法
  3. 在项目中谨慎为系统类添加分类!!!!!
  4. 如何制作Windows镜像
  5. 邓迎春绘画201702作品08
  6. (转)java并发之Executor
  7. ----------------学习进度表---------------------------------
  8. 核心动画05-CAAnimationGroup
  9. SoC嵌入式软件架构设计之二:虚拟内存管理原理、MMU硬件设计及代码分块管理...
  10. 风影ASP.NET基础教学 3 web服务器控件(二)