matlab图像处理基础

2022-11-09 09:40:28 浏览数 (1)

大家好,又见面了,我是你们的朋友全栈君。

1、MATLAB中图象数据的读取 A、 imread imread函数用于读入各种图象文件,其一般的用法为 [X,MAP]=imread(‘filename’,‘fmt’) 其中,X,MAP分别为读出的图象数据和颜色表数据,fmt为图象的格式,filename为读取的图象文件(可

以加上文件的路径)。 例:[X,MAP]=imread(’flowers.tif’,’tif’); B、 imwrite imwrite函数用于输出图象,其语法格式为: imwrite(X,map,filename,fmt)按照fmt指定的格式将图象数据矩阵X和调色板map写入文件filename。 C、 imfinfo imfinfo函数用于读取图象文件的有关信息,其语法格式为 imfinfo(filename,fmt) imfinfo函数返回一个结构info,它反映了该图象的各方面信息,其主要数据包括:文件名(路径)、文

件格式、文件格式版本号、文件的修改时间、文件的大小、文件的长度、文件的宽度、每个像素的位数

、图象的类型等。 例: imfinfo(‘rice.tif’) ans =            Filename: ‘C:MATLAB6p5toolboximagesimdemosrice.tif’          FileModDate: ’26-Oct-1996 06:11:58′           FileSize: 65966             Format: ‘tif’         FormatVersion: []             Width: 256             Height: 256            BitDepth: 8           ColorType: ‘grayscale’        FormatSignature: [73 73 42 0]           ByteOrder: ‘little-endian’         NewSubfileType: 0         BitsPerSample: 8          Compression: ‘Uncompressed’   PhotometricInterpretation: ‘BlackIsZero’          StripOffsets: [8×1 double]        SamplesPerPixel: 1          RowsPerStrip: 32        StripByteCounts: [8×1 double]          XResolution: 72          YResolution: 72         ResolutionUnit: ‘Inch’            Colormap: []      PlanarConfiguration: ‘Chunky’           TileWidth: []           TileLength: []          TileOffsets: []         TileByteCounts: []          Orientation: 1           FillOrder: 1       GrayResponseUnit: 0.0100         MaxSamplev alue: 255         MinSamplev alue: 0          Thresholding: 1 ImageDescription: [1×166 char] 2、 MATLAB中图象文件的显示 imshow imshow函数是最常用的显示各种图象的函数,其语法如下: imshow(X,map) 其中X是图象数据矩阵,map是其对应的颜色矩阵,若进行图象处理后不知道图象数据的值域可以用[]代

替map。 需要显示多幅图象时,可以使用figure语句,它的功能就是重新打开一个图象显示窗口。 例: I=imread(‘rice.tif’); Imshow(I); J=imread(‘flowers.tif’); figure,imshow(J); 3、MATLAB中灰度直方图的显示 MATLAB图象处理工具箱提供了imhist函数来计算和显示图象的直方图,imhist函数的语法格式为: imhist(I,n) imhist(X,map) 其中imhist(I,n)计算和显示灰度图象I的直方图,n为指定的灰度级数目,默认值为256。imhist(X,map)

计算和显示索引色图象X的直方图,map为调色板。 例: I = imread(‘rice.tif’); imshow(I) figure, imhist(I) 4、对比度增强 如果原图象f(x,y)的灰度范围是[m,M],我们希望调整后的图象g(x,y)的灰度范围是[n,N],那么下

述变换,,就可以实现这一要求。 MATLAB图象处理工具箱中提供的imadjust函数,可以实现上述的线性变换对比度增强。Imadjust函数的

语法格式为: J = imadjust(I,[low_in high_in],[low_out high_out]) J = imadjust(I,[low_in high_in],[low_out high_out])返回图象I经过直方图调整后的图象J,

[low_in high_in]为原图象中要变换的灰度范围,[low_out high_out]指定了变换后的灰度范围。 例: I = imread(‘pout.tif’); J = imadjust(I,[0.3 0.7],[]); imshow(I), figure, imshow(J) 5、实验要求 copy两个图形文件girl1.bmp和girl2.bmp到MATLAB目录下work文件夹中。 1、 将MATLAB目录下work文件夹中的girl.bmp图象文件读出.用到imread,imfinfo等文件,观察一下图

象数据,了解一下数字图象在MATLAB中的处理就是处理一个矩阵。将这个图象显示出来(用imshow),

尝试修改map颜色矩阵的值,再将图象显示出来,观察图象颜色的变化。 2、 将MATLAB目录下work文件夹中的girl2.bmp图象文件读出,显示它的图象及灰度直方图,可以发现其

灰度值集中在一段区域,用imadjust函数将它的灰度值调整到[0,1]之间,并观察调整后的图象与原图

