matlab图像处理教程1

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

基本概念一点通从理论上讲,图像是一种二维的连续函数,然而在计算机上对图像进行数字处理的时候,首先必须对其在空间和亮度上进行数字化,这就是图像的采样和量化的过程。空间坐标(x,y)的数字化称为图像采样,而幅值数字化称为灰度级量化。对一幅图像采样时,若每行(横向)采样数为M,每列(纵向)采样数为N,则图像大小为M*N个像素,f(x,y)表示点(x,y)处的灰度值,则F(x,y)构成一个M*N实数矩阵****************************经验分享:“像素”的英文为“pixel”,它是“picture”和“element”的合成词,表示图像元素的意思。我们可以对“像素”进行如下理解:像素是一个面积概念,是构成数字图像的最小单位。****************************把采样后所得的各像素灰度值从模拟量到离散量的转换称为图像灰度的量化。量化是对图像幅度坐标的离散化,它决定了图像的幅度分辨率。量化的方法包括:分层量化、均匀量化和非均匀量化。分层量化是把每一个离散样本的连续灰度值只分成有限多的层次;均匀量化是把原图像灰度层次从最暗至最亮均匀分为有限个层次,如果采用不均匀分层就称为非均匀量化。当图像的采样点数一定时,采用不同量化级数的图像质量不一样。量化级数越多,图像质量越好;量化级数越少,图像质量越差。量化级数小的极端情况就是二值图像。****************************经验分享:“灰度”可以认为是图像色彩亮度的深浅。图像所能够展现的灰度级越多,也就意味着图像可以表现更强的色彩层次。如果把黑——灰——白连续变化的灰度值量化为256个灰度级,灰度值的范围为0~255,表示亮度从深到浅,对应图像中的颜色为从黑到白。****************************因此,对数字图像进行处理,也就是对特定的矩阵进行处理。在C语言中,对M×N数字图像处理的核心代码如下:for(j=1;jN+1;j++)for(i=1;iM+1;i++){对I(i,j)的具体运算};在Matlab中,对M×N数字图像处理的核心代码如下:fori=1:Nforj=1:M对I(i,j)的具体运算endend一幅数字图像可以用一个矩阵来表示,对数字图像进行处理,实质上就是对特定的图像矩阵进行变换的过程,因此,图像变换是数字图像处理技术的基础。图像变换的方法林林总总,多种多样。包括空间域变换、频率域变换、时频域变换、基于经典数学理论的变换、基于现代数学理论的变换。以下程序段是用于图像放缩(空间变换)的MATLAB源程序:*********************************************************************functionnewImage=resample1(image,newRow,newCol)%功能:对图像进行缩放%输入:image-需要进行缩放的灰度图像;%newRow-缩放后新图像的行数;%newCol-缩放后新图像的列数;%输出:newImage-缩放后的图像。[row,col]=size(image);image_larger=zeros((row+1),(col+1));image_larger(1:row,1:col)=image;image=image_larger;newImage=zeros(newRow,newCol);fori=0:(newRow-1)forj=0:(newCol-1)x=j*(col-1)/(newCol-1);y=i*(row-1)/(newRow-1);fx=floor(x);fy=floor(y);area_ul=(x-fx)*(y-fy);area_ur=(fx+1-x)*(y-fy);area_bl=(x-fx)*(fy+1-y);area_br=(fx+1-x)*(fy+1-y);newImage(i+1,j+1)=...image(fy+1,fx+1)*area_br+...image(fy+1,fx+2)*area_bl+...image(fy+2,fx+1)*area_ur+...image(fy+2,fx+2)*area_ul;endend*********************************************************************在MATLAB中,图像的缩放也可以调用imresize函数来实现。imresize函数的调用格式如下:B=imresize(A,m,method)imrersize函数使用由参数method指定的插值运算来改变图像的大小。method的几种可选值:'nearest'(默认值)最近邻插值;'bilinear'双线性插值;'bicubic'双三次插值;B=imresize(A,m)表示把图像A放大m倍。(1)图像文件的读取利用imread函数可以完成图像文件的读取操作。常用语法格式为:I=imread(‘filename’,‘fmt’)或I=imread(‘filename.fmt’);其作用是将文件名用字符串filename表示的、扩展名用字符串fmt(表示图像文件格式)表示的图像文件中的数据读到矩阵I中。当filename中不包含任何路径信息时,imread会从当前工作目录中寻找并读取文件。要想读取指定路径中的图像,最简单的方法就是在filename中输入完整的或相对的地址。MATLAB支持多种图像文件格式的读、写和显示。因此参数fmt常用的可能值有:‘bmp’Windows位图格式‘jpg’or‘jpeg’联合图像专家组格式‘tif’or‘tiff’标志图像文件格式‘gif’图形交换格式‘pcx’Windows画刷格式‘png’可移动网络图形格式‘xwd’XWindowDump格式例如,命令行I=imread(‘lena.jpg’);将JPEG图像lena读入图像矩阵I中。(2)图像文件的写入(保存)利用imwrite完成图像的输出和保存操作,也完全支持也完全支持上述各种图像文件的格式。其语法格式为:imwrite(I,‘filename’,‘fmt’)或imwrite(I,‘filename.fmt’);其中的I、filename和fmt的意义同上所述。注意事项:当利用imwrite函数保存图像时,MATLAB默认的保存方式是将其简化为uint8的数据类型。与读取文件类型类似,MATLAB在文件保存时还支持16位的PNG和TIFF图像。所以,当用户保存这类文件时,MATLAB就将其存储在uint16中。(3)图像文件的显示图像的现实过程是将数字图像从一组离散数据还原为一幅可见图像的过程。MATLAB的的图像处理工具箱提供了多种图像显示技术。例如imshow可以直接从文件显示多种图像;image函数可以将矩阵作为图像;colorbar函数可以用来显示颜色条;montage函数可以动态显示图像序列。这里仅对常用的显示函数进行介绍。①图像的显示imshow函数是最常用的显示各种图像的函数,其调用格式如下:imshow(I,N);imshow(I,N)用于显示灰度图像,其中I为灰度图像的数据矩阵,N为灰度级数目,默认值为256。例如下面的语句用于显示一幅灰度图像:I=imread(‘lena.jpg’);imshow(I);如果不希望在显示图像之前装载图像,那么可以使用以下格式直接进行图像文件的显示:imshowfilename其中,filename为要显示的图像文件的文件名。注意事项:该文件名必须带有合法的扩展名(指明文件格式),且该图像文件必须保存在当前目录下,或在MATLAB默认的目录下。②添加色带colorbar函数可以给一个坐标轴对象添加一条色带。如果该坐标轴对象包含一个图像对象,则添加的色带将指示出该图像中不同颜色的数据值。这对于了解被显示图像的灰度级特别有用。其调用格式为:colorbar③显示多幅图像显示多幅图像最简单的方法就是在不同的图形窗口中显示它们。imshow总是在当前窗口中显示一幅图像,如果用户想连续显示两幅图像,那么第二幅图像就会替代第一幅图像。为了避免图像在当前窗口中的覆盖现象,在调用imshow函数显示下一幅图像之前可以使用figure命令来创建一个新的窗口。例如:imshow(I1);figure,imshow(I2);figure,imshow(I3);有时为了便于在多幅图像之间进行比较,需要将这些图像显示在一个图形窗口中。达到这一目的有两种方法:一种方法是联合使用imshow和subplot函数,但此方法在一个图形窗口只能有一个调色板;另一种方法是联合使用subimage和subplot函数,此方法可在一个图形窗口内使用多个调色板。subplot函数将一个图形窗口划分为多个显示区域,其调用格式如下:subplot(m,n,p)subplot函数将图形窗口划分为m(行)×n(列)个显示区域,并选择第p个区域作为当前绘图区。(4)图像文件信息的查询imfinfo函数用于查询图像文件的有关信息,详细地显示出图像文件的各种属性。其语法格式为:info=imfinfo(‘filename’,‘fmt’)或info=imfinfo(‘filename.fmt’)或imfinfofilename.fmtimfinfo函数获取的图像文件信息依赖于文件类型的不同而不同,但至少应包含以下内容:文件名。如果该文件不在当前目录下,还包含该文件的完整路径。文件格式。文件格式的版本号。文件最后一次修改的时间。文件的大小。以字节为单位。图像的宽度。图像的高度。每个像素所用的比特数。也叫像素深度。图像类型。即该图像是真彩色图像、索引图像还是灰度图像。数字图像处理的方法有两类:空间域处理法和频域法。频域法首先是要将图像从空间域变换到频率域,然后在频率域对图像进行各种处理,再将所得到的结果进行反变换,从而达到图像处理的目的,频域法具有很多明显的优点。目前,频域变换被广泛运用于图像特征提取、图像增强、图像复原、图像数据压缩和图像识别等领域。(1)离散傅立叶变换(DFT)离散傅立叶变换(DFT)在数字信号处理和数字图像处理中应用十分广泛。使用离散傅立叶变换的根本原因有二:一是DFT的输入、输出均为离散形式的,这使得计算机非常容易操作;二是因为计算DFT存在快速算法,即快速傅立叶变换(FFT),因而计算比较方便。空间域是由f(x,y)所组成的坐标系,其中x和y用作(空间)变量。频率系统是由F(u,v)所组成的坐标系,其中u和v用作(频率)变量。由u=0,1,2,…M-1和v=0,1,2,…N-1定义的M×N矩形区域常称为频率矩形。显然,频率矩形的大小与输入图像的大小相同。为了与MATLAB的实现形式相一致,将1/MN项放置于逆变换公式的前面。由于MATLAB中的数组索引是以1而不是以0开头的,所以MATLAB中的F(1,1)和f(1,1)相应于正变换和逆变换中的数字量F(0,0)和f(0,0)。在频域原点处变换值[如F(0,0)]称为傅立叶变换的直流(dc)分量,F(0,0)等于f(x,y)的平均值的MN倍。MATLAB图像处理工具箱提供了一些函数来进行傅立叶变换:①函数:fft2——用于计算二维快速傅立叶变换。调用格式为:Y=fft2(X);Y=fft2(X,M,N);其中X是输入图像矩阵,Y是X进行二维傅立叶变换后的图像矩阵;X和Y大小相同。在Y=fft2(X,M,N)中,按照M、N指定的值对图像进行剪切或补0后进行傅立叶变换,返回变换矩阵的大小为M×N。变换结果的左上、右上、左下、右下四个角的周围对应于低频成分,中央部位对应于高频成分。②函数:fftn——用于计算n维傅立叶变换。调用格式:Y=fftn(X);Y=fftn(X,SIZE);其中Y=fftn(X)计算图像的n维傅立叶变换,输出图像Y与X大小相同。在Y=fftn(X,SIZE)函数中,按照SIZE指定的值对图像X进行剪切或补0后进行傅立叶变

1 / 35
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功