数据压缩课程第一次作业

一.元音波形

1.幅频特性

2.时域波形

 二、实现RGB文件三通道分量的信息熵计算。

代码如下:

#define _CRT_SECURE_NO_WARNINGS
#define ImageSize 256*256

#include <stdio.h>
#include <math.h>
#include <malloc.h>
float H(unsigned char* buffer)
{
    int Temp;
    double Num[256] = { 0 };
    for (int i = 0; i < ImageSize; i++)
    {
        Temp = *(buffer + i);
        Num[Temp]++;
    }
    double P[256] = { 0 };
    for (int i = 0; i < 256; i++)
    {
        P[i] = Num[i] / (256 * 256);
    }

    float h = 0;
    for (int i = 0; i < 256; i++)
    {
        if (P[i] >= 1e-15)
        {
            h = h + P[i] * log(1 / P[i]) / log(2.0);
        }
    }

    return h;
}
int main()
{
    unsigned char* RGBBufferIn;

    unsigned char* bBufferIn;
    unsigned char* gBufferIn;
    unsigned char* rBufferIn;

    RGBBufferIn = (unsigned char*)malloc(3 * ImageSize);
    bBufferIn = (unsigned char*)malloc(ImageSize);
    gBufferIn = (unsigned char*)malloc(ImageSize);
    rBufferIn = (unsigned char*)malloc(ImageSize);

    //读入色度分量信号
    FILE* fp = fopen("C://Users//14796//Desktop//test.rgb", "rb");
    fread(RGBBufferIn, sizeof(unsigned char), 3 * ImageSize, fp);
    for (int i = 0; i < 256 * 256; i++)
    {
        *(bBufferIn + i) = *(RGBBufferIn + 3 * i);
    }

    for (int i = 0; i < 256 * 256; i++)
    {
        *(gBufferIn + i) = *(RGBBufferIn + 1 + 3 * i);
    }

    for (int i = 0; i < 256 * 256; i++)
    {
        *(rBufferIn + i) = *(RGBBufferIn + 2 + 3 * i);
    }

    float HofB = H(bBufferIn);
    float HofG = H(gBufferIn);
    float HofR = H(rBufferIn);
    printf("蓝色色分量的信息熵是%f\n", HofB);
    printf("绿色分量的信息熵是%f\n", HofG);
    printf("红色分量的信息熵是%f\n", HofR);
}

输出结果:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值