象的差别,调整后的灰度直方图与原灰度直方图的区别。

实验二 图像运算

本实验是综合性实验,涵盖Matlab程序设计、图像点运算、代数运算、几何运算等多章基本知识及

其应用。需四个学时。 一、实验目的与要求  理解图像点运算、代数运算、几何运算的基本定义和常见方法;  掌握在MTLAB中对图像进行点运算、代数运算、几何运算的方法;  掌握在MATLAB中进行插值的方法  运用MATLAB语言进行图像的插值缩放和插值旋转  进一步熟悉了解MATLAB语言的应用。 二、实验原理与功能 点运算是通过对图像中每个像素值进行计算,改善图像显示效果的操作,也称对比度增强,对比度拉伸,灰

度变换.可以表示为B(x,y)=f(A(x,y)).进行逐点运算,输入映射为输出,不改变图像像素的空间关系.   代数运算是指对两幅输入图像进行点对点的加、减、乘或除运算而得到输出图像的运算。对于相加

和相乘的情形,可能不止有两幅图像参加运算。在一般情况下,输入情况之一可能为常数。   四种图像处理代数运算的数学表达式如下: C(x,y)=A(x,y) B(x,y) C(x,y)=A(x,y)-B(x,y) C(x,y)=A(x,y)*B(x,y) C(x,y)=A(x,y)/B(x,y)   其中A(x,y)和B(x,y)为输入图像,而C(x,y)为输出图像。还可以通过适当的组合形成涉及几幅图像的

复合代数运算方程。 在MATLAB中,我们可以用函数简单的得到数字图像的图像数据矩阵(即A(x,y)和B(x,y)),有了这些

矩阵后我们只要适当的设计代数运算的形式并写出方程,就可以得到一个输出图像的矩阵(即C(x,y))

图像相加的一个重要应用是对同一场景的多幅图像求平均值。这点被经常用来有效的降低加性随机噪声

的影响。在求平均值的过程中,图像的静止部分不会改变,而对每一幅图像,各不相同的噪声图案则过

累积很慢。对M幅图像进行平均,使图像中每一点的平方信噪比提高了M倍幅度信噪比是功率信噪比的平

方根,因此达到了提高信噪比降低噪声的作用。 几何运算可改变图像中各物体之间的空间关系。这种运算可以被看成是将(各)物体在图像内移动。

一个几何运算需要两个独立的算法。首先,需要一个算法来定义空间变换本身,用它来描述每个像素如

何从其初始位置“移动”到终止位置,即每个像素的“运动”。同时,还需要一个用于灰度插值的算法

,这是因为,在一般情况下,输入图像的位置坐标(x,y)为整数,而输出图像的位置坐标为非整数,反过

来也如此。因此插值就是对变换之后的整数坐标位置的像素值进行估计。MATLAB提供了一些函数实现这

些功能。 插值是常用的数学运算,通常是利用曲线拟合的方法,通过离散的采样点建立一个连续函数来逼近真

实的曲线,用这个重建的函数便可以求出任意位置的函数值。 最近邻插值是最简便的插值,在这种算法中,每一个插值输出像素的值就是在输入图像中与其最临近

的采样点的值。最近邻插值是工具箱函数默认使用的插值方法,而且这种插值方法的运算量非常小。当

图像中包含像素之间灰度级变化的细微结构时,最近邻插值法会在图像中产生人工的痕迹。 双线性插值法的输出像素值是它在输入图像中2×2领域采样点的平均值,它根据某像素周围4个像素

的灰度值在水平和垂直两个方向上对其插值。 双三次插值的插值核为三次函数,其插值邻域的大小为4×4。它的插值效果比较好,但相应的计算量

也比较大。 MATLAB图像处理工具箱中的函数imresize可以用上述的3种方法对图像进行插值缩放,如果不指定插

值方法,则默认为最邻近插值法。 Imresize函数的语法格式为: B = imresize(A,m,method) 参数method用于指定插值的方法,可选用的值为’nearest’(最邻近法),’bilinear’(双线性插值

),’bicubic’(双三次插值),默认为’nearest’。 B = imresize(A,m,method)返回原图A的m倍放大的图像(m小于1时效果是缩小)。 三 实验设计例子与调试 1. 完成人为的往一幅图像中加入噪声,并通过多次相加求平均的方法消除所加入的噪声。 在MATLAB中提供了给图像加入噪声的函数imnoise imnoise的语法格式为 J = imnoise(I,type) J = imnoise(I,type,parameters) 其中J = imnoise(I,type)返回对原始图像I添加典型噪声的有噪图像J。 参数type和parameters用于确定噪声的类型和相应的参数。 下面的命令是对图像eight.tif分别加入高斯噪声、椒盐噪声和乘性噪声,其结果如图所示: 例: I=imread(‘eight.tif’); J1=imnoise(I,’gaussian’,0,0.02); J2=imnoise(I,’salt & pepper’,0.02); J3=imnoise(I,’speckle’,0.02); subplot(2,2,1),imshow(I),title(‘原图像’); subplot(2,2,2),imshow(J1),title(‘加高斯噪声’); subplot(2,2,3),imshow(J2),title(‘加椒盐噪声’); subplot(2,2,4),imshow(J3),title(‘加乘性噪声’); 在上面的例子中使用了一个函数subplot。其作用就是将多幅图像显示再同一幅图像显示对话框中。

