繁体   English   中英

在Matlab中平滑3D表面

[英]Smoothing 3D surface in Matlab

我正在努力优化显示的3D对象。 我要实现的是制作音频文件的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数组的大小-到269065时均为129。我的电脑有8GB的RAM,大约1GB的内存被其他应用程序使用(包括操作系统)为Matlab留下了6-7 GB的空间。

这是在代码运行后创建的图像: 在此处输入图片说明

有人可以建议我如何使它看起来更平滑吗? 像样本图片一样。

如果纯粹出于美学原因,一种获取较平滑图像的快速肮脏方法是对频谱图函数返回的功率矩阵应用高斯滤波器。

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;

您可以更改hsizesigma来调整模糊属性。

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM