关于对RGB以及YUV文件三色通道概率的计算以及对其熵的计算

一.实验目的

通过对所给rgb文件以及yuv文件三个通道进行分析,分别计算出各自的概率以及对应的熵,由此来判断压缩时选择什么文件更利于文件的压缩。

二.实验思路

1.rgb文件所给的内容是按照BGRBGRBRG…的方式排列,首先读取文件将文件完全展开变为一个256×256×3一维数组,由于每一位都是由8bit组成,即RGB每种颜色都有256种色号,将单独每一路通道的颜色取出,即变成3个256×256的一维数组,通过对数组的遍历对每一种色号进行统计计算出每种色号的概率,从而得到其熵值。(由于程序中不方便对公式直接进行输入,可以使用对数恒等式进行计算)。
计算公式
H(x) = E[I(xi)] = E[ log(2,1/P(xi)) ] = -∑P(xi)log(2,P(xi)) (i=1,2,…n)
其中,x表示随机变量,与之相对应的是所有可能输出的集合,定义为符号集,随机变量的输出用x表示。P(x)表示输出概率函数。变量的不确定性越大,熵也就越大,把它搞清楚所需要的信息量也就越大.
在这里插入图片描述
2.yuv文件是包含亮度信号Y以及色差信号U.V的文件,文件采用4:2:0格式,即每四个Y分量中会带有一个U分量和一个V分量,即总体大小变为256×256×1.5。只需对代码中的RGB总大小进行修改,就可以得到其YUV的熵值.由于排列方式的不同,也要对yuv分量提取部分进行相应改动.在这里插入图片描述

三.实验代码

RGB文件的计算

#include<stdio.h>
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
   
    int height = 256;
    int width = 256;
    int size, i, j;
    size = height * width;
    FILE* fp1;
    unsigned char r[65535] = {
    0 };
    unsigned char g[65535] = {
    0 };
    unsigned char b[65535] = {
    0 };//R、G、B分量
    double pr[255] = {
    0 };
    double pg[255] = {
    0 };
    double pb[255] = {
    0 };//8bit有256种色号
    double hr = 0, hg = 0, hb = 0; //RGB的熵
    fopen_s(&fp1, "d://down.rgb", "rb");
    unsigned char a[196608];//三通道共有256*256*3
    fread(a, sizeof(unsigned char), 196608, fp1);//读取文件
    for (i = 0, j 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值