matlab图像处理命令

ones 产生矩阵元素全为1的矩阵
A=ones(n) 产生n′n的1
A=ones(m,n) 产生m′n的1

zeros 产生矩阵元素全为0的矩阵
A=zeros(n) 产生n′n的0
A=zeros(m,n) 产生m′n的0

eye
产生单位矩阵,即主对角线
上的元素为1,其他元素全为0
A=eye(n) 产生n′n的单位矩阵
A=eye (m,n) 产生m′n的单位矩阵

函数名函数用途基本调用格式
Diag 把向量转化为对角矩阵或者
得到矩阵的对角元素
X=diag(v,k) 把向量v转换为一个对角矩阵。
X=diag(v) 把向量v转换为一个主对角矩阵。
v=diag(X,k) 得到矩阵X的对角元素
v=diag(X) 得到矩阵X的主对角元素
magic 产生魔方矩阵,即每行、每
列之和相等的矩阵magic(n) 产生n′n的魔方矩阵
rand 产生0~1均匀分布的随机数Y = rand(n) 产生n′n的0-1均匀分布的随机数
Y = rand(m,n) 产生m′n的0-1均匀分布的随机数
randn 产生均值为0,方差为1 高斯
分布的随机数
Y = randn(n) 产生n′n的标准高斯分布的随机数
Y = randn(m,n) 产生m′n的标准高斯分布的随机数
randperm 产生整数1~n的随机排列p = randperm(n) 产生整数1到n的随机排列
compan 产生多项式的伴随矩阵A = compan(u) 产生多项式u的伴随矩阵

如果想删除矩阵的第2 行,则可以用如下语句:
A(2,:)=[]

norm 求矩阵或者向量的范数
normest 估计矩阵的2 阶范数
rank 矩阵的秩,即求对角元素的和
det 矩阵的行列式
trace 矩阵的迹
null 0 空间
orth 正交化空间
rref 约化行阶梯形式
subspace 求两个矩阵空间的角度

MATLAB函数imadjust简介
J = imadjust(I,[low_in; high_in],[low_out; high_out],gamma)
将图像 I 中的亮度值映射到 J 中的新值,其中 gamma指定描述值I和值J关系的曲线形状。如果gamma小于1,此映射偏重更高数值(明亮)输出,如果gamma大于1,此映射偏重更低数值(灰暗)输出,如果省略此参数,默认为(线性映射)。 《Simulink与信号处理》

取反片
f=imread('e:matlab2012\myfiles\3.jpg')
q1=imadjust(f,[0,1],[1,0])
imwrite(q1,'e:matlab2012\myfiles\14.jpg','quality',100)
imshow(q1)
或者直接使用:
? g=imcomplement(f)
imwrite(g,'e:matlab2012\myfiles\14.jpg','quality',100)
imshow(g)
对数和对比度拉伸变换:
g=log(1+double(f))
gs=im2uint8(matgray(g))
imwrite(gs,'e:matlab2012\myfiles\15.jpg','quality',100)
imshow(gs)

图像旋转
subplot(2,2,1)
imshow(I);
subplot(2,2,2)
imshow(imrotate(I,30,'nearest','crop')); %crop 就是剪切
subplot(2,2,3)
imshow(imrotate(I,30,'nearest','loose'));
>> subplot(2,2,4)
计算绘制图像直方图
imhist(f)
imshow(imrotate(I,90,'nearest','loose'));

将图转为灰度图并绘出灰度直方图
I=imread('e:matlab2012\myfiles\3.jpg');
>> f= rgb2gray(I);%转换成灰度图
>> subplot(2,2,1),imshow(f);
title('原始灰度图');
subplot(2,2,2),imhist(f);


title('原始灰度直方图')

将一幅图转化为灰度图并且进行灰度拉伸,绘出前后灰度直方图
I=imread('e:matlab2012\myfiles\3.jpg');
>> f= rgb2gray(I);%转换成灰度图
>> subplot(2,2,1),imshow(f);
title('原始灰度图');
subplot(2,2,2),imhist(f);
title('原始灰度直方图')
>> K=imadjust(f);
K=imadjust(f,[0 0.4],[0 1]);
subplot(2,2,3),imshow(K);
title('灰度拉伸效果图');
subplot(2,2,4),imhist(K);
title('灰度拉伸后图像直方图');

