MATLAB基本操作與影象處理
阿新 • • 發佈:2019-01-01
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) %判斷是否為水平方向連續的周長像