matlab三维数据绘图



3D数据绘制唇部图像主要由两部分构成,一个是唇部在X-Y平面的栅格,一个是根据相应Z轴的涂色。主要使用了matlabmeshgridsurfshading 

1 使用meshgrid生成栅格

meshgrid(x,y)由向量x和向量y通过复制的方法产生绘制图形时所需的栅格数据点矩阵XY。该命令产生栅格数据方法为:将向量X作为矩阵X的一个行向量,并将向量X复制length(y)次,以构成栅格数据点X矩阵;同样,将向量y作为矩阵Y的一个列向量,并将向量y复制length(x)次,以构成栅格数据点Y矩阵。    

                 

                  matlab三维数据绘图_第1张图片         matlab三维数据绘图_第2张图片


从图可以看出,在xy平面生成数据栅格。

    但是,通过meshgrid这样生成的都是矩形区域,即根据Z轴涂色的基础就是底层是个矩形,绘制的是规则图像,如果绘制不规则图像,就要使用linspace函数linspace函数形式为linspace(X1,X2,N),X1为起始元素,X2为结尾元素,生成等间距的N个元素的列向量,其实整个生成过程都是通过插值完成的,N代表X1X2之间插多少个数据。本实验中画图使用如下:

             [X,Y] = meshgrid(linspace(min(aa),max(a),300),linspace(min(b1),max(b),300));

2 surf绘制三维曲面

    通过上步绘完xy的栅格后,就需要根据Z轴涂色以观察3维效果。Surf的格式为surf(x,y,z),其中XY就是上步骤中生成的栅格数据,Z则是XY对应的Z轴数据,以此为根据涂色。

但是涂什么颜色就要靠colormapshading

了,本实验只涂了灰色,所以代码如下:

                          surf(X,Y,Z);
                          shading interp;
                          colormap gray;
但是上面有个问题没有提到,怎么将ZXY 的数据对应上呢,这个时候就要使用:
                  F = TriScatteredInterp(a,b,c);
                  Z = F(X,Y);

TriScatteredInterp就是将XYZ的数据对应上。

       3 坐标轴设置

    本实验在坐标轴设置上,主要使用了两个特点,一个是使保存是不保存坐标轴,一个是设置坐标轴范围,分别使用代码如下:

           axis off  %使坐标轴消失
           %以下为设置坐标轴范围
           midX = (max(a) + min(aa))/2;
           midY = (max(bb) + min(b1))/2;
           midZ = (max(c) + min(c))/2;
           axis( [midX - 0.03,midX + 0.03,midY - 0.022,midY + 0.022,midZ - 0.015,midZ + 0.015]);

      4 视角view

    Surf画完图之后显示的并不是唇部的正面图,而是一个视点为方位角-37.5°,仰角30°的图像,通过旋转这个三维图,可以看到这个唇部的各个视角,第一眼呈现给观者的是个默认值,可通过view(az,el)定义呈现的视角,az表示方位角,EL

表示仰角。

                     view(2)  %投影到xy平面

      5 保存print

   最后画完图就需要保存图像了,使用print保存,其中通过‘-r9’可以设置保存图像的大小,代码如下:

                 print(gcf,'-djpeg','-r9',strcat(savepath,imageName));

    但是这样保存的图片会保存图片周围大量的空白区域,所以使用以下代码可以将空白区域去掉:

         set(gcf, 'PaperPositionMode', 'manual');
         set(gcf, 'PaperUnits', 'points');
         axis image;
         set(gca,'position',[0,0,1,1]);
         set(gcf, 'PaperPosition', [0 0 510 510]);
         set(gcf,'visible','off');

注:小细节使用hold onhold off 


参考资料如下:

http://wenku.baidu.com/link?url=Sx3UxRAcH3LRXuV8qJLpZNlYdUJNLMUaaCTvwqL_VutjIMTfhopwvEWWjERPmDDs4YPwS9PxOSzfBY8s9fHF5Fj0BfoK5AZo8mafPDHrLau 

http://blog.macro2.org/2010-09/%e4%b8%8d%e8%a7%84%e5%88%99%e6%a0%b7%e6%9c%ac%e7%82%b9%e7%bb%98%e5%88%b6%e6%9b%b2%e9%9d%a2%e5%9b%be%e5%bd%a2-griddata%e7%af%87.html 

http://wenku.baidu.com/link?url=87rv4fqsxBYVIop_8G5IiWhcRy88ZQ8hRccVoqH4FWBJ56lQ6kjTPRc8cxtLdPa64xZnbhsiHF8P-gU7JKR2vM76QuDT_k-WMFjAdV8raZW

http://hi.baidu.com/skyliujk/item/68c10d4785adc5eebcf45148

你可能感兴趣的:(语音信号处理,matlab绘三维图,不规则点,保存surf三维图)