首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Matlab中三维曲面的光滑化

Matlab中三维曲面的光滑化
EN

Stack Overflow用户
提问于 2015-07-21 19:25:23
回答 1查看 677关注 0票数 0

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

,这只是样本图像-我知道光谱仪看起来不会像那个

这是用于生成面数减少的曲面的代码:

代码语言:javascript
复制
[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。

这是在代码运行后创建的图像:

有人能建议我怎样才能让它看上去更流畅吗?就像样本图像一样。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-21 23:49:21

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

代码语言:javascript
复制
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以调整模糊属性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31547880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档