【数据压缩】第一次作业——浊音频谱分析以及图片求取RGB熵

目录

浊音频谱分析

图片求取RGB熵


  • 浊音频谱分析

语音学中,将发音时声带振动的音称为浊音,声带不振动的音称为清音。发浊音时,气流通过声门时使声带发生振动,产生准周期激励脉冲串,这个脉冲串的周期就称为基因周期,其倒数称为基因频率。这里使用Audacity软件来对浊音进行时域和频谱分析,选择了“a”、“o”、“e”三个音,分析结果如下:

“a”的时域波形:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6Zi_5L-u5a6d6LSd,size_20,color_FFFFFF,t_70,g_se,x_16

频谱分析:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6Zi_5L-u5a6d6LSd,size_20,color_FFFFFF,t_70,g_se,x_16

 “o”的时域波形:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6Zi_5L-u5a6d6LSd,size_20,color_FFFFFF,t_70,g_se,x_16

频谱分析: 

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6Zi_5L-u5a6d6LSd,size_20,color_FFFFFF,t_70,g_se,x_16

 “e”的时域波形:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6Zi_5L-u5a6d6LSd,size_20,color_FFFFFF,t_70,g_se,x_16

频谱分析:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6Zi_5L-u5a6d6LSd,size_20,color_FFFFFF,t_70,g_se,x_16

由图片可以看出,浊音在时域都有明显周期性,频谱分析中,浊音能量在低频处比较集中且幅度大。  

  • 图片求取RGB熵

一幅RGB图像有三个通道,即红、绿、蓝,图像的每一个像素点都由这三个值来表示,通过编程可以实现分别计算一幅RGB图像的R值、G值和B值的熵。这里分析的图片文件为“test.rgb”,大小为256*256,里面的三个通道的值的排列顺序为:BGRBGRB……下面给出代码:

#include<math.h>  
#include<iostream>  
using namespace std;  
int main()  
{  
    double count[256] = { };                                    //计数,计算概率  
    double en[3] = { };                                         //对应存储B G R的熵  
    double iq;  
    int rgb;  
    int size = 256 * 256, total = 256 * 256 * 3;  
    unsigned char* RGB_buffer_in;  
    RGB_buffer_in = new unsigned char[total];                   //存储图片的RGB值  
    FILE* fp;  
    fopen_s(&fp,"D:/AUniversity/数据压缩/test.rgb", "rb");      //读取图片文件  
    if (fp == NULL)  
    {  
        printf("File not open!/n");  
    }  
    fread(RGB_buffer_in, sizeof(unsigned char), total, fp);     //将RGB值写入RGB_buffer_in  
    for (rgb = 0; rgb < 3; rgb++)                               //依次提取图像中的所有B值,G值,R值  
    {  
        for (int i = rgb; i < total; i+=3)  
        {  
            int m = RGB_buffer_in[i];                                 
            count[m]++;                                         //得到不同灰度值的对应数量  
        }  
        for (int j = 0; j < 256; j++)  
        {  
            count[j] = count[j] / size;  
            cout << count[j] << endl;                           //输出概率便于后续画图  
            if (count[j] != 0)  
            {  
                iq = log(count[j]) / log(2.0);  
                en[rgb] = en[rgb] - count[j] * iq;              //计算出熵  
            }  
        }  
        cout << endl;  
    }  
    fclose(fp);  
    printf("B的熵为:%f\n", en[0]);  
    printf("G的熵为:%f\n", en[1]);  
    printf("R的熵为:%f\n", en[2]);  
    return 0;  
}  

最后的计算结果为:

B的熵为:6.856861

G的熵为:7.178557

R的熵为:7.229651

b0b17f6c946345ddb25fed56437c6d27.png

同时还输出了图像像素点R,G,B值的概率,使用matlab编程得到概率分布图像:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6Zi_5L-u5a6d6LSd,size_20,color_FFFFFF,t_70,g_se,x_16

代码如下:

clear;clc  
load BGR.mat  
x=0:1:255;  
semilogy(x,BGR(:,1),'b',x,BGR(:,2),'g',x,BGR(:,3),'r','LineWidth',2)  
axis([0 255 0 0.1])  
grid on  
legend('B','G','R')  
xlabel('像素值')  
ylabel('pmf')  

这里“BGR.mat”按列顺序存放着B,G,R的概率值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值