1、浊音时域波形和频谱分析||计算RGB文件三通道分量的熵

一、 浊音时域波形和频谱分析

本实验采用软件audacity录制浊音a、o、e、u,绘制时域波形和频谱并进行分析。

①a:

②e:

③o:

④u:

由上图可知:

浊音时域波形具有周期性,频谱中有多个明显的共振峰。

二、计算RGB文件三通道分量的熵

该测试文件分辨率为256*256,数据格式为每个像素占用3字节,BGRBGR...保存。

用C++实现编程,代码如下:

#include <iostream>
using namespace std;

int main()
{
	int image_size = 256 * 256;
	double Pr[256] = { 0 }, Pg[256] = { 0 }, Pb[256] = { 0 };//定义R、G、B的概率分量
	double Hr = 0, Hg = 0, Hb = 0;//定义R、G、B的熵


	unsigned char* R, * G, * B;//定义R、G、B
	unsigned char* RGB_in;//定义图像
	R = (unsigned char*)malloc(image_size);
	G = (unsigned char*)malloc(image_size);
	B = (unsigned char*)malloc(image_size);
	RGB_in = (unsigned char*)malloc(image_size*3);


	FILE* fp;
	fopen_s(&fp, "C://Users//86152//Desktop//大三下//数据压缩与应用//RGB熵//test.rgb", "rb");
	fread(RGB_in, sizeof(unsigned char), image_size*3, fp);
	fclose(fp);


	//把R、G、B三通道的数据分别取出
	for (int i = 0; i < 256 * 256; i++)
	{
		B[i] = RGB_in[i * 3];
		G[i] = RGB_in[i * 3 + 1];
		R[i] = RGB_in[i * 3 + 2];
	}

	
	for (int i = 0; i < image_size; i++)
	{
		Pb[B[i]]++;
		Pg[G[i]]++;
		Pr[R[i]]++;
	}
	

	//分别计算R、G、B三通道的颜色强度级的频率
	for (int i = 0; i < 256; i++)
	{
		Pr[i] = Pr[i] / image_size;
		Pg[i] = Pg[i] / image_size;
		Pb[i] = Pb[i] / image_size;
	}


	//计算R、G、B的熵
	for (int i = 0; i < 256; i++)
	{
		if (Pb[i] != 0) { Hb += -Pb[i] * log(Pb[i]) / log(2.0); }
		if (Pr[i] != 0) { Hr += -Pr[i] * log(Pr[i]) / log(2.0); }
		if (Pg[i] != 0) { Hg += -Pg[i] * log(Pg[i]) / log(2.0); }
	}
	cout << "Hr=" << Hr << endl;
	cout << "Hg=" << Hg << endl;
	cout << "Hb=" << Hb << endl;

}

运行结果如图所示:

即:R通道分量的熵为7.22955,G通道分量的熵为7.17846;G通道分量的熵为6.85686。

猜你喜欢

转载自blog.csdn.net/m0_51333023/article/details/123458170