将频谱图另存为mat文件

时间:2019-09-19 14:37:20

标签: matlab spectrogram mat-file

我在MATLAB中使用了import { Component } from '@angular/core'; import { DataService } from '../store.service'; @Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.css'] }) export class AppComponent { public itemsList: Item[]; constructor(private logger: DataService) {} GetItems() { this.logger.GetAllItems().subscribe( (data: Item[]) => this.itemsList = data ) } } export interface Item { Id: number; Name: string; Surname: string; } 函数来生成频谱图并将其直接保存为mat文件。然后,我使用相同的wav文件和相同的方式来生成另一个频谱图。但是我先将其另存为jpg文件,然后将jpg文件另存为mat文件。我对为什么两个mat文件中的矩阵大小不同感到困惑,第一个是spectrogram的两倍,第二个是147*257 uint8。

256*256*3

有人知道为什么会这样吗?如何将频谱图正确存储为Mat文件?

1 个答案:

答案 0 :(得分:1)

f.cdata矩阵较大,因为它包含图形的边距

根据getframe documentation

  

getframe
  将轴或图形捕获为影片帧

     F = getframe(fig)捕获由图5标识的图形。如果要捕获图形窗口的整个内部,包括轴标题,标签和刻度线,请指定一个图形。捕获的电影帧不包含图形菜单和工具栏。

示例:

I = imread('peppers.png'); %Matrix size of I: 384 x 512 x 3
I = im2double(I); %Convert I from uint8 to double (result pixel range is [0, 1]).
figure;
imshow(I);
f = getframe(gcf);
mat = getimage(gcf); %Matrix size of mat: 384 x 512 x 3 and class(mat) is double.
fprintf('size(mat) = %d x %d x %d, class(mat) = %s\n', size(mat), class(mat)); % 384 x 512 x 3, class is double
fprintf('size(f.cdata) = %d x %d x %d, class(f.cdata) = %s\n', size(f.cdata), class(f.cdata)); % 479 x 664 x 3 (include margins), class is uint8.
figure;
imshow(f.cdata);

imwrite(mat, 'mat.jpg'); % 384 x 512 x 3 (double)
imwrite(f.cdata, 'f_cdata.jpg'); % 479 x 664 x 3 (uint8)

mat
enter image description here

f.cdata
enter image description here

如您所见,由于图形的空白,f.cdata的大小大于mat
在您的情况下,mat频谱图图像数据类型为double,而f.cdata(“帧图像”)类型为uint8