1. 程式人生 > >MATLAB基本操作與影象處理

MATLAB基本操作與影象處理

E=eye(3,3);

R=rand(3,2);

S=[2 0;0 4];

O=zeros(2,3);

A=[E,R+R*S;O S^2]

C=A*A;

B=C


t=-1:0.01:1;

x=sin(2*pi*t);

y=cos(2*pi*10*t);

plot(t,x,t,y)

xlabel('t');ylabe('函式值')

legend('正弦函式','餘弦函式');


[x,y]=meshgrid(-10:0.05:10);

z=sin(pi*sqrt(x.^2+y.^2));

mesh(x,y,z)




x=-5:0.1:5;

y1=tpdf(x,5);

y2=tpdf(x,10);

y3=tpdf(x,20);

z=normpdf(x,0,1);

plot(x,y1,x,y2,x,y3,x,z)

legend('y1','y2','y3','z')

x=0:0.2:30;

y1=chi2pdf(x,5);

y2=chi2pdf(x,10);

y3=chi2pdf(x,20);

plot(x,y1,x,y2,x,y3)


L=[1.015;0.985;1.020;2.016;1.981;3.032]

A=[1,0,0;0,1,0;0,0,1;1,1,0;0,1,1;1,1,1]

C=inv(A'*A)

X=C*A'*L

x1=X(1,1),x2=X(2,1),x3=X(3,1)

V=L-A*X

v1=V(1,1),v2=V(2,1),v3=V(3,1),v4=V(4,1),v5=V(5,1),v6=V(6,1)

b=sqrt((v1^2+v2^2+v3^2+v4^2+v5^2+v6^2)/3)

d11=C(1,1),d22=C(2,2),d33=C(3,3)

bx1=b*sqrt(d11)

bx2=b*sqrt(d22)

bx3=b*sqrt(d33)


x=[26.8 25.4 28.9 23.6 27.7 23.9 24.7 28.1 26.9 27.4 22.6 25.6];

y=[26.5 27.3 24.2 27.1 23.6 25.9 26.3 22.5 21.7 21.4 25.8 24.9];

A=[ones(1,12);x]';

B=[ones(1,12);y]';

a=inv(A'*A)*A'*y';

b=inv(B'*B)*B'*x';

x1=20:.1:30;

y2=20:.1:30;

y1=a(1)+a(2)*x1;

x2=b(1)+b(2)*y2;

plot(x,y,'o',x1,y1,y2,x2)

yg=a(1)+a(2)*x;

U=sum((yg-mean(y)).^2);

Q=sum((y-yg).^2);

F=U./(Q./10);

S2=Q/10;

S=Q+U;

U,Q,F,S2,S


clc;

clear all

close all;

T=imread('f1.jpg');

%讀入電極影象

M=imresize(T,[256 256]);

%將影象調整256×256,為了顯示方便

YT=rgb2gray(M);

%將RGB 格式轉換為灰度影象

%Figure(),

%figure

subplot(2,5,1)

imshow(YT);title('Original Pic');

%%

%顯示原始影象

%去噪%

%1 中值濾波去噪%

Z1=medfilt2(YT,[5,5]);

%2 小波分析去噪%

%使用sym4 小波,設定全域性閾值去噪%

[THR,SORH,KEEPAPP]=ddencmp('den','wv',Z1);

X=wdencmp('gbl',Z1, 'sym4',2,THR, SORH, KEEPAPP);

subplot(2,5,2)

%Figure,

imshow(X,[])

title('去噪影象') %顯示去噪影象

%%

[Z1,s]=wavedec2(X,2, 'sym4');

%進行二層小波分解

len=length(Z1);

%處理分解系統,突出輪廓,弱化細節%

for i=1:len

if(Z1(i)>334)

Z1(i)=2* Z1(i);

else

Z1(i)=0.5* Z1(i);

end

end

Z=waverec2(Z1,s,'sym4'); %分解係數重構

%figure,

subplot(2,5,3)

imshow(Z,[])

title('增強影象') %顯示增強影象

%%

BW1=edge(Z, 'canny', 0.15) %canny 邊緣檢測

%figure,

subplot(2,5,4)

imshow(BW1)

title('canny 檢測效果') %顯示邊緣檢測影象

%%

%填補縫隙%

se90=strel('line',3,90);

se0=strel('line',3, 0);

%膨脹操作%

BWsdil=imdilate(BW1, [se90,se0]);

%figure,

subplot(2,5,5)

imshow(BWsdil);

title('膨脹影象') %顯示膨脹影象

%填充%

BWdfill=imfill(BWsdil, 'holes')

%figure,

subplot(2,5,6)

imshow(BWdfill)

title('填充影象') %顯示填充影象

%移除與邊界連通的目標%

BWnobord=imclearborder(BWdfill,4)

%figure, 

subplot(2,5,7)

imshow(BWnobord)

title('移除與邊界連通的影象') %顯示移除與邊界連通的影象

%平滑%

seD=strel('diamond',1)

BWfinal1=imerode(BWnobord,seD)

BWfinal2=imerode(BWfinal1,seD)

%figure, 

subplot(2,5,8)

imshow(BWfinal2)

title('平滑影象') %顯示平滑影象

%%

%計算裂紋面積%

count=0 %記錄裂紋影象畫素點的個數

[i,j]=size(BWfinal2);

for m=1:i

for n=1:j

if BWfinal2(m,n)>0 %判斷是否為裂紋影象畫素點

count=count+1;

end

end

end

S=count %統計裂紋影象畫素點的個數

%%

BWfinal3=uint8(BWfinal2);

BW2=edge(BWfinal3, 'canny') %邊緣提取

%figure, 

subplot(2,5,9)

imshow(BW2)

title('canny 檢測效果') %顯示邊緣檢測影象

[x,y]=size(BW2)

BW=bwperim(BW2, 8) %檢測目標的邊緣跟蹤,用於計算周長

%檢測垂直方向連續的周長畫素點%

P1=0;

P2=0;

Ny=0; %記錄垂直方向連續周長畫素點的個數

for i=1:x

for j=1:y

if(BW(i,j)>0)

P2=j;

if((P2-P1)==1) %判斷是否為垂直方向連續的周長畫素點

Ny=Ny+1;

end

P1=P2;

end

end

end

%檢測水平方向連續的周長畫素點%

P1=0

P2=0

Nx=0

for j=1:y

for i=1:x

if(BW(i,j)>0)

P2=i

if((P2-P1)==1) %判斷是否為水平方向連續的周長像