1、一些图像处理函数用法(精华) % imshow imshow 是用来显示图片的,如 I=imread(moon.tif); figure,imshow(I); 而有时为了数据处理,要把读取的图 片信息转化为更高的精度, I=double(imread(moon.tif); 为了保证精度, 经过了运算的图像矩阵 I 其数据类型会从 unit8 型变 成 d ouble 型 。 如 果直接运行 i ms how(I), 我 们会发现显示的是一个 白色的图像。这是因为 imshow()显示图像时对 d ouble 型 是认为在 01 范 围内,即大于 1 时都是显示为白色,而 i mshow 显 示
2、 u int 8 型时是 0 255 范围。 而经过运算的范围在 0- 255 之间的 double 型 数据就被不正常得显示为白色图像了。 有两个解决方法: 1imshow(I/256);-将图像矩阵转化到 0 -1 之间 2imshow(I,);-自动调整数据的范围以便于显示. 从实验结果看两种方法都解决了问题, 但是从显示的图像看, 第二种 方法显示的图像明暗黑白对比的强烈些! + IMSHO W (I)disp laysthe grayscal e imag e I . IMSHO W (I,LO WHIGH ) display sthegra y scalei m ageI, spe
3、cifyin g thedisplayrangeforIinLOWHIGH.T h evalue LOW(andanyvaluelessthanLOW)displaysasblack,the valueHIGH(andanyvalu egreaterthanHIGH)displaysas w h i t e . V a l u e s i n b e t w e e n a r e d i s p l a y e d a s i n t e r m e d i a t e s h a d e s ofgray,u singthedefaultnumberofgraylevels. Ifyouu
4、seanemptymatrix()forLOWHIGH,IMSHOW uses min(I(:)max(I(:); thatis,t h e mini mum val u einIis displayed asblack,andthemaximumvalueisdisplayedaswhite. + 图像为 y,为何用 imshow(uint8(y)和 imshow(y,)时的图像显示结 果不同? 回答: imshow( u int8(y)是按照 2 5 6 级 灰度显示 y 得绝对数据。0 表示黑 色,255 表示白色,y 中大于 255 的值强制为 255。 imshow(y,),将 y
5、中的最小值看作 0 (black),最大值看作 255(white) 增加图像的对比度。 所以两者不同。 % padarray 功能:填充图像或填充数组 。 用法:B=padarray(A,padsize,padval,direction) A 为输入图像,B 为填充后的图像, padsize 给出了给出了填充的行数和列数,通常用rc 来表示, padval 和 d irection 分别表示填充方法和方向。 它们的具体值和描述如下: padval: symmetric 表示图像大小通过围绕边界进行镜像反 射来扩展; replicate 表示图像大小通过复制外边界中的值来扩展; circula
6、r 图像大 小通过将图像看成是一个二维周期函数的一个周期 来进行扩展。 direction : pre 表示在每一维的第一个元素前填充; post 表示在每一维的最后一个元素后填充; both 表 示在每一维的第一 个元素前和最后一个元素后填充,此项 为默认值。 若参量中不包括 direction, 则默认值为both;若参量中不包含 padval,则默认用零来填充 。若参量中不包括任何参数,则默认填 充为零且方向为b o th。在计算结束时,图像会被修剪成原始大 小。 举例: A=12;34; B=padarray(A,32,replicate,post) imfinfo imfinfo 函
7、数用于读取图象文件的有关信息,其语法格式为imfinfo(filename,fmt) imfinfo 函数返回一个结构 i nfo, 它反映了该图象的各方面信息, 其 主要数据包括: 文件名 ( 路径) 、 文件格式、 文件格式版本号、 文件 的修改时间、 文件的大小、 文件的长 度、 文件的宽度、 每个像素的位 数、图象的类型等。 imhist MATLAB 图象处理工具箱提供了 imhist 函数来 计算和显示图象的直 方图,imhist 函数的语法格式为: imhist( I ,n) imhist(X,map) 其中 imhist(I,n)计算和显示灰度图象 I 的直方图, n 为指定的
8、灰度级 数目, 默认值为 2 56。 imhist(X,map )计算和显示索引色图象 X 的 直 方图,map 为 调色板。 例: I=imread(rice.tif); imshow(I) figure,imhist(I) imadjust 对比度增强 如果原图象 f(x,y) 的灰度范围是m,M,我们希望调整后的图象 g(x,y)的灰度范围是n, N ,那么下述变换就可以实现这一要求。 MATLAB 图象处理工具箱中提供的 imadjust 函数, 可以实现上述的线性变换对比度增强。Ima djust 函 数的语法格式为: J=imadjust(I,low_inhig h_in,low_
9、outhigh_out) J=imadjust(I,low_inhigh_ in,low_outhigh_out)返回图象 I 经 过直方图调整后的图象 J,low_in high_in为原图象中要变换的灰 度范围, low_outhigh_out指定了变换后的灰度范围。 例: I=imread(pout.tif); J=imadjust(I,0.30.7,); imshow(I),figure,imshow(J) imresize 几何运算可改变图像中各物体之间的空间关系。 这种运算可以被看成 是将(各)物体在图像内移动。一个几何运算需要两个独立的算法。 首先, 需要一个算法来定义空间变换
10、本身, 用它来描述每个像素如何 从其初始位置“移动”到终止位置,即每个像素的“运动”。同时, 还需要一个用于灰度插值的算法, 这是因为, 在一般情况下, 输入图 像的位置坐标(x,y) 为整数, 而输出图像的位置坐标为非整数, 反过来 也如此。因此插值就是对变换之后的 整数坐标位置的像素值进行估 计。MAT LAB 提 供了一些函数实现这些功能。 插值是常用的数学运算, 通常是利用 曲线拟合的方法, 通过离散的采 样点建立一个连续函数来逼近真实的曲线, 用这个重建的函数便可以 求出任意位置的函数值。最近邻插值是最简便的插值, 在这种 算法中, 每一个插值输出像素的 值就是在输入图像中与其最临近
11、的采样点的值。 最近邻插值是工具箱 函数默认使用的插值方法, 而且这种插值方法的运算量非常小。 当图 像中包含像素之间灰度级变化的细微结构时, 最近邻插值法会在图像 中产生人工的痕迹。 双线性插值法的输出像素值是它在输入图像 中 22 领域采样点的平 均值, 它根据某像素周围 4 个像素的灰度值在水平和垂直两个方向上 对其插值。 双三次插值的插值核为三次函数,其插值邻域 的大小为 4 4。它的 插值效果比较好,但相应的计算量也比较大。 MATLAB 图像处理工具箱中的函数 imresize 可以用上述的 3 种方法 对图像进行插值缩放, 如果不指定插值方法, 则默认为最邻近插 值法。 Imre
12、size 函数的语法格式为: B=imresize(A,m,method) 参数 met h od 用于指定插值的方法,可选用的值为nearest(最邻 近法) , bilinear (双线性插值) , bicubic (双三次插值) , 默 认 为nearest。 B=imresize(A,m,met hod) 返回原图 A 的 m 倍放大的图像(m 小 于 1 时效果是缩小)。 imnoise 在 MATLAB 中提供了给图像加入噪声的函数 i mnoiseimnoise 的语法格式为 J=imnoise(I,type) J=imnoise(I,t y pe,paramet ers) 其中
13、 J = imnoise( I,type)返回对原始图像 I 添 加典型噪声的有噪图像 J。 参数 typ e 和 para m eters 用于确定噪声的类型和相应的参数。 下面的命令是对图像 e ight.t if 分别加入高斯噪声、椒盐噪声和乘性 噪声,其结果如图所示: 例: I=imread(eight.tif); J1=imnoise(I,gaussian,0,0.02); J2=imnoise(I,salt J3=imnoise(I,speckle,0.02); subplot(2,2,1),imshow(I),title(原图像); subplot(2,2,2),imshow(
14、J 1),title(加高斯噪声 ); subplot(2,2,3),imshow( J 2),title(加椒盐噪声 ); subplot(2,2,4),imshow( J 3),title(加乘性噪声 ); MATLAB 提供的快速傅立叶变换函数 (1) fft2 fft2 函 数用于计算二维快速傅立叶变换,其语法格式为: B=fft2(I)B = fft2(I)返回图象 I 的二维 fft 变换矩阵,输入图象 I 和输出图象 B 大小相同。 例如, 计算图象的二维傅立叶变换, 并显示其幅值的结果, 其命令格 式如下 loadimdemossaturn2 imshow(saturn2) B
15、=fftshift(fft2(saturn2); imshow(log(abs(B),notruesize) (2)fftshift MATLAB 提供的 fft shift 函数用于将变换后的图象频谱中心从矩阵 的原点移到矩阵的中心,其语法格式为: B =f ftshift(I) 对于矩阵 I , B = fft shift(I) 将 I 的 一、 三象限和二、 四象限进行互换。 (3)ifft2 ifft2 函 数用于计算图象的二维傅立叶反变换,其语法格式为: B=ifft2(I) B = ifft2( A)返回图象 I 的二维傅立叶反变换矩阵, 输入图象 I 和 输出 图象 B 大 小相
16、同。其语法格式含义与 fft2 函 数的语法格式相同,可 以参考 fft 2 函数的说明。 conv2 MATLAB 中提供了卷积运算的函数命令 conv2 ,其语法格式为: C=conv2(A,B) C=conv2(A,B)返回矩阵 A 和 B 的 二维卷积 C。若 A 为 m an a 的 矩阵,B 为 mbn b 的矩阵,则 C 的 大小为( ma+mb+1 ) (na+nb+1)。 例: A=magic(5) A= 1 7 2 4 1 8 1 5 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9 B=121;020;313 B=
17、1 2 1 0 2 0 3 1 3 C=conv2(A,B) C= 17 58 66 34 32 38 15 23 85 88 35 67 76 16 55 149 1 17 163 159 135 67 79 78 160 161 187 129 51 23 82 153 199 205 108 75 30 68 135 168 91 84 9 33 65 126 85 104 15 27 imfilter 语法:g= i mfilter(f,w,filtering_mode,boundary_opt i ons, size_options) 说明:此函数用指定的模板实现对指定图像的 空间滤
18、波。f 为待进行 空间滤波的图像,w 为 滤波模板 滤波类型( filtering_mode) corr 滤波器通过使用相关来完成。该值是默认值。 conv 滤波器通过使用卷积来完成 边界填充选项(bou n dary_options) P 输入图像的边界通过用值 P 来扩展。P 的默认值为 0 。 replicate 图像大小通过复制外边界的值来扩展。 symmet r ic 图像大小通过反射其边界来扩展。circular 图像大 小通过将图像看成是二维周期函数的一个周期来扩 展 大小选项( size_options) full 输 出图像的大小与被填充后图像的大小相同 same 输出图像的
19、大小与输入图像的大小相同 注:imfilter 与 filt er2 区 别 imfilter 可进行多维图像( RGB 等 )进行空间滤波,且可选参数较 多 filter2 只能对二维图像(灰度图)进行空间滤波 %例程 clc originalRGB=imread(peppers.png); h=fspecial(laplacian); filteredRGB=imf ilter(originalRGB,h); figure,imshow(originalRGB) figure,i m show(f ilteredRGB) filter2 MATLAB 图像处理工具箱提供了基于卷积的图象滤波
20、函数 filter2 , filter2 的 语法格式为: Y=filter2(h,X) 其中 Y=filter2(h,X)返回图像 X 经滤波算子 h 滤波后的结果,默认 返回图像 Y 与输入图像 X 大 小相同。 其实 filter2 和 con v 2 是 等价的。 MATLAB 在计算 filter2 时 先将卷积核旋转 180 度,再调用 conv2 函数进行计算。 fspecial fspecial 函数用于创建预定义的滤波算子(掩膜),其语法格式为: h=fspecial(type) h=fspecial(type,parameters) 参数 typ e 制定算子类型,para
21、met e rs 指定相应的参数,具体格式 为: type=average, f special(average,r c), 大小为 r xc 的矩形均 值 滤波器,默认值为 33。 type= gaussian, fspecial(gaussian,r c,sigma), 大小为 rxc 的 高斯低通滤波器,参数有两个,rc 表示模版尺寸,默认值为33, sigma 表 示滤波器的标准差,单位为像素,默认值为 0.5。 type= laplacian, fspecial(laplacian,alpha) 大小为 3x3 为拉普拉斯滤波器, 参 数为 alpha, 用于控制拉普拉斯算子的形状,
22、 取值范围 为0,1,默认值为 0 .2。 type= log, fspecial(log,r c,sigma), 为拉普拉斯- 高斯(LoG)算 子, 参数有两个, r c表示模版尺寸, 默 认值为5 5, sigma 为 滤波 器的标准差,单位为像素,默认值为 0.5 type=p rewitt,f special(prewitt),大小为为 3 x3 的 prewit t 算 子掩膜 P v ,它仅为垂直梯度(并非计算完整的 P rewit t 梯度),用 于边缘提取,水平梯度掩膜为其转置。 type= sobel,fspecial(sobel),为著名的 sobel 算子,大小为为 3
23、x3 的 sobel 算 子掩膜 S v,仅为垂直梯度(并非计算完整的 Sob e l 梯度),用于边缘提取,水平梯度掩膜为其转置。 type= u nsharp, 为对比度增强滤波器, 参数 alpha 用于控制滤波 器的形状,范围为 0,1,默认值为 0.2。 注: fspecial 仅仅是定义了 滤波算子 h , 要 想进行以该算子为掩膜的 二维图像卷积运算(滤波),还需要使用 filter2。 综合例程: clc %对原图象进行加噪 A=imread(cameraman.tif); B=imnoise(A,salt %用 fsp e cial 和 filt er2 命 令实现gauss
24、ian,laplacian滤波 h=fspecial(gaussian,3,3,0.5)% 定义滤波算子 h X=filter2(h,B)/255;% 卷积/ 滤波运算 figure,imshow( X),title(gaussian 滤波); k=fspecial(laplacian,0.2)% 定义滤波算子 k Y=filter2(k,B); figure,imshow(Y),title(laplacian 滤波); medfilt2 在 MATLAB 图像处理工具箱中, 提供了 m edfilt2 函 数用于实现中值 滤波。 medfilt2 函数的语法格式为: B = m e d f
25、i l t 2 ( A ) 用 3 3 的 滤 波 窗口对图像 A 进行中 值滤波。 B=medfilt2(A,mn) 用指定大小为 m n 的窗口对图像 A 进 行中值滤波。 edgeMATLAB 的图像处理工具箱中提供的 e dge 函 数可以实现检测边缘 的功能,其语法格式如下: BW=edge(I,sobel) BW=edge(I,sobel,direction) BW=edge(I,roberts) BW=edge(I,log ) 这里 BW=edge( I ,sobel)采用 S ob el 算子进行边缘检测。BW= edge( I ,sobel,direction)可以指定算子方
26、向,即: direction =horizontal,为水平方向; direction =vertical,为垂直方向; direction =both,为水平和垂直两个方向。 BW = e dge(I,roberts)和 B W = edge(I,log)分别为用 Roberts 算 子和拉普拉斯高斯算子进行边缘检测。 例:用三种算子进行边缘检测。 I=imread(eight.tif); imshow(I) BW1=edge(I,roberts); figure,imshow(BW1),title(用 Roberts 算子) BW2=edge(I,sobel); figure,imshow( BW2),title( 用 S ob el 算子 ) BW3=edge(I,log );figure,imshow( BW3),title( 用拉普拉斯高斯算子)