其语法格式为: subplot(m,n,p) 其作用就是将一个图像显示对话框分成m行n列,并显示第p幅图像。 在MATLAB程序语言中,分号的用处为不显示程序运算中的中间结果,这在一定程度上使系统运算的效

率增高,因此在不需知道中间结果的情况下,可以用分号作为一个句子的结尾,而不显示该句运算的中

间结果。 代数运算中需要有若干幅带有随机噪声的图像数据,在这里我们运用MATLAB中的FOR循环语句来完成

产生多幅带有噪声的图像数据及将这些图像数据进行相加运算。MATLAB中FOR END循环的用法如下: for end循环 这种循环允许一组命令以固定的和预定的次数重复,循环的一般形式为: for variable = expression   statements end 举例如下: 例: %一个简单的for循环的例子。 for i=1:10;   y(i)=i; end; y       %显示y的结果 y =    1   2   3   4   5   6   7   8   9  10 为了得到最大的速度,在for循环被执行之前,应预先分配数组。例如前面所考虑的第一种情况,在

for循环内每执行一次命令,向量y的维数增加1。这样就使得MATLAB每通过一次循环对y分配更多的内存

,这当然要花费一定的时间。为了可以不执行这个步骤,for循环的例子应重写为: y=zeros(1,10); for i=1:10;   y(i)=i; end; y 在实际的对图像处理过程中,由于我们读出的图像是unit8型,而在MATLAB的矩阵运算中要求所有的

运算变量为double型(双精度型)。因此读出的图像数据不能直接进行相加求平均,因此必须使用一个

函数将图像数据转换成双精度型数据。MATLAB中提供了这样的函数: im2double函数,其语法格式为: I2 = im2double(I1) 其中I1是输入的图像数据,它可能是unit8或unit16型数据,通过函数的变化输出I2为一个double型

数据,这样两图像数据就可以方便的进行相加等代数运算. 作为一个示例,现将刚刚显示的加有噪声的图像进行相加求平均以消除图像的噪声。在图像中我们给

图像加的是均值为0,方差为0.02的高斯噪声,将图像相加了一百遍,再求其平均值。程序如下: %例图像加噪声再通过多次相加求平均的方法祛除噪声 [I,M]=imread(‘eight.tif’); J=imnoise(I,’gaussian’,0,0.02); subplot(1,2,1),imshow(I,M),title(‘原图像’); subplot(1,2,2),imshow(J,M),title(‘加噪声后图像’); K=zeros(242,308); for i=1:100   J=imnoise(I,’gaussian’,0,0.02);   J1=im2double(J);   K=K J1; end K=K/100;  %求图像的平均 figure;imshow(K),title(‘相加求平均后的图像’); 例子2 Imresize函数的语法格式为: B = imresize(A,m,method) 这里参数method用于指定插值的方法,可选用的值为’nearest’(最邻近法),’bilinear’(双线性插值

),’bicubic’(双三次插值),默认为’nearest’。 B = imresize(A,m,method)返回原图A的m倍放大的图像(m小于1时效果是缩小)。 例: I=imread(‘ic.tif’); J = imresize(I,1.25); imshow(I),title(‘原图像’) figure,imshow(J),title(‘放大后的图像’) 在工具箱中的函数imrotate可用上述三种方法对图像进行插值旋转,默认的插值方法也是最邻近插值

法。 Imrotate的语法格式为: B = imrotate(A,angle,method 函数imrotate对图像进行旋转,参数method用于指定插值的方法,,可选用的值为’nearest’(最邻

近法),’bilinear’(双线性插值),’bicubic’(双三次插值),默认为’nearest’。一般说来旋转后

的图像会比原图大,超出原图部分值为0。 例: I=imread(‘rice.tif’); J=imrotate(I,30,’bilinear’); imshow(I);title(‘原图像’) figure,imshow(J),title(‘旋转后的图像’)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/186006.html原文链接:https://javaforall.cn

0 人点赞