图片像素的降低与恢复
I=imread('2.jpg' );%读取图片
g=rgb2gray(I);%彩色图像灰度化
figure;imshow(I);%显示原图片
figure;imshow(g);%显示灰度值图片
%降低图像分辨率
g_down_1=g(1:2:end,1:2:end);%512
g_down_2=g_down_1(1:2:end,1:2:end);%256
g_down_3=g_down_2(1:2:end,1:2:end);%128
g_down_4=g_down_3(1:2:end,1:2:end);%64
g_down_5=g_down_4(1:2:end,1:2:end);%32
figure;imshow(g_down_1);%显示
figure;imshow(g_down_2);%显示
figure;imshow(g_down_3);%显示
figure;imshow(g_down_4);%显示
figure;imshow(g_down_5);%显示
%把降低分辨率的图像恢复原大小
G_up_5_near=imresize(g_down_3,8,'nearest' ); %最近邻法放大
G_up_5_bil=imresize(g_down_5,32,'bilinear' ); %双线性插值法放大 G_up_5_bic=imresize(g_down_5,32,'bicubic' ); %三次内插法放大 figure;imshow(G_up_5_near);%显示
figure;imshow(G_up_5_bil);%显示
figure;imshow(G_up_5_bic);%显示
图像的四则运算和减法运算
clear;clc;%清空变量及工作区
I=imread('11.jpg' );%读取图片
I=rgb2gray(I);%彩色图像灰度化
I2=imread('22.jpg' );%读取图片
I2=rgb2gray(I2);%彩色图像灰度化
K=imlincomb(0.6,I,0.4,I2);%计算两幅图像的线性组合
K=histeq(K);%进行直方图均衡化
imshow(K);
figure;
I1=imread('1.jpg' );
I2=imread('2.jpg' );
I=I1-I2;%图像相减
imshow(I);
histeq (X )函数实现直方图均衡。因为此函数只能对灰度图像进
行直方图均衡。故应先将彩图转为灰度图像
位图显示
clear;clc;
I=imread('aerial.tif'
);
I=double(I);
G_7=bitand(I,128);%求灰度值第七位
I_7=im2uint8(mat2gray(G_7));%转换为无符号八位整型
figure;imshow(I_7);%显示第七位位图
G_6=bitand(I,64);%求灰度值第6位
I_6=im2uint8(mat2gray(G_6));%转换为无符号八位整型
figure;imshow(I_6);%显示第6位位图
G_5=bitand(I,32);
I_5=im2uint8(mat2gray(G_5));
figure;imshow(I_5);
G_4=bitand(I,16);
I_4=im2uint8(mat2gray(G_4));
figure;imshow(I_4);
G_3=bitand(I,8);
I_3=im2uint8(mat2gray(G_3));
figure;imshow(I_3);
G_2=bitand(I,4);
I_2=im2uint8(mat2gray(G_2));
figure;imshow(I_2);
G_1=bitand(I,2);
I_1=im2uint8(mat2gray(G_1));
figure;imshow(I_1);
G_0=bitand(I,1);
I_0=im2uint8(mat2gray(G_0));
figure;imshow(I_0);
I_restore=G_7+G_6+G_5+G_4+G_3+G_2+G_1+G_0;%读取重新储存的图片 figure;imshow(uint8(I_restore));%显示
骨骼图的显示
%读取图像
I=imread('Fig0343(a)(skeleton_orig).tif');
%显示a 图像
A=im2double(I);
subplot(2,4,1);
imshow(A);
title('(a)全身骨骼扫描图像');
%显示b 图像
subplot(2,4,2);
A=double(A);
w1=fspecial('laplacian',0);
B=imfilter(A,w1,'corr','replicate');
imshow(B); %得到拉普拉斯变换后的图像
title('(b)经过拉普拉斯操作后的结果');
%显示c 图像
subplot(2,4,3);
C=A+B; %得到A+B的结果
imshow(C);
title('(c)图a 加图b 得到的锐化图像');
%显示d 图像
subplot(2,4,4);
w1=fspecial('sobel'); %得到水平sobel 模板
w2=w1'; %转置得到竖直sobel 模板
G1=imfilter(A,w1); %水平sobel 梯度
G2=imfilter(A,w2); %竖直sobel 梯度
D=abs(G1)+abs(G2); %sobel梯度
imshow(D);
title('(d)图a 经sobel 梯度处理后的结果');
%显示e 图像
subplot(2,4,5);
e=fspecial('average',5);
E=imfilter(D,e,'corr','replicate');
imshow(E);
title('(e)使用5*5均值滤波器平滑后的sobel 图像');
%显示f 图像
subplot(2,4,6);
C=im2double(C);
E=im2double(E);
F=C.*E; imshow(F);
title('(f)图c 和图e 相乘形成的掩蔽图像');
%显示g 图像
subplot(2,4,7);
G=abs(A)+abs(F);
imshow(G);
title('(g)由图a 和图f 求和得到的锐化后的图像');
%显示h 图像
subplot(2,4,8);
imshow(imadjust(G,[],[],0.5));
title('(h)对图g 应用幂律变换得到的最终结果');
灰度直方图操作
clear;clc;
I=imread('moon.tif' );
figure;imshow(I);
figure;imhist(I); %显示灰度直方图
h=imhist(I,256); %长条图显示,宽度为1,
figure;bar(h);
h_scale=imhist(I,25);
x=linspace(0,255,25);%创建向量
figure;bar(x,h_scale); %长条图显示,宽度为25
I_equ=histeq(I,256); %直方图均衡化
figure;imhist(I_equ);
figure;imshow(I_equ);
figure;bar(imhist(I_equ));
图像锐化梯度算子的应用
clear;clc;
f=imread('building.tif' );
f=im2double(f);
w1=fspecial('sobel' ); %得到水平sobel 模板
w2=w1';%转置得到竖直sobel 模板
g1=imfilter(f,w1,'replicate' ); %横向梯度算子结果
g2=imfilter(f,w2,'replicate' ); %纵向梯度算子结果
g=abs(g1)+abs(g2);%sobel梯度
imshow(f);figure;
imshow(g1);figure;
imshow(g2);figure;
imshow(g);
图像锐化拉普拉斯算子的引用
clear;clc;
f=imread('moon.tif' );
w4=fspecial('laplacian' ,0);%生成拉普拉斯滤波器
w8=[1 1 1;1 -8 1;1 1 1];
f=im2double(f);
g4=f-imfilter(f,w4,'replicate' ); %g4=f-imfilter(f,w4,'symmetric');
g8=f-imfilter(f,w8,'replicate' ); %g8=f-imfilter(f,w8,'symmetric');
[A,B]=find(g4
g4(A(i,1),B(i,1))=0;%令这些元素为0
end
[C,D]=find(g4>1);%找出矩阵中大于一元素所在行和列, 并存在[c,d]中 for i=1:length(C) %从1到length (C )循环
g4(C(i,1),D(i,1))=1;%令这些元素为1
end
figure;imshow(f);
%g4=im2uint8(mat2gray(g4));
%g8=im2uint8(mat2gray(g8));
figure;imshow(imfilter(f,w4,'replicate' ))
figure;imshow(g4);
figure;imshow(imfilter(f,w8,'replicate' ))
figure;imshow(g8);
平滑空间滤波器
clear;clc;
I=imread('pattern.tif' );%读取图像
imshow(I);figure;%显示原图
h=fspecial('average' ,[14 14]);%产生均值滤波器模板
g=imfilter(I,h,'replicate' );%滤波
imshow(g);
%阈值分割
I=imread('galaxy.tif' );
h=fspecial('average' ,[15 15]);%产生均值滤波器模板
g=imfilter(I,h,'replicate' );%滤波
level = graythresh(g);%通过计算获得输入图像的阈值
BW = im2bw(g,level);%通过阈值变换法把灰度图像转换成二值图像 imshow(BW);
%中值滤波
I=imread('imnoise.tif' );
g=medfilt2(I,[3 3]);%窗口大小为3×3的中值滤波
%g=medfilt2(I,[3 3],'symmetric');
imshow(g);
%顺序滤波
A=imread('imnoise.tif' );
B=ordfilt2(A,15,true(7),'symmetric');%图像作顺序统计滤波 figure;imshow(A);figure;imshow(B)
图像增强的三种方法
% inverse transformation
I=imread('breast.tif' );
g=im2uint8(mat2gray(I));%图像数据类型转换为无符号八位整型。 g_inver=255-g;%图像反转
figure;imshow(I);
figure;imshow(g_inver);
%log transform
I=imread('fourier.tif' );
g=im2uint8(mat2gray(log(1+double(I))));%对图像进行对数变换 figure;imshow(I);
figure;imshow(g);
% power transform moon.tifaerial.tif
I=imread('aerial.tif' );
g=im2uint8(mat2gray(double(I).^(2)));%对图像进行幂律变换 %g=255-I;
figure;
imshow(I);
figure;
imshow(g);
理想低通滤波器
f=imread('dynamic_range.tif'); 索引形式读入
imshow(f);显示图像
title('Ô-ͼ');
f=im2double(f);按比例的将其缩放至double 类型
F=fftshift(fft2(f));正半轴部分和负半轴部分的图像分别关于各自的中心对称 M=size(F,1);表示维数的第一项
N=size(F,2);表示维数的第二项
u=1:M;u=[1,2,3,4,…M]
v=1:N;v=[1,2,3,4,…N]
[V,U]=meshgrid(v,u);产生两个矩阵,第一个矩阵是由v 作为行向量组成,第二个向量由u 作为列向量组成
D=sqrt((U-(floor(M/2)+1)).^2+(V-(floor(N/2)+1)).^2); 计算公式 H=zeros(M,N);产生一个mxn 的全零矩阵
H(D
G=F.*H;进行卷积
G_inv=ifft2(ifftshift(G));进行图像二维离散快速傅里叶变换
figure; 建立图形
imshow(real(G_inv));显示图像
title('Â˲¨ºó');
alpha=sum(abs(F(D
巴特沃斯低通滤波器
f=imread('pattern.tif' ); 索引形式读入
imshow(f);显示图像
%title('Ô-ͼ');
f=im2double(f);按比例的将其缩放至double 类型
F=fftshift(fft2(f));正半轴部分和负半轴部分的图像分别关于各自的中心对称 M=size(F,1);表示维数的第一项
N=size(F,2);表示维数的第二项
u=1:M;u=[1,2,3,4,…M]
v=1:N;v=[1,2,3,4,…N]
[V,U]=meshgrid(v,u);产生两个矩阵,第一个矩阵是由v 作为行向量组成,第二个向量由u 作为列向量组成
D=sqrt((U-(floor(M/2)+1)).^2+(V-(floor(N/2)+1)).^2); 计算公式?
H=zeros(M,N);产生一个mxn 的全零矩阵
D0=235;n=2; %2阶
H=1./(1+(D./D0).^(2*n));公式?
G=F.*H; 进行卷积? G_inv=ifft2(ifftshift(G));进行图像二维离散快速傅里叶变换 figure; 建立图形
imshow(real(G_inv));显示图像
%title('Â˲¨ºó')
高斯低通滤波器
clear;clc;
f=imread('broken-text.tif' ); 索引形式读入
imshow(f);显示图像
%title('Ô-ͼ');
f=im2double(f);按比例的将其缩放至double 类型
F=fftshift(fft2(f));正半轴部分和负半轴部分的图像分别关于各自的中心对称 M=size(F,1);表示维数的第一项
N=size(F,2);表示维数的第二项
u=1:M;u=[1,2,3,4,…M]
v=1:N;v=[1,2,3,4,…N]
[V,U]=meshgrid(v,u);产生两个矩阵,第一个矩阵是由v 作为行向量组成,第二个向量由u 作为列向量组成
D=sqrt((U-(floor(M/2)+1)).^2+(V-(floor(N/2)+1)).^2);计算公式?
H=zeros(M,N);产生一个mxn 的全零矩阵
D0=80;
H=exp(-D.^2./(2*D0.^2));公式
G=F.*H;
G_inv=ifft2(ifftshift(G));进行图像二维离散快速傅里叶变换 figure;imshow(real(G_inv));
%title('Â˲¨ºó')
高斯高通滤波器(同上)
clear;clc;
f=imread('chest_xray.tif');
imshow(f);
%title('Ô-ͼ');
f=im2double(f);
F=fftshift(fft2(f));
M=size(F,1);N=size(F,2);
u=1:M;
v=1:N;
[V,U]=meshgrid(v,u);
D=sqrt((U-(floor(M/2)+1)).^2+(V-(floor(N/2)+1)).^2); L=zeros(M,N);
D0=2; 截止频率=2
L=exp(-D.^2./(2*D0.^2));
H=1-L;低通变成高通
G=F.*H;
G_inv=ifft2(ifftshift(G));
figure;imshow(real(G_inv),[]);
%title('Â˲¨ºó')
巴特沃斯高通滤波器(同上)
f=imread('thumb_print.tif');
imshow(f);
%title('Ô-ͼ');
f=im2double(f);
F=fftshift(fft2(f));
M=size(F,1);N=size(F,2);
u=1:M;
v=1:N;
[V,U]=meshgrid(v,u);
D=sqrt((U-(floor(M/2)+1)).^2+(V-(floor(N/2)+1)).^2); L=zeros(M,N);
D0=25;n=4;截止频率=25 ,设为4阶
L=1./(1+(D./D0).^(2*n));
H=1-L; 低通变成高通
G=F.*H;
G_inv=real(ifft2(ifftshift(G)));
figure;imshow(G_inv);
%title('Â˲¨ºó')
I_thresh=G_inv; %指纹处理
[A,B]=find(I_thresh
[C,D]=find(I_thresh>=0);找出矩阵中I_thresh>=0元素所在行和列, 并存在C,D 中
for i=1:length(A)取i 分别为在1到length(A)的每一个数
I_thresh(A(i,1),B(i,1))=0;令这些元素为0
end
for i=1:length(C)(同上)
I_thresh(C(i,1),D(i,1))=1;令这些元素为1
end
figure;imshow(I_thresh);
clear;clc;
I=zeros(512,512);产生一个512x512的全零矩阵
I(226:286,240:266)=1;
imshow(I);
F=fft2(I);
F_no_shift=abs(F);
F_shift=abs(fftshift(F));
% G_no_shift=log(1+F_no_shift);
G_shift=log(1+F_shift);
%figure;imshow(F_no_shift,[]);
% figure;imshow(G_no_shift,[]);
figure;imshow(F_shift,[]);
figure;imshow(G_shift,[]);
%
% %图像旋转
I2=imrotate(I,45,'bilinear' , 'crop' );
figure;imshow(I2);
F2=fft2(I2);
F2_shift=abs(fftshift(F2));
G2_shift=log(1+F2_shift);
figure;imshow(F2_shift,[]);
figure;imshow(G2_shift,[]);
振铃效应
f=zeros(512,512);
f(128,128)=255;
f(128,384)=255;
f(384,128)=255;
f(384,384)=255;
f(256,256)=255;
figure;imshow(f);
f=im2double(f);
F=fftshift(fft2(f));
M=size(F,1);N=size(F,2);
u=1:M;
v=1:N;
[V,U]=meshgrid(v,u);
D=sqrt((U-(floor(M/2)+1)).^2+(V-(floor(N/2)+1)).^2); H=zeros(M,N);
H(D
G=F.*H;
G_inv=ifft2(ifftshift(G));
figure;imshow(real(G_inv),[]);
拉普拉斯滤波器
clear;clc;
f=imread('moon.tif' );
imshow(f);
%title('moon');
f=im2double(f);
F=fftshift(fft2(f));
M=size(F,1);N=size(F,2);
u=1:M;
v=1:N;
[V,U]=meshgrid(v,u);
H=zeros(M,N);
H=-4*pi^2*((U-(floor(M/2)+1)).^2+(V-(floor(N/2)+1)).^2); G=F.*H;
G1=real(ifft2(ifftshift(G)));
figure;imshow(G1,[]);%线性映射0-255
G2=G1-min(G1(:));
G2=G2/max(G2(:));
G3=im2uint8(G2);
%figure;imshow(G3)%G3ÏßÐÔÓ³Éä µÈͬÓÚimshow£¨G1,[]); %title('±ê¶¨ºóµÄͼÏñ');
G2=f-G2;
figure;imshow(G2,[]);
%title('À-ÆÕÀ-˹Ëã×ÓÔöǿͼÏñ');
%空间拉普拉斯算子
w4=fspecial('laplacian' ,0);
sp=imfilter(f,w4);
g4=f-sp;
figure;imshow(sp,[]);
figure;imshow(g4,[]);
第六章
e dge_function clear;clc; %清空命令窗口的所有输入和输出 I=imread('1.jpg' ); %读入wirebond_mask.tif图像
BW_sobel=edge(I,'sobel' ); %图像边缘提取
imshow(BW_sobel); %显示图像
BW_prewitt=edge(I,'prewitt' ); %prewitt图像边缘提取
figure;imshow(BW_prewitt); %产生新的窗口,显示图像 BW_log=edge(I,'log' ); %用log 算子进行边缘检测
figure;imshow(BW_log); %产生新的窗口,显示图像
[BW_cannyth]=edge(I,'canny' ); %canny 算子检测法检测图像边缘 figure;imshow(BW_canny); %产生新的窗口,显示图像
hough_trans
clear;clc; %清空命令窗口的所有输入输出
I=zeros(101,101); %zeros 就是生成一个全0的矩阵
I(1,1)=1;I(101,1)=1; %第1行第1列,元素为1
I(1,101)=1;I(101,101)=1;
I(51,51)=1;
[H,theta,rho]=hough(I);
subplot(1,2,1);imshow(I);
subplot(1,2,2);
imshow(imadjust(mat2gray(H)),'XData' ,theta, 'YData' ,rho, ... 'InitialMagnification' , 'fit' );
line_detection
f=imread('1.jpg' );
imshow(f);
w=[1 1 1;1 -8 1;1 1 1 ];
g=imfilter(f,w,'replicate' );
%imfilter根据指定操作进行多维滤波
figure;imshow(g,[])
figure,imshow(abs(g),[]);
g(g
figure;imshow(g,[]);
T=0.5*max(g(:));
m=g>=T;
figure;imshow(m,[]);
line_direction_detection
f=imread('wirebond_mask.tif');
f=im2double(f);
imshow(f);
w_h=[-1 -1 -1;2 2 2;-1 -1 -1];
w_v=w_h';
w_45=[-1 -1 2;-1 2 -1;2 -1 -1];
w_n45=[2 -1 -1;-1 2 -1;-1 -1 2];
g_h=imfilter(f,w_h,'replicate' );
g_v=imfilter(f,w_v,'replicate' );
g_45=imfilter(f,w_45,'replicate' );
g_n45=imfilter(f,w_n45,'replicate' );
% figure;imshow(g_h,[])
% figure;imshow(g_v,[])
% figure;imshow(g_45,[])
% figure;imshow(g_n45,[])
T_h=0.5*max(g_h(:));
m_h=g_h>=T_h;
figure;imshow(m_h,[]);
T_v=0.5*max(g_v(:));
m_v=g_v>=T_v;
figure;imshow(m_v,[]);
T_45=0.5*max(g_45(:));
m_45=g_45>=T_45;
figure;imshow(m_45,[]);
T_n45=0.5*max(g_n45(:));
m_n45=g_n45>=T_n45;
figure;imshow(m_n45,[]);
smooth_line_detection
clear;clc;
f=imread('building_original.tif');
f=im2double(f);
imshow(f);
h=fspecial('average' ,[5 5]);
f=imfilter(f,h,'replicate' );
wh=fspecial('sobel' );
wv=wh';
gh=abs(imfilter(f,wh,'replicate' ));
gv=abs(imfilter(f,wv,'replicate' ));
figure;imshow(gh);
figure;imshow(gv);
g_all=gh+gv;
Th=0.5*max(gh(:));
mh=gh>=Th;
figure,imshow(mh);
Tv=0.5*max(gv(:));
mv=gv>=Tv;
figure,imshow(mv);
T_all=0.3*max(g_all(:));
m_all=g_all>=T_all;
figure,imshow(m_all);
spot_detection
f=imread('turbine_blade_black_dot.tif');
f=im2double(f);
imshow(f);
w=[1 1 1;1 -8 1;1 1 1 ];
g=imfilter(f,w,'replicate' );
figure;imshow(g,[])
T=0.9*max(g(:));
m=g>=T;
figure,imshow(m);
threshold_seg
I=imread('polymersomes.tif' );
T=graythresh(I);
g=I>=T*255;
figure,imshow(g);
同态滤波器
clear;clc
f=imread('dynamic_range.tif');
figure;imshow(f);
f=im2double(f);
F=fftshift(fft2(log(f+eps)));
M=size(F,1);N=size(F,2);
u=1:M;
v=1:N;
[V,U]=meshgrid(v,u); %meshgrid用于生成网格采样点的函数。 D=sqrt((U-(floor(M/2)+1)).^2+(V-(floor(N/2)+1)).^2); H=zeros(M,N);
D0=2;c=1.5;%1.5;
H=1.5*(1-exp(-c*D.^2./D0.^2))+0.5;
G=F.*H;
G1=ifft2(ifftshift(G));
g=real(exp(G1)); %real,复数的实部数值
% g=mat2gray(g); %mat2gray 实现图像矩阵的归一化操作。 所谓" 归一化" 就是使矩阵的每个元素的值都在0和1之间。该函数在数字图像处理中经常用到。
g_min=min(g(:));
g_cor=g-g_min;
g_cor=g_cor./max(g_cor(:));
%g_cor=histeq(g_cor); %直方图均衡化
figure;imshow(g_cor,[]);
% title('同态滤波图');
%直方图均衡化¯
figure;imshow(histeq(f))
figure;imshow(g_gama,[]);
a=[8,1,6;3,5,7;4,9,2]; b=[1,1,1;1,1,1;1,1,1];
c1=conv2(a,b); %conv2二维卷积运算函数
a(5,5)=0;b(5,5)=0;%扩展矩阵,因为ab 卷积结果是5*5
c2=ifft2(fft2(a).*fft2(b));
function :在MATLAB 中不是它的自带函数就可以完成所有功能,更多的时候是自己编写程序来实现我们要的功能,这时就要用到此命令,调用格式为:function ****( ) 括号外面为函数名称,括号中为函数中要用到的变量。
plot 命令:plot 命令是MATLAB 中用来绘制用向量表示法(在下一章中讲到) 表示的连续信号的波形。它的功能是将向量点用直线依次连接起来。调用格式:plot(k,f),其中k 和f 是向量。 ezplot 命令:ezplot 命令是用来绘制用符号运算表示法表示的连续信号的波形。调用格式:ez plot(f,[t1,t2]),其中[t1,t2]为一时间范围,f 为以t 为变量的函数。
title 命令:在绘图命令中,我们可以用此命令来对绘制出来的波形做一些注释,以便后期我们做图形处理。调用格式为:title(‘ …… ’) 中间部分可以任意对图形进行注释的文字。
xlabel 、ylabel 命令:这两个也是来对绘制出来的波形做标注用的,可以标注出两个坐标轴的未知数的意义,增加图形中的信息量。调用格式:xlabel(‘ …… ’),ylabel(‘ …… ’) 中间可以是对坐标轴做注释的文字或字母。
axis 命令:此命令可以来定义绘制波形中坐标的范围。调用格式为:axis([k1,k2,g1,g2]),其中k1,k2表示横坐标的范围,g1,g2表示纵坐标的范围。
syms 命令:在符号表示法中,可以用此命令来定义变量。调用格式为:syms t 意思是定义一个变量t 。
sym 命令:是符号表示法中的调用系统自带函数的命令。调用格式为:f=sym(‘……’) 中间为系统能识别的常用信号。
stem 命令:此命令专门用来绘制离散序列的波形。调用格式为:stem(k,f) 调用此命令可以绘制出离散序列的点状图。
subs 命令:此可以将连续信号中的时间变量t 用t -t0,at 等等来替换,从而可以完成信号在时域范围内的变换。调用格式为:subs(f,t,t-t0) 通过调用此函数可以把信号做移位,伸展等等变换。
fliplr 命令:此函数用来将向量以零时刻为基准点进行反折。调用格式为:f=fliplr(f1) 这样f 就是向量f1反折后的函数。
min 、max 命令:这两个命令可以用来比较算出一个向量中的最小值和最大值,或者比较得出两个值中的较小值。调用格式为:min(k),max(k),min(k1,k2),max(k1,k2)
length 命令:此函数可以计算出向量的长度。调用格式为:length(f)。
ones 函数:这是MATLAB 中一个常用的函数,它产生元素全部为1的矩阵,本文中用此函数来表示离散阶跃序列,或者定义连续的门信号,调用格式为:n =0:5
;ones(1,n)表示长度为整数n 的阶跃序列。k=1:p:8;ones(1,length(k))表示长度为k 的门信号。
subplot 命令:在MATLAB 绘图过程中,有时候为了便于观测图形的变化,需要在一幅波形显示窗口显示多个信号的波形,这时可以调用subplot 命令。调用格式为:subplot(n1,n2,k),如定义一个subplot(2,2,1),就可以在显示窗口中显示k=2×2个波形。
conv 函数:这个函数是用来计算两个序列的卷积和,调用此函数,可以将两个给定的序列计算出卷积和,调用格式为f =conv(f1,f2)。
fspecial 函数
建立预定义的滤波算子, 其语法格式为:
h = fspecial()
h = fspecial(type,)
其中type 指定算子的类型,para 指定相应的参数
gaussian 为高斯低通滤波'laplacian 为为高斯算子motion 运动模糊算子prewitt 用于边缘增强sobel 用于边缘提取
unsharp 对比度增强滤波器
图片像素的降低与恢复
I=imread('2.jpg' );%读取图片
g=rgb2gray(I);%彩色图像灰度化
figure;imshow(I);%显示原图片
figure;imshow(g);%显示灰度值图片
%降低图像分辨率
g_down_1=g(1:2:end,1:2:end);%512
g_down_2=g_down_1(1:2:end,1:2:end);%256
g_down_3=g_down_2(1:2:end,1:2:end);%128
g_down_4=g_down_3(1:2:end,1:2:end);%64
g_down_5=g_down_4(1:2:end,1:2:end);%32
figure;imshow(g_down_1);%显示
figure;imshow(g_down_2);%显示
figure;imshow(g_down_3);%显示
figure;imshow(g_down_4);%显示
figure;imshow(g_down_5);%显示
%把降低分辨率的图像恢复原大小
G_up_5_near=imresize(g_down_3,8,'nearest' ); %最近邻法放大
G_up_5_bil=imresize(g_down_5,32,'bilinear' ); %双线性插值法放大 G_up_5_bic=imresize(g_down_5,32,'bicubic' ); %三次内插法放大 figure;imshow(G_up_5_near);%显示
figure;imshow(G_up_5_bil);%显示
figure;imshow(G_up_5_bic);%显示
图像的四则运算和减法运算
clear;clc;%清空变量及工作区
I=imread('11.jpg' );%读取图片
I=rgb2gray(I);%彩色图像灰度化
I2=imread('22.jpg' );%读取图片
I2=rgb2gray(I2);%彩色图像灰度化
K=imlincomb(0.6,I,0.4,I2);%计算两幅图像的线性组合
K=histeq(K);%进行直方图均衡化
imshow(K);
figure;
I1=imread('1.jpg' );
I2=imread('2.jpg' );
I=I1-I2;%图像相减
imshow(I);
histeq (X )函数实现直方图均衡。因为此函数只能对灰度图像进
行直方图均衡。故应先将彩图转为灰度图像
位图显示
clear;clc;
I=imread('aerial.tif'
);
I=double(I);
G_7=bitand(I,128);%求灰度值第七位
I_7=im2uint8(mat2gray(G_7));%转换为无符号八位整型
figure;imshow(I_7);%显示第七位位图
G_6=bitand(I,64);%求灰度值第6位
I_6=im2uint8(mat2gray(G_6));%转换为无符号八位整型
figure;imshow(I_6);%显示第6位位图
G_5=bitand(I,32);
I_5=im2uint8(mat2gray(G_5));
figure;imshow(I_5);
G_4=bitand(I,16);
I_4=im2uint8(mat2gray(G_4));
figure;imshow(I_4);
G_3=bitand(I,8);
I_3=im2uint8(mat2gray(G_3));
figure;imshow(I_3);
G_2=bitand(I,4);
I_2=im2uint8(mat2gray(G_2));
figure;imshow(I_2);
G_1=bitand(I,2);
I_1=im2uint8(mat2gray(G_1));
figure;imshow(I_1);
G_0=bitand(I,1);
I_0=im2uint8(mat2gray(G_0));
figure;imshow(I_0);
I_restore=G_7+G_6+G_5+G_4+G_3+G_2+G_1+G_0;%读取重新储存的图片 figure;imshow(uint8(I_restore));%显示
骨骼图的显示
%读取图像
I=imread('Fig0343(a)(skeleton_orig).tif');
%显示a 图像
A=im2double(I);
subplot(2,4,1);
imshow(A);
title('(a)全身骨骼扫描图像');
%显示b 图像
subplot(2,4,2);
A=double(A);
w1=fspecial('laplacian',0);
B=imfilter(A,w1,'corr','replicate');
imshow(B); %得到拉普拉斯变换后的图像
title('(b)经过拉普拉斯操作后的结果');
%显示c 图像
subplot(2,4,3);
C=A+B; %得到A+B的结果
imshow(C);
title('(c)图a 加图b 得到的锐化图像');
%显示d 图像
subplot(2,4,4);
w1=fspecial('sobel'); %得到水平sobel 模板
w2=w1'; %转置得到竖直sobel 模板
G1=imfilter(A,w1); %水平sobel 梯度
G2=imfilter(A,w2); %竖直sobel 梯度
D=abs(G1)+abs(G2); %sobel梯度
imshow(D);
title('(d)图a 经sobel 梯度处理后的结果');
%显示e 图像
subplot(2,4,5);
e=fspecial('average',5);
E=imfilter(D,e,'corr','replicate');
imshow(E);
title('(e)使用5*5均值滤波器平滑后的sobel 图像');
%显示f 图像
subplot(2,4,6);
C=im2double(C);
E=im2double(E);
F=C.*E; imshow(F);
title('(f)图c 和图e 相乘形成的掩蔽图像');
%显示g 图像
subplot(2,4,7);
G=abs(A)+abs(F);
imshow(G);
title('(g)由图a 和图f 求和得到的锐化后的图像');
%显示h 图像
subplot(2,4,8);
imshow(imadjust(G,[],[],0.5));
title('(h)对图g 应用幂律变换得到的最终结果');
灰度直方图操作
clear;clc;
I=imread('moon.tif' );
figure;imshow(I);
figure;imhist(I); %显示灰度直方图
h=imhist(I,256); %长条图显示,宽度为1,
figure;bar(h);
h_scale=imhist(I,25);
x=linspace(0,255,25);%创建向量
figure;bar(x,h_scale); %长条图显示,宽度为25
I_equ=histeq(I,256); %直方图均衡化
figure;imhist(I_equ);
figure;imshow(I_equ);
figure;bar(imhist(I_equ));
图像锐化梯度算子的应用
clear;clc;
f=imread('building.tif' );
f=im2double(f);
w1=fspecial('sobel' ); %得到水平sobel 模板
w2=w1';%转置得到竖直sobel 模板
g1=imfilter(f,w1,'replicate' ); %横向梯度算子结果
g2=imfilter(f,w2,'replicate' ); %纵向梯度算子结果
g=abs(g1)+abs(g2);%sobel梯度
imshow(f);figure;
imshow(g1);figure;
imshow(g2);figure;
imshow(g);
图像锐化拉普拉斯算子的引用
clear;clc;
f=imread('moon.tif' );
w4=fspecial('laplacian' ,0);%生成拉普拉斯滤波器
w8=[1 1 1;1 -8 1;1 1 1];
f=im2double(f);
g4=f-imfilter(f,w4,'replicate' ); %g4=f-imfilter(f,w4,'symmetric');
g8=f-imfilter(f,w8,'replicate' ); %g8=f-imfilter(f,w8,'symmetric');
[A,B]=find(g4
g4(A(i,1),B(i,1))=0;%令这些元素为0
end
[C,D]=find(g4>1);%找出矩阵中大于一元素所在行和列, 并存在[c,d]中 for i=1:length(C) %从1到length (C )循环
g4(C(i,1),D(i,1))=1;%令这些元素为1
end
figure;imshow(f);
%g4=im2uint8(mat2gray(g4));
%g8=im2uint8(mat2gray(g8));
figure;imshow(imfilter(f,w4,'replicate' ))
figure;imshow(g4);
figure;imshow(imfilter(f,w8,'replicate' ))
figure;imshow(g8);
平滑空间滤波器
clear;clc;
I=imread('pattern.tif' );%读取图像
imshow(I);figure;%显示原图
h=fspecial('average' ,[14 14]);%产生均值滤波器模板
g=imfilter(I,h,'replicate' );%滤波
imshow(g);
%阈值分割
I=imread('galaxy.tif' );
h=fspecial('average' ,[15 15]);%产生均值滤波器模板
g=imfilter(I,h,'replicate' );%滤波
level = graythresh(g);%通过计算获得输入图像的阈值
BW = im2bw(g,level);%通过阈值变换法把灰度图像转换成二值图像 imshow(BW);
%中值滤波
I=imread('imnoise.tif' );
g=medfilt2(I,[3 3]);%窗口大小为3×3的中值滤波
%g=medfilt2(I,[3 3],'symmetric');
imshow(g);
%顺序滤波
A=imread('imnoise.tif' );
B=ordfilt2(A,15,true(7),'symmetric');%图像作顺序统计滤波 figure;imshow(A);figure;imshow(B)
图像增强的三种方法
% inverse transformation
I=imread('breast.tif' );
g=im2uint8(mat2gray(I));%图像数据类型转换为无符号八位整型。 g_inver=255-g;%图像反转
figure;imshow(I);
figure;imshow(g_inver);
%log transform
I=imread('fourier.tif' );
g=im2uint8(mat2gray(log(1+double(I))));%对图像进行对数变换 figure;imshow(I);
figure;imshow(g);
% power transform moon.tifaerial.tif
I=imread('aerial.tif' );
g=im2uint8(mat2gray(double(I).^(2)));%对图像进行幂律变换 %g=255-I;
figure;
imshow(I);
figure;
imshow(g);
理想低通滤波器
f=imread('dynamic_range.tif'); 索引形式读入
imshow(f);显示图像
title('Ô-ͼ');
f=im2double(f);按比例的将其缩放至double 类型
F=fftshift(fft2(f));正半轴部分和负半轴部分的图像分别关于各自的中心对称 M=size(F,1);表示维数的第一项
N=size(F,2);表示维数的第二项
u=1:M;u=[1,2,3,4,…M]
v=1:N;v=[1,2,3,4,…N]
[V,U]=meshgrid(v,u);产生两个矩阵,第一个矩阵是由v 作为行向量组成,第二个向量由u 作为列向量组成
D=sqrt((U-(floor(M/2)+1)).^2+(V-(floor(N/2)+1)).^2); 计算公式 H=zeros(M,N);产生一个mxn 的全零矩阵
H(D
G=F.*H;进行卷积
G_inv=ifft2(ifftshift(G));进行图像二维离散快速傅里叶变换
figure; 建立图形
imshow(real(G_inv));显示图像
title('Â˲¨ºó');
alpha=sum(abs(F(D
巴特沃斯低通滤波器
f=imread('pattern.tif' ); 索引形式读入
imshow(f);显示图像
%title('Ô-ͼ');
f=im2double(f);按比例的将其缩放至double 类型
F=fftshift(fft2(f));正半轴部分和负半轴部分的图像分别关于各自的中心对称 M=size(F,1);表示维数的第一项
N=size(F,2);表示维数的第二项
u=1:M;u=[1,2,3,4,…M]
v=1:N;v=[1,2,3,4,…N]
[V,U]=meshgrid(v,u);产生两个矩阵,第一个矩阵是由v 作为行向量组成,第二个向量由u 作为列向量组成
D=sqrt((U-(floor(M/2)+1)).^2+(V-(floor(N/2)+1)).^2); 计算公式?
H=zeros(M,N);产生一个mxn 的全零矩阵
D0=235;n=2; %2阶
H=1./(1+(D./D0).^(2*n));公式?
G=F.*H; 进行卷积? G_inv=ifft2(ifftshift(G));进行图像二维离散快速傅里叶变换 figure; 建立图形
imshow(real(G_inv));显示图像
%title('Â˲¨ºó')
高斯低通滤波器
clear;clc;
f=imread('broken-text.tif' ); 索引形式读入
imshow(f);显示图像
%title('Ô-ͼ');
f=im2double(f);按比例的将其缩放至double 类型
F=fftshift(fft2(f));正半轴部分和负半轴部分的图像分别关于各自的中心对称 M=size(F,1);表示维数的第一项
N=size(F,2);表示维数的第二项
u=1:M;u=[1,2,3,4,…M]
v=1:N;v=[1,2,3,4,…N]
[V,U]=meshgrid(v,u);产生两个矩阵,第一个矩阵是由v 作为行向量组成,第二个向量由u 作为列向量组成
D=sqrt((U-(floor(M/2)+1)).^2+(V-(floor(N/2)+1)).^2);计算公式?
H=zeros(M,N);产生一个mxn 的全零矩阵
D0=80;
H=exp(-D.^2./(2*D0.^2));公式
G=F.*H;
G_inv=ifft2(ifftshift(G));进行图像二维离散快速傅里叶变换 figure;imshow(real(G_inv));
%title('Â˲¨ºó')
高斯高通滤波器(同上)
clear;clc;
f=imread('chest_xray.tif');
imshow(f);
%title('Ô-ͼ');
f=im2double(f);
F=fftshift(fft2(f));
M=size(F,1);N=size(F,2);
u=1:M;
v=1:N;
[V,U]=meshgrid(v,u);
D=sqrt((U-(floor(M/2)+1)).^2+(V-(floor(N/2)+1)).^2); L=zeros(M,N);
D0=2; 截止频率=2
L=exp(-D.^2./(2*D0.^2));
H=1-L;低通变成高通
G=F.*H;
G_inv=ifft2(ifftshift(G));
figure;imshow(real(G_inv),[]);
%title('Â˲¨ºó')
巴特沃斯高通滤波器(同上)
f=imread('thumb_print.tif');
imshow(f);
%title('Ô-ͼ');
f=im2double(f);
F=fftshift(fft2(f));
M=size(F,1);N=size(F,2);
u=1:M;
v=1:N;
[V,U]=meshgrid(v,u);
D=sqrt((U-(floor(M/2)+1)).^2+(V-(floor(N/2)+1)).^2); L=zeros(M,N);
D0=25;n=4;截止频率=25 ,设为4阶
L=1./(1+(D./D0).^(2*n));
H=1-L; 低通变成高通
G=F.*H;
G_inv=real(ifft2(ifftshift(G)));
figure;imshow(G_inv);
%title('Â˲¨ºó')
I_thresh=G_inv; %指纹处理
[A,B]=find(I_thresh
[C,D]=find(I_thresh>=0);找出矩阵中I_thresh>=0元素所在行和列, 并存在C,D 中
for i=1:length(A)取i 分别为在1到length(A)的每一个数
I_thresh(A(i,1),B(i,1))=0;令这些元素为0
end
for i=1:length(C)(同上)
I_thresh(C(i,1),D(i,1))=1;令这些元素为1
end
figure;imshow(I_thresh);
clear;clc;
I=zeros(512,512);产生一个512x512的全零矩阵
I(226:286,240:266)=1;
imshow(I);
F=fft2(I);
F_no_shift=abs(F);
F_shift=abs(fftshift(F));
% G_no_shift=log(1+F_no_shift);
G_shift=log(1+F_shift);
%figure;imshow(F_no_shift,[]);
% figure;imshow(G_no_shift,[]);
figure;imshow(F_shift,[]);
figure;imshow(G_shift,[]);
%
% %图像旋转
I2=imrotate(I,45,'bilinear' , 'crop' );
figure;imshow(I2);
F2=fft2(I2);
F2_shift=abs(fftshift(F2));
G2_shift=log(1+F2_shift);
figure;imshow(F2_shift,[]);
figure;imshow(G2_shift,[]);
振铃效应
f=zeros(512,512);
f(128,128)=255;
f(128,384)=255;
f(384,128)=255;
f(384,384)=255;
f(256,256)=255;
figure;imshow(f);
f=im2double(f);
F=fftshift(fft2(f));
M=size(F,1);N=size(F,2);
u=1:M;
v=1:N;
[V,U]=meshgrid(v,u);
D=sqrt((U-(floor(M/2)+1)).^2+(V-(floor(N/2)+1)).^2); H=zeros(M,N);
H(D
G=F.*H;
G_inv=ifft2(ifftshift(G));
figure;imshow(real(G_inv),[]);
拉普拉斯滤波器
clear;clc;
f=imread('moon.tif' );
imshow(f);
%title('moon');
f=im2double(f);
F=fftshift(fft2(f));
M=size(F,1);N=size(F,2);
u=1:M;
v=1:N;
[V,U]=meshgrid(v,u);
H=zeros(M,N);
H=-4*pi^2*((U-(floor(M/2)+1)).^2+(V-(floor(N/2)+1)).^2); G=F.*H;
G1=real(ifft2(ifftshift(G)));
figure;imshow(G1,[]);%线性映射0-255
G2=G1-min(G1(:));
G2=G2/max(G2(:));
G3=im2uint8(G2);
%figure;imshow(G3)%G3ÏßÐÔÓ³Éä µÈͬÓÚimshow£¨G1,[]); %title('±ê¶¨ºóµÄͼÏñ');
G2=f-G2;
figure;imshow(G2,[]);
%title('À-ÆÕÀ-˹Ëã×ÓÔöǿͼÏñ');
%空间拉普拉斯算子
w4=fspecial('laplacian' ,0);
sp=imfilter(f,w4);
g4=f-sp;
figure;imshow(sp,[]);
figure;imshow(g4,[]);
第六章
e dge_function clear;clc; %清空命令窗口的所有输入和输出 I=imread('1.jpg' ); %读入wirebond_mask.tif图像
BW_sobel=edge(I,'sobel' ); %图像边缘提取
imshow(BW_sobel); %显示图像
BW_prewitt=edge(I,'prewitt' ); %prewitt图像边缘提取
figure;imshow(BW_prewitt); %产生新的窗口,显示图像 BW_log=edge(I,'log' ); %用log 算子进行边缘检测
figure;imshow(BW_log); %产生新的窗口,显示图像
[BW_cannyth]=edge(I,'canny' ); %canny 算子检测法检测图像边缘 figure;imshow(BW_canny); %产生新的窗口,显示图像
hough_trans
clear;clc; %清空命令窗口的所有输入输出
I=zeros(101,101); %zeros 就是生成一个全0的矩阵
I(1,1)=1;I(101,1)=1; %第1行第1列,元素为1
I(1,101)=1;I(101,101)=1;
I(51,51)=1;
[H,theta,rho]=hough(I);
subplot(1,2,1);imshow(I);
subplot(1,2,2);
imshow(imadjust(mat2gray(H)),'XData' ,theta, 'YData' ,rho, ... 'InitialMagnification' , 'fit' );
line_detection
f=imread('1.jpg' );
imshow(f);
w=[1 1 1;1 -8 1;1 1 1 ];
g=imfilter(f,w,'replicate' );
%imfilter根据指定操作进行多维滤波
figure;imshow(g,[])
figure,imshow(abs(g),[]);
g(g
figure;imshow(g,[]);
T=0.5*max(g(:));
m=g>=T;
figure;imshow(m,[]);
line_direction_detection
f=imread('wirebond_mask.tif');
f=im2double(f);
imshow(f);
w_h=[-1 -1 -1;2 2 2;-1 -1 -1];
w_v=w_h';
w_45=[-1 -1 2;-1 2 -1;2 -1 -1];
w_n45=[2 -1 -1;-1 2 -1;-1 -1 2];
g_h=imfilter(f,w_h,'replicate' );
g_v=imfilter(f,w_v,'replicate' );
g_45=imfilter(f,w_45,'replicate' );
g_n45=imfilter(f,w_n45,'replicate' );
% figure;imshow(g_h,[])
% figure;imshow(g_v,[])
% figure;imshow(g_45,[])
% figure;imshow(g_n45,[])
T_h=0.5*max(g_h(:));
m_h=g_h>=T_h;
figure;imshow(m_h,[]);
T_v=0.5*max(g_v(:));
m_v=g_v>=T_v;
figure;imshow(m_v,[]);
T_45=0.5*max(g_45(:));
m_45=g_45>=T_45;
figure;imshow(m_45,[]);
T_n45=0.5*max(g_n45(:));
m_n45=g_n45>=T_n45;
figure;imshow(m_n45,[]);
smooth_line_detection
clear;clc;
f=imread('building_original.tif');
f=im2double(f);
imshow(f);
h=fspecial('average' ,[5 5]);
f=imfilter(f,h,'replicate' );
wh=fspecial('sobel' );
wv=wh';
gh=abs(imfilter(f,wh,'replicate' ));
gv=abs(imfilter(f,wv,'replicate' ));
figure;imshow(gh);
figure;imshow(gv);
g_all=gh+gv;
Th=0.5*max(gh(:));
mh=gh>=Th;
figure,imshow(mh);
Tv=0.5*max(gv(:));
mv=gv>=Tv;
figure,imshow(mv);
T_all=0.3*max(g_all(:));
m_all=g_all>=T_all;
figure,imshow(m_all);
spot_detection
f=imread('turbine_blade_black_dot.tif');
f=im2double(f);
imshow(f);
w=[1 1 1;1 -8 1;1 1 1 ];
g=imfilter(f,w,'replicate' );
figure;imshow(g,[])
T=0.9*max(g(:));
m=g>=T;
figure,imshow(m);
threshold_seg
I=imread('polymersomes.tif' );
T=graythresh(I);
g=I>=T*255;
figure,imshow(g);
同态滤波器
clear;clc
f=imread('dynamic_range.tif');
figure;imshow(f);
f=im2double(f);
F=fftshift(fft2(log(f+eps)));
M=size(F,1);N=size(F,2);
u=1:M;
v=1:N;
[V,U]=meshgrid(v,u); %meshgrid用于生成网格采样点的函数。 D=sqrt((U-(floor(M/2)+1)).^2+(V-(floor(N/2)+1)).^2); H=zeros(M,N);
D0=2;c=1.5;%1.5;
H=1.5*(1-exp(-c*D.^2./D0.^2))+0.5;
G=F.*H;
G1=ifft2(ifftshift(G));
g=real(exp(G1)); %real,复数的实部数值
% g=mat2gray(g); %mat2gray 实现图像矩阵的归一化操作。 所谓" 归一化" 就是使矩阵的每个元素的值都在0和1之间。该函数在数字图像处理中经常用到。
g_min=min(g(:));
g_cor=g-g_min;
g_cor=g_cor./max(g_cor(:));
%g_cor=histeq(g_cor); %直方图均衡化
figure;imshow(g_cor,[]);
% title('同态滤波图');
%直方图均衡化¯
figure;imshow(histeq(f))
figure;imshow(g_gama,[]);
a=[8,1,6;3,5,7;4,9,2]; b=[1,1,1;1,1,1;1,1,1];
c1=conv2(a,b); %conv2二维卷积运算函数
a(5,5)=0;b(5,5)=0;%扩展矩阵,因为ab 卷积结果是5*5
c2=ifft2(fft2(a).*fft2(b));
function :在MATLAB 中不是它的自带函数就可以完成所有功能,更多的时候是自己编写程序来实现我们要的功能,这时就要用到此命令,调用格式为:function ****( ) 括号外面为函数名称,括号中为函数中要用到的变量。
plot 命令:plot 命令是MATLAB 中用来绘制用向量表示法(在下一章中讲到) 表示的连续信号的波形。它的功能是将向量点用直线依次连接起来。调用格式:plot(k,f),其中k 和f 是向量。 ezplot 命令:ezplot 命令是用来绘制用符号运算表示法表示的连续信号的波形。调用格式:ez plot(f,[t1,t2]),其中[t1,t2]为一时间范围,f 为以t 为变量的函数。
title 命令:在绘图命令中,我们可以用此命令来对绘制出来的波形做一些注释,以便后期我们做图形处理。调用格式为:title(‘ …… ’) 中间部分可以任意对图形进行注释的文字。
xlabel 、ylabel 命令:这两个也是来对绘制出来的波形做标注用的,可以标注出两个坐标轴的未知数的意义,增加图形中的信息量。调用格式:xlabel(‘ …… ’),ylabel(‘ …… ’) 中间可以是对坐标轴做注释的文字或字母。
axis 命令:此命令可以来定义绘制波形中坐标的范围。调用格式为:axis([k1,k2,g1,g2]),其中k1,k2表示横坐标的范围,g1,g2表示纵坐标的范围。
syms 命令:在符号表示法中,可以用此命令来定义变量。调用格式为:syms t 意思是定义一个变量t 。
sym 命令:是符号表示法中的调用系统自带函数的命令。调用格式为:f=sym(‘……’) 中间为系统能识别的常用信号。
stem 命令:此命令专门用来绘制离散序列的波形。调用格式为:stem(k,f) 调用此命令可以绘制出离散序列的点状图。
subs 命令:此可以将连续信号中的时间变量t 用t -t0,at 等等来替换,从而可以完成信号在时域范围内的变换。调用格式为:subs(f,t,t-t0) 通过调用此函数可以把信号做移位,伸展等等变换。
fliplr 命令:此函数用来将向量以零时刻为基准点进行反折。调用格式为:f=fliplr(f1) 这样f 就是向量f1反折后的函数。
min 、max 命令:这两个命令可以用来比较算出一个向量中的最小值和最大值,或者比较得出两个值中的较小值。调用格式为:min(k),max(k),min(k1,k2),max(k1,k2)
length 命令:此函数可以计算出向量的长度。调用格式为:length(f)。
ones 函数:这是MATLAB 中一个常用的函数,它产生元素全部为1的矩阵,本文中用此函数来表示离散阶跃序列,或者定义连续的门信号,调用格式为:n =0:5
;ones(1,n)表示长度为整数n 的阶跃序列。k=1:p:8;ones(1,length(k))表示长度为k 的门信号。
subplot 命令:在MATLAB 绘图过程中,有时候为了便于观测图形的变化,需要在一幅波形显示窗口显示多个信号的波形,这时可以调用subplot 命令。调用格式为:subplot(n1,n2,k),如定义一个subplot(2,2,1),就可以在显示窗口中显示k=2×2个波形。
conv 函数:这个函数是用来计算两个序列的卷积和,调用此函数,可以将两个给定的序列计算出卷积和,调用格式为f =conv(f1,f2)。
fspecial 函数
建立预定义的滤波算子, 其语法格式为:
h = fspecial()
h = fspecial(type,)
其中type 指定算子的类型,para 指定相应的参数
gaussian 为高斯低通滤波'laplacian 为为高斯算子motion 运动模糊算子prewitt 用于边缘增强sobel 用于边缘提取
unsharp 对比度增强滤波器