数据压缩第一次作业(rgb/yuv文件三通道的分布概率及其熵)

该博客介绍了数据压缩实验,主要内容包括256*256分辨率RGB和YUV(4:2:0采样)文件的分量概率计算与熵的分析。实验结果显示YUV的熵小于RGB,且YUV分量的概率分布比RGB更为集中,这可以通过概率分布图像直观观察到。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、实验要求
1.文件分辨率256*256
2.yuv采样空间4:2:0
3.rgb按照像素BGR依次存放
4.YUV格式按照全部像素的Y数据块、U数据块、V数据块依次存放

二、RGB文件分量提取概率和熵的计算

int main()
{
	unsigned char R[65536] = { 0 };
	unsigned char G[65536] = { 0 };
	unsigned char B[65536] = { 0 };
	FILE* fdown;
	fdown = fopen("C:\\vs\\shuzhi\\down.rgb", "rb");
		
unsigned char pix[196608];
	fread(pix, 1, 196608, fdown);
	for (int i = 0, j = 0;i < Width * Height * 3;i = i + 3)
	{
		R[j] = pix[i + 2];
		G[j] = pix[i + 1];
		B[j] = pix[i];
		j++;
	}
	
	double fre_R[256] = { 0 };
	double fre_G[256] = { 0 };
	double fre_B[256] = { 0 };
	for (int i = 0; i < 256; i++)
	{
		for (int j = 0; j < 65536; j++)
		{
			if (int(R[j] == i))
			{
				fre_R[i]++;
			}

		}
	}
	for (int i = 0; i < 256; i++)
	{
		for (int j = 0; j < 65536; j++)
		{
			if (int(G[j] == i))
			{
				fre_G[i]++;
			}
		}
	}
	for (int i = 0; i < 256; i++)
	{
		for (int j = 0; j < 65536; j++)
		{
			if (int(B[j] == i))
			{
				fre_B[i]++;
			}
		}
	}
	for (int i = 0; i < 256; i++)
	{
		fre_R[i] = fre_R[i] / int(Height * Width);
		fre_B[i] = fre_B[i] / int(Height * Width);
		fre_G[i] = fre_G[i] / int(Height * Width);
	}

rgb的熵在这里插入图片描述

写入的文本文件rgb概率分布:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
绘图:

在这里插入图片描述

三、YUV文件分量概率及其熵
4:2:0取样格式:

I420: YYYYYYYY UU VV   		 	=>YUV420P
YV12: YYYYYYYY VV UU    		=>YUV420P
NV12: YYYYYYYY UV UV    	 	=>YUV420SP
NV21: YYYYYYYY VU VU     		=>YUV420SP

YV12 : 亮度(行×列) + U(行×列/4) + V(行×列/4)
I420 : 亮度(行×列) + V(行×列/4) + U(行×列/4)

分离YUV```

for(int i=0;i<num;i++){  
  
        fread(pic,1,w*h*3/2,fp);  
  
        fwrite(pic,1,w*h,fp1);  
   
        fwrite(pic+w*h,1,w*h/4,fp2);  
 
        fwrite(pic+w*h*5/4,1,w*h/4,fp3); 
    

计算分布及熵:
在这里插入图片描述
YUV概率(不截图了)
绘图:
在这里插入图片描述

YUV中进行查看
在这里插入图片描述原始图像
在这里插入图片描述Y分量

在这里插入图片描述U分量

在这里插入图片描述V分量

**

四、实验结果

**
由实验结果可知:YUV的熵小于RGB,这一点不仅可以从计算得出的结果中说明,更可以直观地观察二者概率分布图像:YUV分量概率分布不如RGB分量概率分布均匀。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值