我在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文件?
答案 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)
如您所见,由于图形的空白,f.cdata
的大小大于mat
。
在您的情况下,mat
频谱图图像数据类型为double
,而f.cdata
(“帧图像”)类型为uint8
。