分析rgb文件和yuv文件概率及各自的熵

编程实现对rgb和yuv的概率及信息熵的分析

*已知文件down.rgb和down.yuv两个文件

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

注:
数字电视系统基于三基色原理工作,图像源把彩色场景或图像转换为**红(R)、绿(G)和蓝(B)**三个模拟基色视频信号,将这三个基色信号数字化后,经种种处理,传送给终端。

**YUV(亦称YCrCb)**是被欧洲电视系统所采用的一种颜色编码方法(属于PAL)。其中“Y”表示明亮度(Luminance或Luma),也就是灰阶值;而“U”和“V”表示的则是色度(Chrominance或Chroma)。
与RGB视频信号传输相比,它最大的优点在于只需占用极少的带宽(RGB要求三个独立的视频信号同时传输)。
在水平和垂直方向上,两个色差信号取样点数,都减少到亮度信号取样点数的一半,即4个亮度信号取样点,对应两个色差信号的各一个取样点,称为4:2:0格式

一、实验目的

已知文件down.rgb和down.yuv两个文件,通过编程分析二者的三个通道的概率分布,并计算各自的熵。

二、实验流程

  1. 打开、创建所需文件

  2. 定义文件读取、存储数组

  3. 计算三通道数值的出现概率

  4. 定义并求解三通道信源熵
    在这里插入图片描述

  5. 将数据导入matlab,绘制概率分布图

三、实验代码

1.RGB代码

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <fstream>
#include <cmath>

using namespace std;

int main()
{
   

	int w = 256;
	int h = 256;
	int fileLength = w * h * 3;

	//打开、创建所需文件
	FILE* file = fopen("down.rgb", "rb");

	//动态分配地址
	unsigned char* dataArray = (unsigned char*)malloc(sizeof(unsigned char) * fileLength);
	unsigned char* r = (unsigned char*)malloc(w * h * sizeof(unsigned char));
	unsigned char* g = (unsigned char*)malloc(w * h * sizeof(unsigned char));
	unsigned char* b = (unsigned char*)malloc(w * h * sizeof(unsigned char));

	//读取文件
	fread(dataArray, sizeof(unsigned char), fileLength, file);

	//定义不同颜色通道计数
	int k = 0;
	int m = 0;  //b
	int n = 0;  //g
	int p = 0;  //r

	//定义参照数组跟三通道计数数组
	unsigned char item[256];
	double countR[256];
	double countG[256];
	double countB[256];
	for (int i = 0; i < 256; i++)
	{
   
		item[i] = (unsigned char)i;
		countR[i] 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值