MATLAB数字图像处理
1 概述
BW=dither(I)灰度转成二值图;
X=dither(RGB,map)RGB转成灰度图,用户需要提供一个Colormap;
[X,map]=gray2ind(I,n)灰度到索引;
[X,map]=gray2ind(BW,n)二值图到索引,map可由gray(n)产生。灰度图n默认64,二值图默认2;
X=graylice(I,n)灰度图到索引图,门限1/n,2/n,…,(n-1)/n,X=graylice(I,v)给定门限向量v;
BW=im2bw(I,level)灰度图I到二值图;
BW=im2bw(X,map,level)索引图X到二值图;level是阈值门限,超过像素为1,其余置0,level在[0,1]之间。
BW=im2bw(RGB,level)RGB到二值图;
I=ind2gray(X,map)索引图到灰度图;
RGB=ind2rgb(X,map)索引图到RGB;
I=rgb2gray(RGB)RGB到灰度图。
2 图像运算
2.1 图像的读写
MATLAB支持的图像格式有bmp,gif,ico,jpg,png,cur,pcx,xwd和tif。
读取(imread):
[1] A=imread(filename,fmt)
[2] [X,map]=imread(filename,fmt)
[3] […]=imread(filename)
[4] […]=imread(URL,…)
说明:filename是图像文件名,如果不在搜索路径下应是图像的全路径,fmt是图像文件扩展名字符串。前者可读入二值图、灰度图、彩图(主要是RGB);第二个读入索引图,map为索引图对应的Colormap,即其相关联的颜色映射表,若不是索引图则map为空。URL表示引自Internet URL中的图像。
写入(imwrite):
[1] R=imwrite(A,filename,fmt);
[2] R=imwrite(X,map,filename,fmt);
[3] R=imwrite(…,filename);
[4] R=imwrite(…,Param1,Val1,Param2,Val2)
说明:针对第四个,该语句用于指定HDF,JPEG,PBM,PGM,PNG,PPM,TIFF等类型输出文件的不同参数。例如HDF的Quality,Compression,WriteMode;JPEG的BitDepth,Comment:Empty or not,Mode:lossy or lossless,Quality等。
2.2 图像的显示
方法1:使用Image Viewer(图像浏览器),即运用imview函数。
同时显示多帧图像的所有帧,可用到montage 函数。
改变显示大小:imview (X,map,’IntialMagnificatition ’,’fit ’), IntialMagnificatition 默认值为100,即100%显示,设置为fit 则全屏显示。
关闭:imview close all 。
Image Viewer 还提供了三个工具:全景查看窗口(导航功能)、像素区域工具、图像信息窗口。
方法2:使用图形图像视窗,即运用imshow 函数。 调用truesize 函数来设定图像到屏幕像点的映射关系。 可以运用getimage 函数来将当前显示的图像赋值给一个变量。 调用格式:
[1] imshow(I,n);\\n 为灰度级
[2] imshow(I,[low,high]);\\指定I 的数据围
[3] imshow(BW);\\显示二值图像BW ,0为黑色,1为白色 [4] imshow(X,map);\\索引图像 [5] imshow(RGB);
[6] imshow(…,display_option);\\显示图像的方式,选择‘notruesize ’或者‘turesize ’ [7] imshow(x,y,A,…);\\x,y 建立非默认的空间坐标系统 [8] imshow filename;
[9] h=imshow(…)\\h 表示被显示图像的句柄
2.3 图像的代数运算
[1] 相加(imadd ): Z=imadd(X,Y)\\存为8位;
Z=imadd(X,Y,’uint 16’)\\存为16位。 [2] 求补(imcomplement ): IM2=imcomplement(IM1)。 [3] 减法(imsubtract 或者imabsdiff ): Z=imsubtract(X,Y)\\差值结果小于0的赋值为0; Z=imabsdiff(X,Y)\\ 差值结果取绝对值。 [4] 乘法(immultiply ): Z=immultiply(X,Y)。 [5] 除法(imdivide ): Z=imdivide(X,Y)。
2.4 点运算
灰度变换函数GST :B(x,y)=f[A(x,y)]。其中有:
[1]线性点运算B ()f A A αβ==+; [2]非线性点运算; [3]直方图修正。
2.5 图像的集合运算
改变大小imresize :Y=imresize(X,M,method),其中M 为放大的倍数,method 有
如下几种插值方式nearest,bilinear,bicubic。也可以规定输出图像大小,[heng,zong]。
图像旋转imrotate:Y=imrotate(X,angle,method,’crop’),angle表示逆时针旋转,method同imresize的用法,crop表示将旋转以后的图像取与原图像大小相同的中心部分取出。
比例缩放imresize:同改变大小。
空间变换imtransform:B=imtransform(A,TFORM,param1,val1,param2,val2),其中TFORM为makeform或者cp2tform产生的结果。如
findounds,makereample,tformarray,imtransform等。
2.6 图像的领域和块操作
领域操作分为滑动领域和分离领域两类。滑动领域函数nlfilter,用法如下:
[1] B=nlfilter(A,[m n],fun)\\[m n]表示滑动领域m*n,fun为图像领域上的处理函数;
[2] B=nlfilter(A,[m n],fun,P1,P2,…)\\可以传递参数P1,P2,…给函数fun;
[3] B=nlfilter(A,’indexed’)\\把图像作为索引色图像处理,double填补1,uint8补0。
而且fun可以是一个函数句柄或是一个联函数,返回类型由fun决定。但是nlfilter 处理时可能需要很长时间,这时可是考虑使用快速处理函数colfilt。用法类似,多一个参数bldck_tpye,表示块的移动方式,有distinc t和sliding两个取值,前者表示分离块操作,后者表示滑动块操作。而且有[mblock nblock]表示图像块的大小。
分离块操作是将图像划分为大小相同的矩形区域,不同图像块在图像中无重叠排列,其顺序从左上角开始,不足的地方可以在右下角补0。函数为blkproe,调用格式和nlfilter 类似。
2.7 几何畸形校正和图像配准
用到函数imtransform。
3 MATLAB二维与三维图形绘制及动画
3.1 基本绘图命令
3.2 绘图选项
常用的绘图选项:
线形:- -. -- :
颜色:r g b c m y k w
点标记:+ o * . x s d h p > < ^ v
坐标轴标注:axis([xmin xmax,ymin ymax]),axis auto/square/xy/ij/normal/off/on等用法。
图形窗口保持:hold on…hold off。
给坐标加边框:box on…box off。
图形缩放:zoom on…zoom out…zoom off。
快速绘图:fplot(‘fun’,[ xmin xmax,ymin ymax])。
打印:print[filename][-device][-options],其中device决定打印机的类型。
3.3 特殊坐标二维图形
数,也可缺省,如fun1可以是plot等等。Plot(z)绘制复数z的实部与虚部的图形。
3.4 二维图形处理
图形标注:title,xlabel,ylabel,zlabel,text,gtext,legend。
图形窗口的分割:subplot(m,n,p)。
坐标系设定:axes,也可事后用gca(get current axes)获得当前坐标系的句柄。通过get和set函数获取和设置坐标轴对象的有关属性值。用法如:
属性值=get(句柄,属性)或者set(句柄,属性1,属性值1,属性2,属性值2,…)。
3.5 三维图形的绘制
说明:
[1]改变网格属性:set(axes_handle,’XGrid’,’on’)grid函数显示网格。
[2]网格图中用到函数hidden on和hidden off来显示或者不显示被遮住部分。
[3]waterfall函数在x轴方向产生水流效果。
[4]meshgrid函数产生一个x-y平面的网格,如:[x,y]=meshgrid(-3:0.1:3,-2:0.1:2)。
[5]绘制球面的函数是sphere,如:sphere(n)或者[x,y,z]= sphere(n)。也可以是函数cylinder,用法:cylinder(R,n)或者[x,y,z]= cylinder(R,n)。n为面数,R为一函数。
[6]colorbar命令的作用是在三维曲面图旁边绘制一个可以指示亮度的彩色条。
[9]quiver函数在等值线图上画出方向或速度箭头:quiver(X,Y,DX,DY)。求导:gradient。
[10]fill3用法类似于fill,对三维图形进行填充。
[11]clabel函数:添加等高线。
[12]bar和bar3参数说明:group同一行数据的方条靠一起,stack画在一个方条上。
[13]饼形图pie和pie3:参数explode指定某些片是否和整个图脱开,与x的维数相同的向量,其中非0的那一片脱离整体。加上标注如{属性1,属性2,…}。
[14]火柴杆图和瀑布图:stem,stem3和waterfall。
3.6 三维图形的控制
视角view:仰角(与z轴的夹角)el和方位角(与x轴的夹角)az,即view(az,el)。
控制光照light:参数有color,style(infinit和local)和position。函数lightangle 添加光照,并指定其方位角和仰角,可是使用函数shading增强表面。
3.7 动画
增量变化,需要用到对象的EraseMode属性。
4 MATLAB图像增强
4.1 原理、方法及体系结构
三个阶段:图像预处理、特征抽取阶段、识别分析阶段。
目的:改善图像的视觉效果,提高图像成分的清晰度;是图像变得有利于计算机处理。
方法:空间域增强方法、频域增强方法。
体系:
图像增强:空间域、频率域、彩色增强
空间域:像素点处理(图像灰度变换、直方图修正(中值滤波、均值滤波))、领域处理(图像平滑滤波、图像锐化滤波)
频率域:低通滤波、高通滤波、同态滤波
彩色处理:真彩色处理、伪彩色处理(灰度分层法、灰度变换法、频域伪彩色)
4.2 对比度增强
线性变换:(,)[(,)]N n
g x y f x y m n M m
-=
-+-。其中功能是把函数的灰度值(,)f x y 从
围[m,M]变为[n,N]。 非线性变换:分为对数变换和Gamma 变换。前者表达式为
(,)log[(,)1]g x y c f x y =+,其中c 为常数。后者表达式为r f cr =,r 为CCD 图像传感器或胶片等的入射光的强度,为常数,灰度与光强成正比,则有1
()r f g kr k c
==,k 为常
数通常为1,1/r 取0.4~0.8。 我们可以用一个函数imadjust 函数来实现: J=imadjust(I);
J=imadjust(I,[low_in;high_in],[low_out;high_out]);
J=imadjust(I,[low_in;high_in],[low_out;high_out],gamma)。 其中灰度围用归一化灰度值,围[0,1]。整个图像的[low_in;high_in]可以用函数stretch 函数来获得。 MATLAB image toolbox5.4还提供一个手动调节的控制面板,调用函数imconstrast 。
4.3 空域变换增强
分为基于像素点和基于模板的两类方法。 像素选择:pixval 和impixel 。用法如下: Pixval(‘on/off ’);pixval ;pixval(fig,option); [C,R,P]=impixel(X,MAP)。 说明:MAP 仅仅当是索引图的时候采用此参数。C 为像素的颜色,R,P 为像素的坐标。Pixval 可以得到更多的像素信息,impixel 可以返回指定像素的颜色值。 强度描述图:improfile ,用以描述图像一条线段或多条线段的强度值。格式:C=improfille(I,xi,yi)。参数xi ,yi 是两个向量,用以指定线段的端点。 图像轮廓图:imcontrour ,自动设置坐标轴,使输出图像在其方向和纵轴比上能够与显示的图像吻合。
直方图匹配
1
1
{}()c
c
R n
n F m m P g
b H m ====∑∑。从而可以得到直方图均衡化的公式如下:
max min min ()()f g g g p f g =-+。在MATLAB 中提供函数histep 来实现。用法histep(I,n)。
4.4 图像锐化
边界撮合锐化:边界提取函数edge ,以及fspecial (建预定义的二维过滤器),再者函
数imfilter (N-D 过滤的多维影像)。 锐化滤波器:分为拉普拉斯(Laplacian )算子和Wallis 算子。 拉普拉斯算子具有各向同性和平移不变性,有时称为边界提取算子。其卷积模板为:
四领域0
01400ααααα-????-+-????-?? 八领域12α
αααααααα---??
??-+-????---??
规定α的大小后,可设置卷积模板为向量h ,并用函数imfilter (I,h )即可。
Wallis 算子是一种改进的Laplacian 算子,有如下公式:
(,)[(1)(,)][(,)(,)]
(,)d
d d
A g i j am f i j f i j f i j A i j σασσ=+-+-+
式中:(,)f i j 是原始图像,它的局部均值和局部标准偏差分别为(,)f i j 和(,)i j σ,
d m 和d σ表示设计的平均值和标准偏差,A 为增益系数,α是控制增强图像中边缘和背景组成的比例常数,(,)g i j 为增强后的图像。
空间域图像锐化:空域高通滤波法、梯度法图像锐化、利用Sobel 算子对图像滤波、
利用拉普拉斯算子对模糊图像进行增强。 梯度法的5种方法如下: 【1】(,)([(,)])(,)g i j G f i j f i j ==?; 【2】|[(,)]||[(,)]|(,)(,)
G f i j G f i j T
g i j f i j ≥?=?
?其他;
【3】L |[(,)]|(,)(,)G
G f i j T g i j f i j ≥?=??
其他,L G 为固定灰度代替【2】中小于阈值T 时仍选
用原图像的像素点值; 【4】|[(,)]||[(,)]|(,)B
G f i j G f i j T
g i j L ≥?=?
?其他;
【5】|[(,)]|(,)G B
L G f i j T
g i j L ≥?=??其他。
频率域图像锐化:傅里叶变换等等。
4.5 图像伪色彩增强
图像伪色彩是指将黑白图像转化为彩色图像,或者是将单色图像变换成给定彩色分布的
图像。可以利用不同色彩变现不同灰度,还可以表示不同的频率成分。 彩色增强分为:假彩色增强(将一幅彩色图像映射为另一幅彩色图像)、伪彩色增强(将一幅黑白图像不同灰度级映射为一幅彩色)。 伪彩色处理的三种方法:灰度分层法(grayslice )、灰度变换法(对比度调整函数imadjust )、频域伪彩色处理(先做IFFT ,再做进一步处理,最后将它们作为三基色分量分