图像的灰度直方图绘制imhist
I=imread(‘pout.tif’);%读取图像pout。tif
figure;%打开一个新窗口
imshow(I);title(‘source’);%显示原始图像
figure;%打开一个新窗口
直方图imhist(I);title(‘Gragh’);%显示

多个窗口显示
subplot(1,2,1);
imshow(I);

多帧图像的显示
load mri%载入Matlab,自带的核磁共振图像
imshow(D(:,:,7),map);%显示多幅中的一幅
同一窗口显示
figure,montage(D,map);
figure
mov=immovie(D,map);
colormap(map);%设定颜色表
movie(mov);%播放电影

多幅图像的显示
I=imread(‘pout。tif’);%读取图像
%在不同窗口显示
figure;%创建一个新的窗口
imshow(I);
figure;
imshow(I,[]);
%在相同窗口显示
figure;
subplot(1,2,1)
imshow(I);
subplot(1,2,2)
imshow(I,[])
程序中figure用来创建一个新的显示窗口,以避免新的图像的显示覆盖原图像,而subplot(m,n,p)函数的含义是,打开一个有m行n列图像位置的窗口,并将焦点位于第p个位置上。
在多幅图像索引时图像颜色种类可能大于256种,通常先使用ind2rgb(I)将图像转化为RGB模式。也可以使用subimag(I,map),这个函数在显示图像之前会自动将其转换为RGB格式。

图像的缩放
有时需要对图像进行缩放,这时就可以用zoom on打开缩放功能,利用zoomoff可以关闭缩放功能。

像素值查看工具
使用imshow函数显示一幅图像后,可以通过输入pixval命令在最后显示的窗口中打开一个TOOLTIP风格的提示栏,随光标的移动显示指针位置处的像素值。

最基本的图像分析工具———灰度直方图
灰度直方图描述了一幅图像的灰度级统计信息,主要用于图像分割和灰度图像变换等处理过程中。灰度直方图是一个二维图,横坐标为各像素点的灰度级别,纵坐标表示具有各个灰度级别的像素在图像中出现的次数或概率。
imhist(I,n) n为指定灰度级数目,如果指定参数n,则会将所有的灰度级均分布在n个小区间内,而不是将所有的灰度技术全部展开。
[counts,x]=imhist(...) counts为直方图数据量,counts[i]表示第i个灰度区间中的像素数目。x是保存了对应的灰度小区间的向量。
也可以使用stem(x

,counts)来手动绘图

归一化直方图
在imhist函数返回值中,counts保存了落入每个区间的像素的个数,通过counts与图像中像素总数的商可以得到归一化的直方图。
例如绘制有32个灰度区间的归一化直方图的matlab程序如下:
I=imread(‘pout.tif’);%读入原始图像
figure;%打开新窗口
[M,N]=size(I)%计算图像大小
[counts,x]=imhist(I,32)%计算有32个小区间的灰度直方图
counts=counts/M/N;%计算归一化灰度直方图各区间的值
stem(x,counts);绘制归一化直方图

灰度的线性变换
Db=f(Da)=faDa+fb,Da表示输入图像的灰度,Db表示输出图像的灰度
fa>1时,输出图像的对比度将变大,当fa<1时,输出图像的对比度将减小,当fa=1且fb!=0时,操作仅使所有像素的灰度值上移或者下移,效果是使整个图像更暗或者更亮;如果fa<0,暗区域将变亮,亮区域将变暗,这种线性改变可能由于线性改变亮度使像素亮度饱和,丢失部分细节
特殊情况下,当fa=1,fb=0时,输出图像和输入图像相同;当fa=-1,fb=255时,图像灰度正好反转,灰度反转适合增强暗色图像中亮度较大的细节部分,这是由人的视觉特性决定的。


