簡體   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