我正在努力优化显示的3D对象。我想要实现的是制作一个音频文件的三维谱图。另外,我想要黑白相间,好看。漂亮的外表意味着什么?就像这样:

,这只是样本图像-我知道光谱仪看起来不会像那个
这是用于生成面数减少的曲面的代码:
[y,fs,nbits]=wavread('audio.wav');
[s f t]= spectrogram(y(:,1),256,100,256,fs);
clear y
[X,Y]=meshgrid(t,f);
Z=log10(abs(s));
rskip = round(linspace(1,size(Z,1),80));
cskip = round(linspace(1,size(Z,2),64));
surf(X,Y,Z,'FaceColor','white','EdgeColor','none');
hold on
surf(X(rskip,:),Y(rskip,:),Z(rskip,:),'FaceColor','none','MeshStyle','row');
surf(X(:,cskip),Y(:,cskip),Z(:,cskip),'FaceColor','none','MeshStyle','column');
hold off
view(-65.5, 28);这个音频文件的主要问题和我使用减少的脸的原因是X,Y,Z数组的大小-所有的都是129个×269065。我的PC有8GB的RAM,大约1GB的内存被其他应用程序(包括OS)使用,这些应用程序留给Matlab的内存大约为6-7GB。
这是在代码运行后创建的图像:

有人能建议我怎样才能让它看上去更流畅吗?就像样本图像一样。
发布于 2015-07-21 23:49:21
如果纯粹出于美学的原因,快速获得平滑图像的一种肮脏方法是将高斯滤波器应用到从谱图函数返回的功率矩阵中。
clear;
[file,path] = uigetfile('*.wav'); % use GUI to select file
[y,fs,~] = wavread([path file]);
[p,f,t] = spectrogram(y(:,1),256,100,256,fs);
% Create the gaussian filter with hsize = [5 5] and sigma = 2
G = fspecial('gaussian',[5 5],2);
% Apply gaussian filter to the dB values
pBlur = imfilter(real(10*log10(p)),G,'same');
%# Show resulting spectograms (Filtered on top, origional on bottom)
figure(2);
imagesc([pBlur; real(10*log10(p))]);
colormap jet;您可以更改hsize和sigma以调整模糊属性。

https://stackoverflow.com/questions/31547880
复制相似问题