“数据压缩实验之彩色空间转换”实验报告_201810413045_陈诚

1.实验名称

彩色空间转换

2.实验软件

Visual Studio 2019、YUVviewerPlus

3.实验目的

1.学会从计算和程序的角度分析问题,通过完成本实验,理解计算思维,即从问题出发,通过逐步分析和分解,把原问题转化为可用程序方式解决的问题。在此过程中设计出一个解决方 案。
2.进一步理解彩色空间的概念并掌握不同彩色空间转换的基本方程。
3.通过逐步设计程序,掌握编程细节:如查找表的设计,内存分配,对 U 和 V 信号进行下采样,文件读写过程等。掌握程序调试的基本方法。

4.实验原理(思路)

4.1阅读并理解李冬梅老师给的将RGB转化为YUV代码

由第一次作业可知,RGB文件的存储方式为:
在这里插入图片描述
YUV文件(4:2:0)的存储格式为 :
在这里插入图片描述
在李冬梅老师给的将RGB转化为YUV代码 中,该程序先利用转化公式:

在这里插入图片描述

将R,G,B三通道的每个点的值运算后存到对应的Y,U,V点中,此时ubuffer,vbuffer大小均为256256,之后对U,V进行下采样,即将每个点与其右、下、右下的点求和并取平均值赋给左上点的位置,这样ubuffer,vbuffer大小就会变为为256256/4,最后把ybuffer,ubuffer,vbuffer写入到YUV文件中。

4.2 将YUV转化为RGB

先建立三个存储空间:ybuffer、ubuffer(大小为256256/4)、vBuffer(大小为256256/4),将Y,U,V分量分别存入,接着对U、V分量进行向上采样,即与向上采样相反,将U,V的每个点的值赋予其右、下、右下的点。同时将得到的结果存到对应的up_ubuffer(大小为256256)、up_vbuffer(大小为256256)中之后利用公式:

在这里插入图片描述

得到rbuffer,gbuffer,bbuffer,最后把三者写入到YRGB文件中。

5.实验代码(将RGB转化为YUV的代码老师已给,此处不再列出,将YUV转化为RGB为自己创作,附完整代码)

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include<string.h>
#define u_c unsigned char

static float YUVRGB113983[256], YUVRGB039465[256];
static float YUVRGB058060[256], YUVRGB203211[256];
void YUV2RGB(int x_dim, int y_dim, u_c* ybuffer, u_c* ubuffer, u_c* vbuffer, u_c* r_out, u_c* g_out, u_c* b_out);
void InitLookupTable();

int main(int agrc, char** argv)
{
   
	char* rgbFileName = NULL;
	char* yuvFileName = NULL;
	FILE* rgbFile = NULL;
	FILE* yuvFile = NULL;

	yuvFileName = argv[1];
	rgbFileName = argv[2];
	int width = atoi(argv[3]);
	int height = atoi(argv[4]);


	yuvFile = fopen(yuvFileName, "rb");
	rgbFile = fopen(rgbFileName, "wb");
	u_c* rbuffer = (u_c*)malloc(width * height);
	u_c* gbuffer = (u_c*)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值