读入一个RGB文件,输出各分量概率分布示意图和熵
程序员文章站
2022-07-14 22:16:30
...
代码实现
#include<stdio.h>
#include<iostream>
#include<math.h>
using namespace std;
const int width = 256;
const int height = 256;
int num_b[width * height] = { 0 };
int num_g[width * height] = { 0 };
int num_r[width * height] = { 0 };
//由于局部变量的申请空间存放于栈中,windows里默认栈内存是1M,当申请空间大于1M时就会出现溢出错误。所以放到全局变量中
unsigned char A[width * height * 3];
unsigned char R[width * height];
unsigned char G[width * height];
unsigned char B[width * height];
double En_R = 0;
double En_G = 0;
double En_B = 0;
int main()
{
FILE* Image;
fopen_s(&Image, "down.rgb", "rb");
FILE* RED;
fopen_s(&RED, "R_sat.txt", "w");
FILE* GREEN;
fopen_s(&GREEN, "G_sat.txt", "w");
FILE* BLUE;
fopen_s(&BLUE, "B_sat.txt", "w");//打开所需文件
fread(A, sizeof(unsigned char), width * height * 3, Image);//存储down.rgb中的全部数据到A中
for (int i = 0; i < width * height; i++)
{
B[i] = A[i * 3];
G[i] = A[i * 3 + 1];
R[i] = A[i * 3 + 2];
}//将rgb数据分别保存在3个数组中
for (int i = 0; i < width * height; i++)
{
num_b[B[i]]++;
num_g[G[i]]++;
num_r[R[i]]++;
}//计算每个数出现的次数
for (int i = 0; i < width * height; i++)
{
if (num_b[i] != 0)
{
En_B += (double)num_b[i] / width / height / log(2) * (log(width * height)-log(num_b[i]) );
}
if (num_g[i] != 0)
{
En_G += (double)num_g[i] / width / height / log(2) * (log(width * height) - log(num_g[i]));
}
if (num_r[i] != 0)
{
En_R += (double)num_r[i] / width / height / log(2) * (log(width * height) - log(num_r[i]));
}
}//求信息熵
cout << "H(Red) = " << En_R << endl;
cout << "H(Green) = " << En_G << endl;
cout << "H(Blue) = " << En_B << endl;
fprintf(BLUE, "symbol\tfreq\n");
fprintf(GREEN, "symbol\tfreq\n");
fprintf(RED, "symbol\tfreq\n");
for (int i = 0; i < 256; i++)
{
fprintf(BLUE, "%d\t%f\n", i, (double)num_b[i]/(width * height));
fprintf(GREEN, "%d\t%f\n", i, (double)num_g[i] / (width * height));
fprintf(RED, "%d\t%f\n", i, (double)num_r[i] / (width * height));
}
}
运行结果
上一篇: Base64编码的原理与常用实现
推荐阅读
-
假期作业三:读入一个RGB文件,输出该数据文件中RGB三分量的概率分布示意图和熵。
-
作业3:读入一个24bitRGB文件(以down.rgb为例,其分辨率为256*256),输出该数据文件中R、G、B三个分量(各8bit表示)的概率分布示意图和熵。
-
读入RGB文件得到各分量的概率分布及熵
-
读入一个RGB文件,输出各分量概率分布示意图和熵
-
读入 RGB 文件并输出三个分量的概率分布示意图和熵
-
作业3:读入一个24bitRGB文件,输出该数据文件中R、G、B三个分量的概率分布示意图和熵。
-
2020.3.9读入一个24bitRGB文件(以down.rgb为例,其分辨率为256*256),输出该数据文件中R、G、B三个分量(各8bit表示)的概率分布示意图(类似下图)和熵。
-
数据压缩任务三:读入 RGB 文件并输出三个分量的概率分布示意图和熵
-
作业3:读入一个24bitRGB文件(以down.rgb为例,其分辨率为256*256),输出该数据文件中R、G、B三个分量(各8bit表示)的概率分布示意图(类似下图)和熵。
-
数据压缩_任务三_读入 .rgb文件 输出RGB三个分量的概率分布示意图和熵