统计rgb与yuv文件中各分量的熵
统计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文件中各分量的熵相关推荐
- 统计RGB和YUV图像文件各分量的概率分布,并求出熵
1 实验目的 给定两图片down.rgb和down.yuv,分辨率为256*256,色度采样格式4:2:0,统计RGB和YUV图像文件各分类的概率分布,并求出熵 2 实验思路 本实验先使用C++,根据 ...
- [数据压缩作业1]利用Audacity分析浊音、清音、爆破音|RGB文件三通道分量的熵计算
一. 利用Audacity分析浊音.清音.爆破音 1. 音频分析工具 本次实验使用软件Audacity 2. 分析时域波形和频谱 (1)浊音 以a为例 时域波形 频谱 结论:浊音时域具有周期性.在频域 ...
- 批量统计多个PPTX文件中幻灯片总数量
代码功能:统计指定文件夹及其子文件夹中所有PPTX文件中幻灯片总数量. 要求:安装扩展库python-pptx. 参考代码: 运行结果: ---------董付国老师Python系列教材------- ...
- 如何统计多个Excel文件中的信息,统计多个工作簿中的数据,统计多个表格中相同的条,统计多个表格的和等等
做为信息收集人员,可能经常需要统计多个Excel文件收集来的信息,对多个Excel.对多个工作簿.对多个表格进行统计,统计的维度包含按文件名.按表名进行求和.求排名.求平均值.条件统计.条件求和.文字 ...
- matlab将yuv文件的luma分量矩阵转换为图像显示
问题描述: 我将视频文件中的luma分量提取到txt文本中后,在matlab中存到了数值矩阵中,但当用imshow函数进行显示时居然是白色.其原因如下:(转载于别人的博客:http://blog.si ...
- python 统计多个json文件中某个标签的数量
1.json文件数据 json文件数据长这样: 然后我们有多个json文件: 目标: 我们现在需要统计每个json文件所有label标签后的值的数量. 2.代码 import json from os ...
- Python统计多个Powerpoint文件中幻灯片总数量
晚上吃饭时突然想知道自己做了多少页<Python程序设计>系列教材的配套PPT,于是就有了下面的代码,这套PPT综合了<Python程序设计基础>(ISBN:978730241 ...
- c语言编写程序统计某给定ascii文件中个字母的出现频率,2016年浙江理工大学理学院C语言程序设计考研复试题库...
一.选择题 1. 对于一个正常运行的C 程序,以下叙述中正确的是( ). A. 程序的执行总是从程序的第一个函数开始,在main 函数结束 B. 程序的执行总是从main 函数开始 C. 程序的执行总 ...
- awk 统计数据在文件中的出现次数
突然发现awk原来可以统计同一数据在要处理的文件中所出现的次数.原来的时候为了分析数据还自己写程序,哎,无语,当时还以为自己多强,手工分析不过来的东西写程序处理.现在想来实在是年少轻狂.解决问题嘛,不 ...
最新文章
- [错误]xstring(525) : warning C4530:
- 卷积神经网络的复杂度分析
- 嵌入式系统学习-面试要点总结
- 40+场面试,100%通过率,我想分享的 14 条经验
- Vs 正则表达式 查找替换 微软权威参考
- 【DB2】db2命令Export与Import
- Apache Flink 漫谈系列 - JOIN 算子
- Python-基于flask的接口框架
- 【技术综述】计算机审美,学的怎么样了?
- 大写牛逼,用 Python 登录主流 24 个网站
- 文本域字数限制统计(不区分中英文 符号)
- python图像处理opencv_使用Python+OpenCV进行图像处理(二)| 视觉入门
- React开发(150):判断方法有避免报错
- apache+php+mysql+phpadmin 服务环境搭建
- 第一部分:MongoDB备忘录
- 详解MySQL事务隔离
- Python datetime 格式化字符串:strftime()
- MSCRM4.0商机移除价目表引起的问题
- (六十五)for循环
- Java阶段三:基础项目—家庭记录收支程序