I=imread(’coins.png);%读入原图像
I=im2double(I);%转换数据类型为double
[M,N]=size(I);%计算图像面积
figure(1);%打开新窗口
imshow(I);%显示原图像
title(‘原图像');

figure(2);%打开新窗口
[H,x]=imhist(I,64);%计算64个小区间的灰度直方图
stem(x,(H/M/N),’.’);
title(‘原始图像');
%增加对比度
Fa=2;Fb=-55;
O=Fa.*I+Fb/255

figure(3)
subplot(2,2,1)
imshow(O)
title('Fa=2 Fb=-55 增加对比度');

figure(4)
subplot(2,2,1);
[H,X]=imhist(O,64)ub
stem(x,(H/M/N),'.');
title('Fa=2 Fb=-55 增加对比度')

%减小对比度
Fa=0.5;Fb=-55;
O=Fa.*I+Fb/255

figure(3)
subplot(2,2,2)
imshow(O)
title('Fa=0.5 Fb=-55 增加对比度');

figure(4)
subplot(2,2,2);
[H,X]=imhist(O,64)
stem(x,(H/M/N),'.');
title('Fa=0.5 Fb=-55 增加对比度')

%增加对比度
Fa=2;Fb=-55;
O=Fa.*I+Fb/255

figure(3)
subplot(2,2,1)
imshow(O)
title('Fa=2 Fb=-55 增加对比度');

%线性增加亮度
Fa=1;Fb=55;
O=Fa.*I+Fb/255
figure(3)
subplot(2,2,3);
imshow(O);
title('线性平移增加亮度');
figure(4)
subplot(2,2,3);
[H,X]=imhist(O,64)
stem(x,(H/M/N),'.');
title('Fa=1 Fb=-55 增加
对比度')

%反相显示
Fa=-1;Fb=255
O=Fa.*I+Fb/255;
figure(3)
subplot(2,2,4);
imshow(O);
title('Fa=-1 Fb=255反相显示');

figure(4)
subplot(2,2,4);
[H,X]=imhist(O,64);
stem(x,(H/M/N),'.');
title('Fa=-1 Fb=255 反相显示')

灰度对数变换
对数变换的一般表达式为t=clog(1+s)
其中c为尺度比例常数,s为源灰度值,t为变换后的目标灰度值
自变量低值时,曲线斜率很高

,自变量高值时,曲线斜率变小,由此可知,这种变换可以增强一幅图像中的较暗部分的细节
I=imread('e:\matlab2012\myfiles\ex.jpg');%读取图像
f=fft2(im2double(I));%计算频谱
f=fftshift(f);%fftshift的作用正是让正半轴部分和负半轴部分的图像分别关于各自的中心对称。因为直接用fft得出的数据与频率不是对应的,fftshift可以纠正过来
f=abs(f);%求绝对值
t=log(f+1);%对数变换

subplot(1,2,1);
imshow(f,[]);
title('未经变换的频谱');

subplot(1,2,2);
imshow(t,[]);
title('对数变换后');

伽马变换
伽马变换的一般表达式为:y=(x+esp)^r 其中x,y的取值范围均为[0,1]。esp为补偿系数,r则为伽马系数。
与对数变换不同,伽马变换可以根据r的不同取值选择性的增强低灰度或者高灰度区域的对比度,r值决定了输入图像和输出图像之间的灰度映射方式,
r>1时,图像的高灰度区域对比度得到增强
r<1时,图像的低灰度区域对比度得到增强
r=1时,这一灰度变换是线性的,即不改变原图像
J=imadjust(I,[low_in high_in],[low_out high_out],gamma) 当为空[]时,相当于默认值[0 1]若high_out比low_out小时输出图像的亮度将会反转,gamma定义了映射曲线的形状,[low_in high_in],[low_out high_out]确定了原灰度到目标灰度的范围的映射,范围以外的将会被裁剪掉

灰度阀值变换
灰度阀值变换可以将一幅灰度图像变为黑白的二值图像。用户指定一个分界线的灰度值,如果一幅图像的灰度值大于该值则设置为255,否则则设置为0
im2bw和graythresh
BW=im2bw(I,level),level若为0.5,则对应阀值为128,BW为二值化后的图像
函数graythresh可以自行设置所用的最优阀值。调用形式如下:thresh=graythresh(I)

分段线性变换
分段线性变换能够增加图像各部分的反差,突出感兴趣部分,抑制不感兴趣的部分。

??????

直方图均衡化
将近似相同的像素点的输出图像,更加均衡的输出[j,t]=histeq(I)
I=imread('e:\matlab2012\myfiles\1.jpg');
I1=2*I-55/255;%先增大图像对比度
imshow(I1);
figure(1);
imshow(histeq(I1));%显示直方图均衡化后的图像
figure(2);
imhist(histeq(I1));%显示直方图均衡化后的图像的灰度直方图

直方图规定化(匹配)
直方图均衡化是自动确定灰度变换函数,从而得到均匀的直方图输出图像。而直方图规定化是认为规定
I=imread('e:\matlab2012\myfiles\1.jpg');%等待匹配图像
I1=imread('e:\matlab2012\myfiles\ex.jpg');%匹配目标图像

[hgram1,x]=imhist(I1);%计算直方图

J1=histeq(I,hgram1);%执行直方图均衡化

subplot(3,2,1);
imshow(I);
title('原始图像');

subplot(3,2,2)
imhist(I);
title('原始图像直方图');

subplot(3,2,3);
imshow(J1);
title('均衡过的图像');

subplot(3,2,4)
imhist(J1);
title

('均衡过的图像直方图');

subplot(3,2,5);
imshow(I1);
title('目标匹配图像');

subplot(3,2,6)
imhist(I1);
title('目标匹配图像直方图');

图像的几何变换
图像的几何变换又称为图像空间变换,它将一幅图像中的坐标位置映射到另一幅图像的新坐标位置,学习几何变换的关键就是确定这种映射关系。
x1=s(x0,y0) y1=t(x0,y0) s和t均为坐标变换函数


图像的平移

A=imread('e:\matlab2012\myfiles\1.jpg');%读入图像
%strel用来创建形态学结构元素
%translate(SE,[y,x]) 在原结构元素SE上进行y和x方向的偏移
%参数[80,50]可以修改,修改后平移距离对应改变
se=translate(strel(1),[80,50]);
%imdilate形态学膨胀
B=imdilate(A,se);
figure;
subplot(1,2,1);
subimage(A)
title('原图像');
subplot(1,2,2);
subimage(B);
title('图像上移');

图像镜像
图像镜像又分为水平镜像和竖直镜像
imtransform函数用于完成一般的二维空间变换
B=imtransform(A,TFORM,method)
空间变换结构TFORM指定了具体的变换类型
可选参数method用于为imtransform函数选择插值方法
‘bicubic’ 双三次插值
‘bilincar'双线性插值
‘nearest’最近邻插值

图像镜像变换公式:
[x1,y1,1]=[x0,y0,1][-1 0 0; =[width-x0,y0,1]
0 1 0;
width 0 1;]

[x1,y1,1]=[x0,y0,1][1 0 0; =[x0,Heigth-y0,1]
0 -1 0;
0 Height 1;]


A=imread('e:\matlab2012\myfiles\1.jpg');
[height,width,dim]=size(A);
tform=maketform('affine',[-1 0 0;0 1 0;width 0 1]);%maketform函数和cp2tform函数创建TFORM结构,affine为二维或多维仿射变换,包括平移、旋转、比例、拉伸、和错切等
%定义水平镜像变换矩阵
B=imtransform(A,tform,'nearest');
tform2=maketform('affine',[1 0 0; 0 -1 0;0 height 1]);
%定义竖直镜像变换矩阵
C=imtransform(A,tform2,'nearest');
subplot(1,3,1)
imshow(A);
title('原图像');
subplot(1,3,2)
imshow(B)
title('水平镜像');
subplot(1,3,3)
imshow(C);
title('竖直镜像');

图像转置
将图像像素的x,y坐标互换
[x1,y1,1]=[x0,y0,1][0 1 0; =[y0,x0,1]
1 0 0;
0 0 1;]

A=imread('e:\matlab2012\myfiles\1.jpg');
tform=maketform('affine',[0 1 0;1 0 0;0 0 1]);
B=imtransform(A,tform,'nearest');
subplot(1,2,1),
imshow(A);
title('原图像');
subplot(1,2,2),
imshow(B);
title('图像转置');

图像缩放
图像缩放可以使用imtransform函数
B=imresize(A,Scale,method);
参数A为要进行的统一缩放比例
Scale为统一缩放比例
可选参数method用于为imresize指定插值方法,其合法取值同imtransform函数,但默认为最临近插值。

A=imread('e:\matlab2012\myfiles\1.jpg');
B=imresize(A,1.2,'nearest');
%图像扩大1.2倍
figure
imshow(A);
title('原始图像'

);
figure
imshow(B);
title('图像缩放');

图像旋转
旋转一般是指将图像围绕一指定点旋转一定角度。
可以通过设置适当的变换结构TFORM,从而调用imtransform来实现以任意点为中心的图像旋转。此外,还可使用imrotate
B=imrotate(A,angle,method,‘crop’);
A为要旋转的图像
angle为旋转角度若为正值,则imrotate函数按逆时针方向旋转图像,可选参数method为imroate函数指定插值方法。
‘crop’选项会裁剪旋转后增大的图像,使得到的图像和原图大小一致。

插值算法
向前映射法,其原理是将输入图像的灰度逐个像素地转移到输出图像中。前面的平移、镜像等操作就是采用这种方法。
向后映射法,是向前映射变换的逆操作,即输出像素逐个映射回输入图像中。如果一个输出像素映射到的不是输入图像采样栅格的整数坐标像素点,这就要对灰度值进行推断。

最近邻插值:使用距离最近的像素点的灰度值
双线性插值:输出像素的值为输入图像中距离它最近的2*2领域内采样点像素灰度值的加权平均。
高阶插值:双线性插值的平滑作用会使图像的细节退化,而其斜率的不连续性则会导致变换产生不希望的结果。这些可以用高阶插值弥补,输出像素的值为输入图像中距离它最近的4*4领域内采样点像素值的加权平均。

人脸图像配准
将基准点定位在统一位置
f=imread('e:\matlab2012\myfiles\21.jpg');
fc=imread('e:\matlab2012\myfiles\26.jpg');
figure
subplot(1,2,1)
imshow(f);
subplot(1,2,2)
imshow(fc);
cpselect(f,fc);
%cpselect(Irgb(:,:,1),fc);%只传递输入图像的红色分量图
input_points;
base_points;%仿射变换模型
tform=cp2tform(input_points,base_points,'affine');%linear conformal(两对基准至少)输入图像的图像形状没有发生改变,只是经过平移,旋转,变换后为直线仍是平行affine图像成为错切效果变换后平行线仍为平行线,projective变换后仍为直线当场景变为倾斜时使用这种变换。polynomial当图像发生弯曲时使用(6,10,15对)piecewise linear图像呈现分段变形(4对)lwm当图像中的变形具有局部化特点,并且分段线性化条件不够充分。
fout=imtransform(f,tform)%调用imtransform函数进行变换
figure
subplot(1,2,1)
imshow(fout);
subplot(1,2,2)
imshow(fc);

空间域图像增强
图像增强分为:一类是空间域增强,一类是频率域增强
空间域滤波
空间域滤波和领域处理
对图像中的每一点(x,y)为中心的临域内的像素进行运算,将运算结果作为(x,y)点的新响应,上述过程就称为临域处理或空间域滤波。
边界处理:执行滤波操作时模版的元素可能位于图像之外,这就要对附近的那些元素进行单独处理。
相关和卷积:卷积前要先对原图像进

行镜像。
滤波相关的函数主要有imfilter和fspecial。而fspecial可以为我们创建一些预定义的2维滤波器,直接供imfilter函数使用。
g=imfiter(f,w,option1,option2,.........)
f是要进行滤波操作的图像。
w是滤波操作所使用的模版,为一个二维数组。
option1,option2,.........是可选项,具体可以包括:
边界选项(X,代表用x填充边界,symmetric填充用的靠近边缘的像素镜像,replicate填充的是靠近它的边缘像素。circular认为原图像具有周期性,从而周期性重复地填充虚拟图像。
尺寸选项:same输出图像g与输入图像f尺寸相同,full输出图像g的尺寸为填充虚拟边界后的图像f的尺寸,因而大于输入图像f的尺寸。
模式选项:指明滤波过程是相关还是卷积,con滤波过程为相关,conv滤波过程为卷积。

f=imread('e:\matlab2012\myfiles\26.jpg');
subplot(2,2,1)
imshow(f);
subplot(2,2,2)
imhist(f)
w=[1 1 1;1 1 1;1 1 1]/9;%利用模版w=1/9*[1 1 1;1 1 1;1 1 1]对f进行相关滤波
g=imfilter(f,w,'corr','replicate');%滤波
%figure;
subplot(2,2,3)
imshow(g);
subplot(2,2,4)
imhist(g)

fspecial创建预定义的二维滤波器
h=fspecial(type.parameters)
type用于指定滤波器的类型,type的一些合法值如下:‘average’平均模版 ‘disk’圆形临域的平均模版 ‘gaussiam'高斯模版 ‘laplacian’拉普拉斯模版 ‘log’高斯-拉普拉斯模版 ‘prewitt’ Prewitt水平边缘检测算子 ‘sobel’ sobel水平边缘检测算子
参数parameters为可先项,是和所选定的滤波器类型type相关的配置参数,如尺寸和标准差等。
返回值h为特定的滤波器
(1)h=fspecial(‘average’,hsize),返回一个大小为hsize的平均模版滤波器h。参数h是以一个含有两个分量的向量,指明h的行和列的数目:也可以仅为一个正整数,此时对应于模版为方正的情况,hsize的默认值为[3,3]
(2)h=fspecial(‘disk',radius)返回一个半径为radius的圆形平均模版,h是一个2radius+1的方正。半径radius的默认值为5
(3)h=fspecial(‘gaussian’,hsize,sigma)返回一个大小为hsize,标准差sigma的高斯低通滤波器,hsize的默认值为[3,3],sigma的默认值为0.5
(4)h=fspecial(‘sobel’)返回一个加强水平边缘的竖直梯度算子:h=[1 2 1 ; 0 0 0 ; -1 -2 -1],如果需要检测竖直边缘,则使用h’

图像平滑
由于偶尔的噪点的影响使图像有点亮和暗点,平滑可以滤除这些点
f=imread('e:\matlab2012\myfiles\26.jpg')
figure
imshow(f);
h=fspecial('average',3);%3*3平均模版
f3=imfilter(f,h,'corr','replicate');%相关滤波,重复填充边界
figure
imshow(f3);
h=fspecial('average',5);%5*5平均模版
f5=imfilter(f,h,'corr','replicate');%平均滤波
figure
imshow(f5);
h=fspecial('average',7);;%7*7平均模版
f7=imfilter(f,h,'corr','replica

te');%平均滤波
figure
imshow(f7);

高斯平滑及其实现
平均平滑对临域内的像素一视同仁,为了减少平滑处理中的模糊,得到更加自然的平滑效果,适当增大图像模版中心的权重,随着远离中心点,权重迅速减小,得到的模版即为高斯模版。
常用的3*3的高斯模版如下图所示w=1/16*[121 242 121]二维高斯函数。sigma偏小,偏离中心的所有像素权重将会非常小,相当于加权和相应基本不考虑临域像素的作用,这样就变为点操作,若sigma较大,就相当于平均值滤波。
f=imread('e:\matlab2012\myfiles\26.jpg');
figure
imshow(f);
h3_5=fspecial('gaussian',3,0.5);%sigma=0.5的3*3高斯模版
f3_5=imfilter(f,h3_5);%高斯平滑
figure
imshow(f3_5);
h3_8=fspecial('gaussian',3,0.8);%sigma=0.8的3*3高斯模版
f3_8=imfilter(f,h3_8);
figure
imshow(f3_8);
h3_18=fspecial('gaussian',3,1.8);%sigma=1.8的3*3高斯模版,接近于平均模版
f3_18=imfilter(f,h3_18);
figure
imshow(f3_18);
h5_8=fspecial('gaussian',5,0.8);
f5_8=imfilter(f,h5_8);
figure
imshow(f5_8);

自适应平滑滤波
逐行扫描图像,对每一个像素,以该像素作为中心,计算周围区域R的统计特征,如最大值、最小值和方差等,如果区域R的特征值满足选定的噪声判据,倘若满足条件则为噪点,进行相应,否则不处理该点。

中值滤波
对于原图像中某点(i,j),中值滤波以该点中心的临域内所有像素的排序中值作为(i,j)点的响应。

噪声模型
j=imnoise(I,type,parameters);
I为原图像,可选参数type指定了噪声类型,常用的噪声类型如表所示。
‘gaussian’高斯白噪声,如果一个噪声,它的幅度分布服从高斯分布,则称之为高斯噪声,而如果它的功率谱密度又是均匀分布的,则称它为高斯白噪声
‘salt’&‘pepper’椒盐噪声因其在图像中的表现形式而得名,椒盐噪声是由图像传感器、传输信道、解码处理产生的黑白相间的亮暗点噪声。椒盐噪声往往由图像切割引起的。
中值滤波的matlab实现:
I2=medfilt2(I1,[m,n]);
I1是原图矩阵,m和n是中值滤波处理的模版大小,默认3*3
输出I2是中值滤波处理的模版大小,默认3*3

图像锐化
图像锐化的目的是使模糊的图像变得更加清晰,图像锐化主要用于增强图像的灰度跳变部分,这一点和图像平滑对灰度跳变的抑制正好相反。线性平滑都是基于对图像临域的加权求和或者积分运算,而锐化则需要通过运算倒数或有限差分来实现。

基于一阶导数的图像增强--------梯度算子
%基于Robert交叉梯度锐化
%为了便于观察效果,对g1,g2的灰度进行了重新标定限制在0-255之间
f=imread('e:\matlab2012\myfiles\26.jpg');
subplot(2,2,1);
imshow(f,[]);
title('f');
f=double(f);%转换为双精度型,这样可以保存负值


w1=[-1 0;0 1];%w1对正45度边缘有较强响应,w2对负45度有较强响应。
w2=[0 -1;1 0];
g1=imfilter(f,w1,'corr','replicate');%以重复方式填充边界
g2=imfilter(f,w2,'corr','replicate');
g=abs(g1)+abs(g2);%计算Robert梯度
subplot(2,2,2);
imshow(g,[0,255]);
title('g');
subplot(2,2,3);
imshow(g1,[0,255]);
title('g1');
subplot(2,2,4);
imshow(g2,[0,255]);
title('g2');

Sobel梯度
由于滤波时我们比较喜欢奇数尺寸的模版,因而一种计算Sobel梯度的Sobel模版更加常用:w1=[-1 -2 -1;0 0 0;1 2 1] w2=[-1 0 1;-2 0 2;-1 0 1]
w1为对水平边缘有较大响应的竖直梯度 w2为对竖直边缘有较大响应的水平梯度
f=imread('e:\matlab2012\myfiles\26.jpg');
w1=fspecial('sobel');%得到水平sobel模版
w2=w1';%转置得到竖直sobel模版
g1=imfilter(f,w1);%水平sobel梯度
g2=imfilter(f,w2);%竖直sobel梯度
g=abs(g1)+abs(g2);%sobel梯度
subplot(2,2,1)
imshow(g1);
subplot(2,2,2)
imshow(g2);
subplot(2,2,3)
imshow(g);
subplot(2,2,4)
imshow(f);

基于二阶微分的图像增强---------拉普拉斯算子
下面介绍一种对于图像锐化而言应用更为广泛的基于二阶微分的拉普拉斯算子方法。
对应的滤波模版如下:
w1=[0 1 0;1 -4 1;0 1 0] w2=[0 -1 0;-1 4 -1;0 -1 0]
分析拉普拉斯模版的结构,可知这种模版对于90度的旋转是各向同性的,对于接近水平和接近竖直方向的边缘都有了很好的增强,避免了两次滤波。
更进一步可以得到对于45度旋转各向同性的滤波器w3=[1 1 1;1 -8 1;1 1 1]和w4=[-1 -1 -1;-1 8 -1;-1 -1 -1]利用高斯平滑的思想选择不同的权重就可以得到不同的模版。
f=imread('e:\matlab2012\myfiles\26.jpg');
subplot(2,2,1);
imshow(f);
f=double(f);
w1=[0 -1 0;-1 4 -1;0 -1 0];
l1=imfilter(f,w1,'corr','replicate');
w2=[-1 -1 -1;-1 8 -1;-1 -1 -1];
l2=imfilter(f,w2,'corr','replicate');
subplot(2,2,2);
imshow(abs(l1),[]);
subplot(2,2,3)
imshow(abs(l2),[]);
w3=[1 4 1;4 -20 4;1 4 1]
l3=imfilter(f,w3,'corr','replicate');
subplot(2,2,4);
imshow(abs(l3),[]);


多项式的创建
在matlab中提供了poly2sym函数实现多项式的构造,其调用格式如下:
r=poly2sym(c);c为多项式的系数矢量
r=poly2sym(c,v);c为多项式的系数矢量、v为其变量。


%多项式四则运算
%c=conv(a,b);
%c=conv(a,b,'shape')按形参‘shape’返回卷积运算,‘shape'的取值有:
% 1 full:为返回完整的卷积,其为默认值。
% 2 same:为返回部分卷积,其大小与矢量a大小相等。
% 3 alid:只返回无填充部分的卷积,此时输出量为卷积。


傅立叶变换
1.一维连续傅立叶变换,
对于定义域为整个时间轴的非周期函数f(t),此时已无法通过周期拓延将其扩展为周期函数,这种情况下就要用到傅立叶变换:
2.一维离散傅立叶变换




相关文档
最新文档