实验目的:
对down.rgb和down.yuv文件分别分析RGB三个通道的概率分布,并计算各自的熵。
已知:
图片大小256*256
rgb文件存储格式BGRBGR……
yuv文件以4:2:0采样,按照全部像素的Y数据块、U数据块和V数据块依次存放。
实验思路:
1.图片大小为256256,每个像素包含BGR三个分量,一共有256256*3个值存入buffer数组中。
2.从buffer数组中分别统计B、G、R的值放入B、G、R三个数组。
3.8bit量化共有256个值,统计B、G、R的概率分布。
4.从概率分布算出熵。
5.yuv同理,注意每采集四个Y信号只分别采集一个U、V信号,且按照全部像素的Y数据块、U数据块和V数据块依次存放。
6.使用MATLAB绘制概率分布统计图
实验代码:
1、.rgb格式
#include<fstream>
#include<iostream>
#include<cmath>
using namespace std;
#define size 196608//256*256*3
#define height 256
#define width 256
int main()
{
unsigned char R[256*256]={
0},G[256*256]={
0},B[256*256]={
0};//RGB分量
double R_F[256]={
0},G_F[256]={
0},B_F[256]={
0};//RGB概率分布
double R_I=0,G_I=0,B_I=0;//RGB的熵
FILE* picture,* red,*green,*blue;
fopen_s(&picture,"d:\\down.rgb","rb");
fopen_s(&red,"d:\\red.txt","w");
fopen_s(&green,"d:\\green.txt","w");
fopen_s(&blue,"d:\\blue.txt","w");
if(picture==0)
printf("Fail to open the picture!");
else
{
unsigned char buffer[size]={
0};
fread(buffer,1,size,picture);//将picture的值写入数组buffer
//将B、G、R的值分别写入B、G、R的数组中
for(int i=0,j=0;i<size;i=i+3,j++)
{
//以BGRBGR……顺序排列
B[j]=*(buffer+i);
G[j]=*(buffer+i+1);