一、实验目的
对down.rgb和down.yuv分析三个通道的概率分布,并计算各自的熵。
二、实验原理
两个文件的分辨率均为256*256,yuv为4:2:0采样空间,存储格式为:rgb文件按每个像素BGR分量依次存放;YUV格式按照全部像素的Y数据块、U数据块和V数据块依次存放。
三、实验步骤及结果
1. 读入 RGB 文件并输出三个分量的概率分布示意图和熵
- 代码如下
pmf.hpp
#ifndef pmf_hpp
#define pmf_hpp
#include <stdio.h>
#endif /* pmf_hpp */
#pragma once
void pmf(unsigned char* buffer,int size, FILE* outFile);
main.cpp
#include<stdio.h>
#include<iostream>
#include<math.h>
#include<fstream>
#include "pmf.hpp"
using namespace std;
#define size 65536
int main()
{
FILE *image=fopen("/Users/J/Desktop/down.rgb", "r");
FILE *out_red=fopen("/Users/J/Desktop/red.txt", "wb");
FILE *out_green=fopen("/Users/J/Desktop/green.txt", "wb");
FILE *out_blue=fopen("/Users/J/Desktop/blue.txt", "wb");
unsigned char R_buffer[size] = {
0 },G_buffer[size] = {
0 }, B_buffer[size] = {
0 };
unsigned char sum[256*256*3];
fread(sum, 1, 256*256*3, image);
for (int i = 0, j = 0; i < 256*256*3; i = i + 3, j++)
{
B_buffer[j] = *(sum + i);
G_buffer[j] = *(sum + i + 1);
R_buffer[j] = *(sum + i + 2);
}
pmf(R_buffer, size, out_red);
pmf(G_buffer, size, out_green);
pmf(B_buffer, size,<