Wednesday, July 11, 2012

MATLAB 颜色的使用

颜色的使用
        MATLAB提供了许多在二维和三维空间内显示可视信息的工具。例如,看一条sin函数的曲线图就会比一堆数据提供更多的信息。这种用图表和图形来表示数据的技术叫做数据可视化MATLAB不仅是一个强大的计算工具,并且在以引人入胜和直观方式可视地表示数据方面也很有特色。
       但是很多时候,一个简单的二维或三维图形不能一次显示出想要提供的全部信息。这时,颜色可以对图形提供一个附加的维数。前面章节讨论的许多绘图函数都可以接受一个可用的颜色参量,来增加这附加的维数。
       本章的讨论以研究颜色映象开始:如何使用、显示、修改和如何创建用户自己的颜色映象。然后,阐述在一个图形窗口中仿真多个颜色映象的技术或只使用颜色映象的一部分的技术。最后,讨论照明模型并提供例子。


1 颜色映象理解


       MATLAB有一个叫颜色映象的数据结构来代表颜色值。颜色映象定义为一个有三列和若干行的矩阵。利用01之间的数,矩阵的每一行都代表了一种色彩。任一行的数字都指定了一个RGB值,即红、黄、蓝三种颜色的强度,形成一种特定的颜色。一些有代表性的RGB值在表1中给出。
 1 简单颜色

Red
GreenBlue颜色
000
111
100
010绿
001
110
101洋红
011青蓝
2/32/31天蓝
10.50橘黄
0.500深红
0.50.50.5灰色
 有十个MATLAB函数产生预定的颜色映象。见表2
2 标准颜色影像 
hsv色彩饱和值(以红色开始和结束)
hot从黑到红到黄到白
cool青蓝和洋红的色度
pink粉红的彩色度
gray线性灰度
bone带一点蓝色的灰度
jethsv的一种变形(以蓝色开始和结束)
copper线性铜色度
prim三棱镜。交替为红色、橘黄色、黄色、绿色和天蓝色
flag交替为红色、白色、蓝色和黑色
        按缺省,上面所列的各个颜色映象产生一个64×3的矩阵,指定了64种颜色RGB的描述。这些函数都接受一个参量来指定所产生矩阵的行数。比如hot(m)产生一个m×3的矩阵,它包含的RGB颜色值的范围从黑经过红、橘红和黄,到白。
       大多数计算机在一个8位的硬件查色表中一次可以显示256种颜色,当然有些计算机的显示卡可以同时显示更多的颜色。这就意味着在不同的图中,一般一次可以用三或四个64×3的颜色映象。如果使用了更多的颜色映象输入项,计算机必须经常在它的硬件查色表中调出输入项。比如,当在画MATLAB图形时背景图案发生了变化,就是发生了这种情况。所以,除非计算机有一次显示更多种颜色的显示卡,最好任何一次所用的颜色映象输入项数都小于256


2 颜色映象使用


       语句colormap(M将矩阵M作为当前图形窗口所用的颜色映象。例如,colormapcool装入了一个有64个输入项的cool颜色映象。colormap  default装入了缺省的颜色映象hsv
       函数plotplot3contourcontour3不使用颜色映象,它们使用列在plot颜色和线形表中的颜色。而大多数其它绘图函数,比如meshsurffillpcolor和它们的各种变形函数,使用当前的颜色映象。
       接受颜色参量的绘图函数中的颜色参量通常采用以下三种形式之一:(1)字符串。代表plot颜色或线型表中的一种颜色,比如,r 代表红色;(2)三个输入的行向量。它代表一个单独的RGB值,比如[.25   .50   .75];(3)矩阵。如果颜色参量是一个矩阵,其元素作了调整,并把它们用作当前颜色映象的下标。最后一种形式会在以后作更多讨论。


3 颜色映象显示


       可以用多种途径来显示一个颜色映象。其中一个方法是观察颜色映象矩阵的元素。


       » hot(8)
       ans =
           0.3333                 0
           0.6667                 0
           1.0000                 0
           1.0000    0.3333         0
           1.0000    0.6667         0
           1.0000    1.0000         0
           1.0000    1.0000    0.5000
           1.0000    1.0000    1.0000


       上面的数据显示出第一行是1/3红色,而最后一行是白色。另外,函数pcolor可以用来显示一个颜色映象。例如:


       » n=16;
       » colormap(jet(n))
       » pcolor([1:n+1;1:n+1] )
       » title(  Using Pcolor to Display a Color Map )


      因为上面这一段程序很有用处,它已经装入精通MATLAB工具箱中的函数mmshow中。


       » help mmshow
       MMSHOW PCOLOR Colormap Display
              MMSHOW uses pccolor to display the current colormap.
              MMSHOW(MAP) displays the colormap MAP.
              MMSHOW(MAP(N)) displays the colormap MAP having N elements.
              Examples:MMSHOW(hot)
                      MMSHOW(pink(30))
帮助信息
       MMSHOW  显示PCOLOR颜色映象
       MMSHOW  使用pcolor来显示当前颜色映象
       MMSHOW(MAP)  显示MAP颜色映象
       MMSHOWMAP(N))  显示一个有N个元素的MAP颜色映象
       例子:MMSHOWhot
             MMSHOWpink30))
       函数mmshow取和colormap同样的输入参量,但在这种情况下它用自己的伪彩色显示而不是把颜色映象施加到当前图形。
       另一种途径是使用MATLAB的函数rgbplot,它可以把颜色映象的各列分别画成红、绿和蓝色。例如:


       » rgbplot(hot)


       输出见附件中图2.


       图中显示红色分量首先增加,然后是绿色,最后是蓝色。rgbplotgray表示所有三列数据均匀线性地增加(三条线重叠)。
       最后,函数colorbar在当前的图形窗口中增加水平或垂直的颜色标尺以显示当前坐标轴的颜色映象。»colorbar( horiz ) 在当前的图形下面放一个水平的颜色条。» colorbar( vert ) 在当前的图形右边放一个垂直的颜色条。对无参量的colorbar,如果当前没有颜色条就加一个垂直的颜色条,或者更新现有的颜色条。下面的例子就演示了colorbar的用法。


       » [x,y,z]=peaks;
       » mesh(x,y,z);
       » colormap(hsv)
       » axis([-3   -3   -6  8])
       » colorbar

No comments:

Post a Comment