分别对RGB、YUV文件分析三个通道的概率分布,并计算各自的熵

一、作业要求

对down.rgb和down.yuv分析三个通道的概率分布,并计算各自的熵。(编程实现)

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

本文采用 C++ 编写

二、思路分析

1.RGB

rgb 文件中每个像素都按照 BGR 依次存放,则为BGRBGRBGRBGR…循环,由图像分辨率256 * 256可得,此 rgb 文件共有 256 * 256 * 3 = 196608个像素。

2.YUV

yuv 文件是 4:2:0 的采样空间,即每四个Y分量共用一个 UV 分量。
是基于平面模式进行存储。即先存储所有的 Y 分量,然后存储所有的 U 分量,最后 V 分量。
在这里插入图片描述
图片来源于网络

  • y分量所占为256 * 256 = 65536

  • u分量:
    首:256 * 256 = 65536
    尾:256 * 256 *(1+1/4)= 81920

  • v分量:
    首:256 * 256 *(1+1/4)= 81920
    尾:256 * 256 *(1+1/2)= 98304

三、代码

1.rgb
#include<iostream>
#include<stdio.h>
#include<math.h>
using namespace std;

//定义图像的分辨率
//256*256=65536
int height=256;
int wide=256;

int main()
{
   
	//定义R、G、B分量
	unsigned char R[65536]={
   0};
	unsigned char G[65536]={
   0};
	unsigned char B[65536]={
   0};

	//定义数量
	double R_num[256]={
   0};
	double G_num[256]={
   0};
	double B_num[256]={
   0};

	//定义频率
	double R_fre[256]={
   0};
	double G_fre[256]={
   0};
	double B_fre[256]={
   0};
	
	//定义RGB分量的熵
	double R_shang=0;
	double G_shang=0;
	double B_shang=0;
	
	//定义文件指针
	//打开所给的RGB图像文件
	FILE* image;
	fopen_s(&image,"C:\\Users\\Zhao Zhuo\\Desktop\\down.rgb", "rb");
	
	//定义文件RGB指针
	FILE* Red;
	FILE* Green;
	FILE* Blue;
	//定义最终存储数据的txt文档
	fopen_s(&Red,"C:\\Users\\Zhao Zhuo\\Desktop\\Red.txt", "w");
	fopen_s(&Green,"C:\\Users\\Zhao Zhuo\\Desktop\\Green.txt", "w");
	fopen_s(&Blue,"C:\\Users\\Zhao Zhuo\\Desktop\\Blue.txt", "w");
   	
	//256*256*3=196608
	unsigned char buffer[196608];
	fread(buffer,sizeof(unsigned char),196608,image);

	for(int i=0,j=0;</
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值