信號源產生的方法
來源:http://www.2cto.com/kf/201401/270494.html matlab的checkerboard說明,GOOD!
來源:http://www.chinadmd.com/file/pxsxsrrwv3owooovx3ieprve_1.html
比如你要讀取E盤里的png 格式的圖片
p1=dir('E:\*.p*');%自動讀取文件夾里的png 所有圖片 *.p*是尋找E盤下后綴第一個字為p的 你當然可以改 如果你的是jpg就改為p1=dir('E:\*.j*');。
[r1 c1]=size(p1);
for i=1:r1
ImgN=p1(i).name;%圖片的名字
ImgN=strcat('E:\',ImgN);%讀取圖片
Img=(imread(ImgN));
if size(Img,3) == 3 %如果維數為三 則RGB圖像轉
化為灰度圖像 Img = rgb2gray(Img);
else
Img = Img;
end
%%加上處理的代碼
end
2.GUI在坐標系中讀取圖片
%按鍵下寫如下代碼
%打開文件對話框
[filename,pathname]=uigetfile({ ...
'*.*','All Files(*.*)';},...
'選擇文件');
%
if isequal([filename,pathname],[0,0])
return
else
%讀取圖片
pic = fullfile(pathname,filename);
b = imread(pic);
imshow(b);
end
我在一個E盤根目錄test文件夾中有1200幅圖像,圖像名依次是1,2,3,……1200,格式為bmp格式,E盤根目錄下有幅背景圖像I,格式也是bmp。第一步:讀取test中所有的圖像然后轉化成double型。第二步:讀取背景圖像I,再轉換成double型。第三步:將1200幅double型的圖像分別點除double型的圖像I得到1200幅無背景圖像。第四步:我1200幅無背景圖像進行剪切處理,剪切范圍是[81 0 1043 1300],得到新的1200幅圖像。第五步,將剪切后的1200幅圖像保存到F盤下的test文件夾中,命名依次為1,2,3,……1200,格式為bmp。
小弟不懂得地方就是如何批量讀取,如何用for循環實現double型轉換、除法和剪切。 由於小弟剛學習matlab,還請諸位高人指點。萬分感謝。 1. Blackground=imread('E:\XXX.bmp');
2. Blackground=double(Blackground);
3.
4. for i=1:1200
5. Na=['F:\test\',num2str(i),'.bmp'];
6. A=imread(Na);
7. A=double(A);
8. A=A./Blackground;
9. imwrite(A,Na);
10. end
來源:http://daizhengxian.blog.163.com/blog/static/3016867020111015101427433/
標准差的平方即為 方差,而協方差矩陣中的對角元素即為方差。
http://blog.csdn.net/xiaojidan2011/article/details/8812335
matlab 關於std,std2,mean,mean2初步認識
plot畫圖的顏色線型
y 黃色 · 點線
m 粉紅 ○ 圈線
c 亮藍 × ×線
r 大紅 + +字線
g 綠色 - 實線
b 藍色 * 星形線
w 白色 : 虛線
k 黑色 -.
-- 點划線
matlab6.1線形:
[ + | o | * | . | x | square | diamond | v | ^ | > | < | pentagram | hexagram ]
square 正方形
diamond 菱形
pentagram 五角星
hexagram 六角星
用法
grid 打開網格線 -- 虛線
hold on 命令用於在已畫好的圖形上添加新的圖形
1 x=0:0.001:10; % 0到10的1000個點(每隔0.001畫一個點)的x座標
y=sin(x); % 對應的y座標
plot(x,y); % 繪圖
注:matlab畫圖實際上就是描點連線,因此如果點取得不密,畫出來就成了折線圖,請試驗之
2 Y=sin(10*x);
plot(x,y,'r:',x,Y,'b') % 同時畫兩個函數
3 若要改變顏色,在座標對后面加上相關字串即可:
x=0:0.01:10;
plot(x,sin(x),'r')
4 若要同時改變顏色及圖線型態(Line style),也是在坐標對后面加上相關字串即可:
plot(x,sin(x),'r*')
5 用axis([xmin,xmax,ymin,ymax])函數來調整圖軸的范圍
axis([0,6,-1.5,1])
6 MATLAB也可對圖形加上各種注解與處理:(見上表)
xlabel('x軸'); % x軸注解
ylabel('y軸'); % y軸注解
title('余弦函數'); % 圖形標題
legend('y = cos(x)'); % 圖形注解
gtext('y = cos(x)'); % 圖形注解 ,用鼠標定位注解位置
grid on; % 顯示格線
7畫橢圓
a = [0:pi/50:2*pi]'; %角度
X = cos(a)*3; %參數方程
Y = sin(a)*2;
plot(X,Y);
xlabel('x'), ylabel('y');
title('橢圓')
8 繪制函數 在0 ≤ x ≤ 1時的曲線。
x=0:0.1:1
y=x.*exp(-x) %為什么用點運算?若不用會怎樣
plot(x,y),xlabel('x'),ylabel('y'),title('y=x*exp(-x)')
9 畫出衰減振盪曲線 與它的包絡線 及 。t 的取值范圍是[0, 4π] 。
t=0:pi/50:4*pi;
y0=exp(-t/3);
y=exp(-t/3).*sin(3*t);
plot(t,y,'-r',t,y0,':b',t,-y0,':b') % -r表示紅色實線,:b表示藍色點線,看上表
grid
10 在同一個畫面上建立幾個坐標系, 用subplot(m,n,p)命令;把一個畫面分成m×n個圖形區域, p代表當前的區域號,在每個區域中分別畫一個圖,如
x=linspace(0,2*pi,30); y=sin(x); z=cos(x);
u=2*sin(x).*cos(x); v=sin(x)./cos(x);
subplot(2,2,1),plot(x,y),axis([0 2*pi -1 1]),title('sin(x)')
subplot(2,2,2),plot(x,z),axis([0 2*pi -1 1]),title('cos(x)')
subplot(2,2,3),plot(x,u),axis([0 2*pi -1 1]),title('2sin(x)cos(x)')
subplot(2,2,4),plot(x,v),axis([0 2*pi -20 20]),title('sin(x)/cos(x)')
來源:http://hi.baidu.com/fightiger/item/aa43000fa353bf6dd55a11d8
MATLAB曲線繪制
一、 二維數據曲線圖
1.1 繪制單根二維曲線
plot函數的基本調用格式為:
plot(x,y)
其中x和y為長度相同的向量,分別用於存儲x坐標和y坐標數據。
例1-1 在0≤x≤2p區間內,繪制曲線
y=2e-0.5xcos(4πx)
程序如下:
x=0:pi/100:2*pi;
y=2*exp(-0.5*x).*cos(4*pi*x);
plot(x,y)
例1-2 繪制曲線。
程序如下:
t=0:0.1:2*pi;
x=t.*sin(3*t);
y=t.*sin(t).*sin(t);
plot(x,y);
plot函數最簡單的調用格式是只包含一個輸入參數:
plot(x)
在這種情況下,當x是實向量時,以該向量元素的下標為橫坐標,元素值為縱坐標畫出一條連續曲線,這實際上是繪制折線圖。
1.2 繪制多根二維曲線
1.plot函數的輸入參數是矩陣形式
(1) 當x是向量,y是有一維與x同維的矩陣時,則繪制出多根不同顏色的曲線。曲線條數等於y矩陣的另一維數,x被作為這些曲線共同的橫坐標。
(2) 當x,y是同維矩陣時,則以x,y對應列元素為橫、縱坐標分別繪制曲線,曲線條數等於矩陣的列數。
(3) 對只包含一個輸入參數的plot函數,當輸入參數是實矩陣時,則按列繪制每列元素值相對其下標的曲線,曲線條數等於輸入參數矩陣的列數。
當輸入參數是復數矩陣時,則按列分別以元素實部和虛部為橫、縱坐標繪制多條曲線。
2.含多個輸入參數的plot函數
調用格式為:
plot(x1,y1,x2,y2,…,xn,yn)
(1) 當輸入參數都為向量時,x1和y1,x2和y2,…,xn和yn分別組成一組向量對,每一組向量對的長度可以不同。每一向量對可以繪制出一條曲線,這樣可以在同一坐標內繪制出多條曲線。
(2) 當輸入參數有矩陣形式時,配對的x,y按對應列元素為橫、縱坐標分別繪制曲線,曲線條數等於矩陣的列數。
例1-3 分析下列程序繪制的曲線。
x1=linspace(0,2*pi,100);
x2=linspace(0,3*pi,100);
x3=linspace(0,4*pi,100);
y1=sin(x1);
y2=1+sin(x2);
y3=2+sin(x3);
x=[x1;x2;x3]';
y=[y1;y2;y3]';
plot(x,y,x1,y1-1)
3.具有兩個縱坐標標度的圖形
在MATLAB中,如果需要繪制出具有不同縱坐標標度的兩個圖形,可以使用plotyy繪圖函數。調用格式為:
plotyy(x1,y1,x2,y2)
其中x1,y1對應一條曲線,x2,y2對應另一條曲線。橫坐標的標度相同,縱坐標有兩個,左縱坐標用於x1,y1數據對,右縱坐標用於x2,y2數據對。
例1-4 用不同標度在同一坐標內繪制曲線y1=0.2e-0.5xcos(4πx) 和y2=2e-0.5xcos(πx)。
程序如下:
x=0:pi/100:2*pi;
y1=0.2*exp(-0.5*x).*cos(4*pi*x);
y2=2*exp(-0.5*x).*cos(pi*x);
plotyy(x,y1,x,y2);
4.圖形保持
hold on/off命令控制是保持原有圖形還是刷新原有圖形,不帶參數的hold命令在兩種狀態之間進行切換。
例1-5 采用圖形保持,在同一坐標內繪制曲線y1=0.2e-0.5xcos(4πx) 和y2=2e-0.5xcos(πx)。
程序如下:
x=0:pi/100:2*pi;
y1=0.2*exp(-0.5*x).*cos(4*pi*x);
plot(x,y1)
hold on
y2=2*exp(-0.5*x).*cos(pi*x);
plot(x,y2);
hold off
1.3 設置曲線樣式
MATLAB提供了一些繪圖選項,用於確定所繪曲線的線型、顏色和數據點標記符號,它們可以組合使用。例如,“b-.”表示藍色點划線,“y:d”表示黃色虛線並用菱形符標記數據點。當選項省略時,MATLAB規定,線型一律用實線,顏色將根據曲線的先后順序依次。
要設置曲線樣式可以在plot函數中加繪圖選項,其調用格式為:
plot(x1,y1,選項1,x2,y2,選項2,…,xn,yn,選項n)
例1-6 在同一坐標內,分別用不同線型和顏色繪制曲線y1=0.2e-0.5xcos(4πx) 和y2=2e-0.5xcos(πx),標記兩曲線交叉點。
程序如下:
x=linspace(0,2*pi,1000);
y1=0.2*exp(-0.5*x).*cos(4*pi*x);
y2=2*exp(-0.5*x).*cos(pi*x);
k=find(abs(y1-y2)<1e-2); %查找y1與y2相等點(近似相等)的下標
x1=x(k); %取y1與y2相等點的x坐標
y3=0.2*exp(-0.5*x1).*cos(4*pi*x1); %求y1與y2值相等點的y坐標
plot(x,y1,x,y2,'k:',x1,y3,'bp');
1.4 圖形標注與坐標控制
1.圖形標注
有關圖形標注函數的調用格式為:
title(圖形名稱)
xlabel(x軸說明)
ylabel(y軸說明)
text(x,y,圖形說明)
legend(圖例1,圖例2,…)
函數中的說明文字,除使用標准的ASCII字符外,還可使用LaTeX格式的控制字符,這樣就可以在圖形上添加希臘字母、數學符號及公式等內容。例如,text(0.3,0.5,‘sin({\omega}t+{\beta})’)將得到標注效果sin(ωt+β)。
例1-7 在0≤x≤2p區間內,繪制曲線y1=2e-0.5x和y2=cos(4πx),並給圖形添加圖形標注。
程序如下:
x=0:pi/100:2*pi;
y1=2*exp(-0.5*x);
y2=cos(4*pi*x);
plot(x,y1,x,y2)
title('x from 0 to 2{\pi}'); %加圖形標題
xlabel('Variable X'); %加X軸說明
ylabel('Variable Y'); %加Y軸說明
text(0.8,1.5,'曲線y1=2e^{-0.5x}'); %在指定位置添加圖形說明
text(2.5,1.1,'曲線y2=cos(4{\pi}x)');
legend(‘y1’,‘ y2’) %加圖例
2.坐標控制
axis函數的調用格式為:
axis([xmin xmax ymin ymax zmin zmax])
axis函數功能豐富,常用的格式還有:
axis equal:縱、橫坐標軸采用等長刻度。
axis square:產生正方形坐標系(缺省為矩形)。
axis auto:使用缺省設置。
axis off:取消坐標軸。
axis on:顯示坐標軸。
給坐標加網格線用grid命令來控制。grid on/off命令控制是畫還是不畫網格線,不帶參數的grid命令在兩種狀態之間進行切換。
給坐標加邊框用box命令來控制。box on/off命令控制是加還是不加邊框線,不帶參數的box命令在兩種狀態之間進行切換。
例1-8 在同一坐標中,可以繪制3個同心圓,並加坐標控制。
程序如下:
t=0:0.01:2*pi;
x=exp(i*t);
y=[x;2*x;3*x]';
plot(y)
grid on; %加網格線
box on; %加坐標邊框
axis equal %坐標軸采用等刻度
1.5 圖形的可視化編輯
MATLAB 6.5版本在圖形窗口中提供了可視化的圖形編輯工具,利用圖形窗口菜單欄或工具欄中的有關命令可以完成對窗口中各種圖形對象的編輯處理。
在圖形窗口上有一個菜單欄和工具欄。菜單欄包含File、Edit、View、Insert、Tools、Window和Help共7個菜單項,工具欄包含11個命令按鈕。
1.6 對函數自適應采樣的繪圖函數
fplot函數的調用格式為:
fplot(fname,lims,tol,選項)
其中fname為函數名,以字符串形式出現,lims為x,y的取值范圍,tol為相對允許誤差,其系統默認值為2e-3。選項定義與plot函數相同。
例1-9 用fplot函數繪制f(x)=cos(tan(πx))的曲線。
命令如下:
fplot('cos(tan(pi*x))',[ 0,1],1e-4)
1.7 圖形窗口的分割
subplot函數的調用格式為:
subplot(m,n,p)
該函數將當前圖形窗口分成m×n個繪圖區,即每行n個,共m行,區號按行優先編號,且選定第p個區為當前活動區。在每一個繪圖區允許以不同的坐標系單獨繪制圖形。
例5-10 在圖形窗口中,以子圖形式同時繪制多根曲線。
二、 其他二維圖形
2.1 其他坐標系下的二維數據曲線圖
1.對數坐標圖形
MATLAB提供了繪制對數和半對數坐標曲線的函數,調用格式為:
semilogx(x1,y1,選項1,x2,y2,選項2,…)
semilogy(x1,y1,選項1,x2,y2,選項2,…)
loglog(x1,y1,選項1,x2,y2,選項2,…)
2.極坐標圖
polar函數用來繪制極坐標圖,其調用格式為:
polar(theta,rho,選項)
其中theta為極坐標極角,rho為極坐標矢徑,選項的內容與plot函數相似。
例1-12 繪制r=sin(t)cos(t)的極坐標圖,並標記數據點。
程序如下:
t=0:pi/50:2*pi;
r=sin(t).*cos(t);
polar(t,r,'-*');
2.2 二維統計分析圖
在MATLAB中,二維統計分析圖形很多,常見的有條形圖、階梯圖、桿圖和填充圖等,所采用的函數分別是:
bar(x,y,選項)
stairs(x,y,選項)
stem(x,y,選項)
fill(x1,y1,選項1,x2,y2,選項2,…)
例1-13 分別以條形圖、階梯圖、桿圖和填充圖形式繪制曲線y=2sin(x)。
程序如下:
x=0:pi/10:2*pi;
y=2*sin(x);
subplot(2,2,1);bar(x,y,'g');
title('bar(x,y,''g'')');axis([0,7,-2,2]);
subplot(2,2,2);stairs(x,y,'b');
title('stairs(x,y,''b'')');axis([0,7,-2,2]);
subplot(2,2,3);stem(x,y,'k');
title('stem(x,y,''k'')');axis([0,7,-2,2]);
subplot(2,2,4);fill(x,y,'y');
title('fill(x,y,''y'')');axis([0,7,-2,2]);
MATLAB提供的統計分析繪圖函數還有很多,例如,用來表示各元素占總和的百分比的餅圖、復數的相量圖等等。
例1-14 繪制圖形:
(1) 某企業全年各季度的產值(單位:萬元)分別為:2347,1827,2043,3025,試用餅圖作統計分析。
(2) 繪制復數的相量圖:7+2.9i、2-3i和-1.5-6i。
程序如下:
subplot(1,2,1);
pie([2347,1827,2043,3025]);
title('餅圖');
legend('一季度','二季度','三季度','四季度');
subplot(1,2,2);
compass([7+2.9i,2-3i,-1.5-6i]);
title('相量圖');
三、 隱函數繪圖
MATLAB提供了一個ezplot函數繪制隱函數圖形,下面介紹其用法。
(1) 對於函數f = f(x),ezplot函數的調用格式為:
ezplot(f):在默認區間-2π<x<2π繪制f = f(x)的圖形。
ezplot(f, [a,b]):在區間a<x<b繪制f = f(x)的圖形。
(2) 對於隱函數f = f(x,y),ezplot函數的調用格式為:
ezplot(f):在默認區間-2π<x<2π和-2π<y<2π繪制f(x,y) = 0的圖形。
ezplot(f, [xmin,xmax,ymin,ymax]):在區間xmin<x<xmax和ymin<y<ymax繪制f(x,y) = 0的圖形。
ezplot(f, [a,b]):在區間a<x<b和a<y< b繪制f(x,y) = 0的圖形。
(3) 對於參數方程x = x(t)和y = y(t),ezplot函數的調用格式為:
ezplot(x,y):在默認區間0<t<2π繪制x=x(t)和y=y(t)的圖形。
ezplot(x,y, [tmin,tmax]):在區間tmin < t < tmax繪制x=x(t)和y=y(t)的圖形。
例1-15 隱函數繪圖應用舉例。
程序如下:
subplot(2,2,1);
ezplot('x^2+y^2-9');axis equal
subplot(2,2,2);
ezplot('x^3+y^3-5*x*y+1/5')
subplot(2,2,3);
ezplot('cos(tan(pi*x))',[ 0,1])
subplot(2,2,4);
ezplot('8*cos(t)','4*sqrt(2)*sin(t)',[0,2*pi])
四、三維圖形
4.1 三維曲線
plot3函數與plot函數用法十分相似,其調用格式為:
plot3(x1,y1,z1,選項1,x2,y2,z2,選項2,…,xn,yn,zn,選項n)
其中每一組x,y,z組成一組曲線的坐標參數,選項的定義和plot函數相同。當x,y,z是同維向量時,則x,y,z 對應元素構成一條三維曲線。當x,y,z是同維矩陣時,則以x,y,z對應列元素繪制三維曲線,曲線條數等於矩陣列數。
例1-16 繪制三維曲線。
程序如下:
t=0:pi/100:20*pi;
x=sin(t);
y=cos(t);
z=t.*sin(t).*cos(t);
plot3(x,y,z);
title('Line in 3-D Space');
xlabel('X');ylabel('Y');zlabel('Z');
grid on;
4.2 三維曲面
1.產生三維數據
在MATLAB中,利用meshgrid函數產生平面區域內的網格坐標矩陣。其格式為:
x=a:d1:b; y=c:d2:d;
[X,Y]=meshgrid(x,y);
語句執行后,矩陣X的每一行都是向量x,行數等於向量y的元素的個數,矩陣Y的每一列都是向量y,列數等於向量x的元素的個數。
2.繪制三維曲面的函數
surf函數和mesh函數的調用格式為:
mesh(x,y,z,c)
surf(x,y,z,c)
一般情況下,x,y,z是維數相同的矩陣。x,y是網格坐標矩陣,z是網格點上的高度矩陣,c用於指定在不同高度下的顏色范圍。
例1-17 繪制三維曲面圖z=sin(x+sin(y))-x/10。
程序如下:
[x,y]=meshgrid(0:0.25:4*pi);
z=sin(x+sin(y))-x/10;
mesh(x,y,z);
axis([0 4*pi 0 4*pi -2.5 1]);
此外,還有帶等高線的三維網格曲面函數meshc和帶底座的三維網格曲面函數meshz。其用法與mesh類似,不同的是meshc還在xy平面上繪制曲面在z軸方向的等高線,meshz還在xy平面上繪制曲面的底座。
例1-18 在xy平面內選擇區域[-8,8]×[-8,8],繪制4種三維曲面圖。
程序如下:
[x,y]=meshgrid(-8:0.5:8);
z=sin(sqrt(x.^2+y.^2))./sqrt(x.^2+y.^2+eps);
subplot(2,2,1);
mesh(x,y,z);
title('mesh(x,y,z)')
subplot(2,2,2);
meshc(x,y,z);
title('meshc(x,y,z)')
subplot(2,2,3);
meshz(x,y,z)
title('meshz(x,y,z)')
subplot(2,2,4);
surf(x,y,z);
title('surf(x,y,z)')
3.標准三維曲面
sphere函數的調用格式為:
[x,y,z]=sphere(n)
cylinder函數的調用格式為:
[x,y,z]= cylinder(R,n)
MATLAB還有一個peaks 函數,稱為多峰函數,常用於三維曲面的演示。
<!--[if !supportEmptyParas]--> <!--[endif]-->
例1-19 繪制標准三維曲面圖形。
程序如下:
t=0:pi/20:2*pi;
[x,y,z]= cylinder(2+sin(t),30);
subplot(2,2,1);
surf(x,y,z);
subplot(2,2,2);
[x,y,z]=sphere;
surf(x,y,z);
subplot(2,1,2);
[x,y,z]=peaks(30);
surf(x,y,z);
<!--[if !supportEmptyParas]--> <!--[endif]-->
4.3 其他三維圖形
在介紹二維圖形時,曾提到條形圖、桿圖、餅圖和填充圖等特殊圖形,它們還可以以三維形式出現,使用的函數分別是bar3、stem3、pie3 和fill3。
bar3函數繪制三維條形圖,常用格式為:
bar3(y)
bar3(x,y)
stem3函數繪制離散序列數據的三維桿圖,常用格式為:
stem3(z)
stem3(x,y,z)
pie3函數繪制三維餅圖,常用格式為:
pie3(x)
fill3函數等效於三維函數fill,可在三維空間內繪制出填充過的多邊形,常用格式為:
fill3(x,y,z,c)
<!--[if !supportEmptyParas]--> <!--[endif]-->
例1-20 繪制三維圖形:
(1) 繪制魔方陣的三維條形圖。
(2) 以三維桿圖形式繪制曲線y=2sin(x)。
(3) 已知x=[2347,1827,2043,3025],繪制餅圖。
(4) 用隨機的頂點坐標值畫出五個黃色三角形。
程序如下:
subplot(2,2,1);
bar3(magic(4))
subplot(2,2,2);
y=2*sin(0:pi/10:2*pi);
stem3(y);
subplot(2,2,3);
pie3([2347,1827,2043,3025]);
subplot(2,2,4);
fill3(rand(3,5),rand(3,5),rand(3,5), 'y' )
例1-21 繪制多峰函數的瀑布圖和等高線圖。
程序如下:
subplot(1,2,1);
[X,Y,Z]=peaks(30);
waterfall(X,Y,Z)
xlabel('X-axis'),ylabel('Y-axis'),zlabel('Z-axis');
subplot(1,2,2);
contour3(X,Y,Z,12,'k'); %其中12代表高度的等級數
xlabel('X-axis'),ylabel('Y-axis'),zlabel('Z-axis');
<!--[if !supportEmptyParas]-->
五、圖形修飾處理
5.1 視點處理
MATLAB提供了設置視點的函數view,其調用格式為:
view(az,el)
其中az為方位角,el為仰角,它們均以度為單位。系統缺省的視點定義為方位角-37.5°,仰角30°。
例5-22 從不同視點觀察三維曲線。
5.2 色彩處理
1.顏色的向量表示
MATLAB除用字符表示顏色外,還可以用含有3個元素的向量表示顏色。向量元素在[0,1]范圍取值,3個元素分別表示紅、綠、藍3種顏色的相對亮度,稱為RGB三元組。
<!--[if !supportEmptyParas]--> <!--[endif]-->
2.色圖
色圖(Color map)是MATLAB系統引入的概念。在MATLAB中,每個圖形窗口只能有一個色圖。色圖是m×3 的數值矩陣,它的每一行是RGB三元組。色圖矩陣可以人為地生成,也可以調用MATLAB提供的函數來定義色圖矩陣。
3.三維表面圖形的着色
三維表面圖實際上就是在網格圖的每一個網格片上塗上顏色。surf函數用缺省的着色方式對網格片着色。除此之外,還可以用shading命令來改變着色方式。
shading faceted命令將每個網格片用其高度對應的顏色進行着色,但網格線仍保留着,其顏色是黑色。這是系統的缺省着色方式。
shading flat命令將每個網格片用同一個顏色進行着色,且網格線也用相應的顏色,從而使得圖形表面顯得更加光滑。
shading interp命令在網格片內采用顏色插值處理,得出的表面圖顯得最光滑。
例1-23 3種圖形着色方式的效果展示。
程序如下:
[x,y,z]=sphere(20);
colormap(copper);
subplot(1,3,1);
surf(x,y,z);
axis equal
subplot(1,3,2);
surf(x,y,z);shading flat;
axis equal
subplot(1,3,3);
surf(x,y,z);shading interp;
axis equal
5.3 光照處理
MATLAB提供了燈光設置的函數,其調用格式為:
light('Color',選項1,'Style',選項2,'Position',選項3)
<!--[if !supportEmptyParas]--> <!--[endif]-->
例5-24 光照處理后的球面。
程序如下:
[x,y,z]=sphere(20);
subplot(1,2,1);
surf(x,y,z);axis equal;
light('Posi',[0,1,1]);
shading interp;
hold on;
plot3(0,1,1,'p');text(0,1,1,' light');
subplot(1,2,2);
surf(x,y,z);axis equal;
light('Posi',[1,0,1]);
shading interp;
hold on;
plot3(1,0,1,'p');text(1,0,1,' light');
5.4 圖形的裁剪處理
例5-25 繪制三維曲面圖,並進行插值着色處理,裁掉圖中x和y都小於0部分。
程序如下:
[x,y]=meshgrid(-5:0.1:5);
z=cos(x).*cos(y).*exp(-sqrt(x.^2+y.^2)/4);
surf(x,y,z);shading interp;
pause %程序暫停
i=find(x<=0&y<=0);
z1=z;z1(i)=NaN;
surf(x,y,z1);shading interp;
為了展示裁剪效果,第一個曲面繪制完成后暫停,然后顯示裁剪后的曲面。
六、圖像處理與動畫制作
6.1 圖像處理
1.imread和imwrite函數
imread和imwrite函數分別用於將圖像文件讀入MATLAB工作空間,以及將圖像數據和色圖數據一起寫入一定格式的圖像文件。MATLAB支持多種圖像文件格式,如.bmp、.jpg、.jpeg、.tif等。
2.image和imagesc函數
這兩個函數用於圖像顯示。為了保證圖像的顯示效果,一般還應使用colormap函數設置圖像色圖。
例1-26 有一圖像文件flower.jpg,在圖形窗口顯示該圖像。
程序如下:
[x,cmap]=imread('flower.jpg'); %讀取圖像的數據陣和色圖陣
image(x);colormap(cmap);
axis image off %保持寬高比並取消坐標軸
6.2 動畫制作
MATLAB提供getframe、moviein和movie函數進行動畫制作。
1.getframe函數
getframe函數可截取一幅畫面信息(稱為動畫中的一幀),一幅畫面信息形成一個很大的列向量。顯然,保存n幅圖面就需一個大矩陣。
2.moviein函數
moviein(n)函數用來建立一個足夠大的n列矩陣。該矩陣用來保存n幅畫面的數據,以備播放。之所以要事先建立一個大矩陣,是為了提高程序運行速度。
3.movie函數
movie(m,n)函數播放由矩陣m所定義的畫面n次,缺省時播放一次。
例1-27 繪制了peaks函數曲面並且將它繞z軸旋轉。
程序如下
[X,Y,Z]=peaks(30);
surf(X,Y,Z)
axis([-3,3,-3,3,-10,10])
axis off;
shading interp;
colormap(hot);
m=moviein(20); %建立一個20列大矩陣
for i=1:20
view(-37.5+24*(i-1),30) %改變視點
m(:,i)=getframe; %將圖形保存到m矩陣
end
movie(m,2); %播放畫面2次