一、实验要求
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分量概率分布均匀。