当前位置:文档之家› 实验一图像处理基本操作

实验一图像处理基本操作

实验一图像处理基本操作一、 实验目的1、熟悉并掌握在MATLAB中进行图像类型转换及图像处理的基本操作。

2、熟练掌握图像处理中的常用数学变换。

二、实验设备1、计算机1台2、MATLAB软件1套3、实验图片三、实验原理1、数字图像的表示和类别一幅图像可以被定义为一个二维函数f(x,y),其中x和y是空间(平面)坐标,f在坐标(x,y)处的幅度称为图像在该点的亮度。

灰度是用来表示黑白图像亮度的一个术语,而彩色图像是由若干个二维图像组合形成的。

例如,在RGB彩色系统中,一幅彩色图像是由三幅独立的分量图像(红、绿、蓝)组成的。

因此,许多为黑白图像处理开发的技术也适用于彩色图像处理,方法是分别处理三幅独立的分量图像即可。

图像关于x和y坐标以及幅度连续。

要将这样的一幅图像转化为数字形式,就要求数字化坐标和幅度。

将坐标值数字化称为取样,将幅度数字化称为量化。

采样和量化的过程如图1所示。

因此,当f的x、y分量和幅度都是有限且离散的量时,称该图像为数字图像。

作为MATLAB基本数据类型的数组十分适于表达图像,矩阵的元素和图像的像素之间有着十分自然的对应关系。

图1 图像的采样和量化图1 采样和量化的过程根据图像数据矩阵解释方法的不同,MATLAB把其处理为4类:✧亮度图像(Intensity images)✧二值图像(Binary images)✧索引图像(Indexed images)✧ RGB图像(RGB images)(1) 亮度图像一幅亮度图像是一个数据矩阵,其归一化的取值表示亮度。

若亮度图像的像素都是uint8类型或uint16类型,则它们的整数值范围分别是[0,255]和[0,65536]。

若图像是double 类型,则像素取值就是浮点数。

规定双精度double型归一化亮度图像的取值范围是[0 1]。

(2) 二值图像一幅二值图像是一个取值只有0和1的逻辑数组。

而一幅取值只包含0和1的uint8类型数组,在MATLAB中并不认为是二值图像。

使用logical函数可以把数值数组转化为逻辑数组。

创建一个逻辑图像,其语法为:B=logical(A)其中,A是由0和1构成的数值数组。

(3) 索引图像索引颜色通常也称为映射颜色,在这种模式下,颜色都是预先定义的,并且可供选用的一组颜色也很有限,索引颜色的图像最多只能显示256种颜色。

一幅索引颜色图像在图像文件里定义,当打开该文件时,构成该图像具体颜色的索引值就被读入程序里,然后根据索引值找到最终的颜色。

(4) RGB图像一幅RGB图像就是彩色像素的一个M×N×3数组,其中每一个彩色像素点都是在特定空间位置的彩色图像相对应的红、绿、蓝三个分量。

按照惯例,形成一幅RGB彩色图像的三个图像常称为红、绿和蓝分量图像。

2、数据类型表1列出了MATLAB为表示像素所支持的各种数据类型。

表中前8项称为数值数据类型,第9项称为字符类型,最后一项称为逻辑数据类型。

表1 数据类型名称描述double 双精度浮点数,范围:-10308 ~ 10308uint8 无符号8 bit整数,范围:0 ~ 255uint16 无符号16 bit整数,范围:0 ~ 65536uint32 无符号32 bit整数,范围:0 ~ 4294967295int8 有符号8 bit整数,范围:-128 ~ 127int16 有符号16 bit整数,范围:-32768 ~ 32767int32 有符号32 bit整数,范围:-2147483648 ~ 2147483647single 单精度浮点数,范围为:-10308 ~ 10308char 字符logical 值为0或13、图像文件的读、写和显示(1) 读图像imread函数用于读入各种图像文件,其一般的用法为[X,MAP]=imread( ‘filename’, ‘fmt’)其中,X为读出的图像数据,MAP为颜色表数据(或称调色板,亦即颜色索引矩阵,对灰度图像和RGB彩色图像,该MAP为空矩阵),fmt为图像的格式(可以缺省),filename 为读取的图像文件(可以加上文件的路径)。

例:[X,MAP]=imread(‘flowers.tif’, ‘tif’)(2) 写图像imwrite函数用于输出图像,其语法格式为:imwrite(X, MAP, filename, fmt)imwrite(X, MAP, filename, fmt) 按照fmt指定的格式将图像数据矩阵X和调色板MAP 写入文件filename。

(3) 显示图像MATLAB图像处理工具箱提供了imshow函数来显示各种图像,其语法如下:imshow(I, n)或imshow(I_BW);imshow(X, MAP);imshow(I_RGB)其中imshow(I, n)用于显示灰度图像,I是图像数据矩阵,n为灰度级数目(n可缺省,缺省值为256)。

其它的分别用于显示二值图像、索引色图像和RGB真彩色图像。

另外,对RGB彩色图像,还可以用imshow( RGB(:, :, 1) )、imshow( RGB(:, :, 2) )、imshow( RGB(:, :, 3) )分别显示RGB图像的R、G、B三个分量(注意:这样显示出的图像是以各分量值为对应的灰度值所显示的灰度图像)。

需要显示多幅图像时,可以使用figure语句,它的功能就是打开一个新的图像显示窗口。

也可以使用subplot函数将多幅图像显示在同一个图像显示窗口的不同区域位置。

例:I=imread(‘rice.tif’);imshow(I);J=imread(‘flowers.tif’);figure, imshow(J);4、图像类型的转化图像的类型主要有二值图像、灰度图像、索引图像和RGB彩色图像。

一幅图像的类型可以根据读入的图像数据的特点加以判断。

假设图像“flowers.tif”的大小为N×M,读取图像[X,MAP]=imread(’flowers.tif’, ’tif’)。

对灰度图像来说:X为N×M矩阵、MAP为空矩阵;对索引图像:X为N×M矩阵,而MAP不是空矩阵,一般为256×3矩阵;对RGB图像:X为N×M×3三维矩阵,MAP为空矩阵。

另外根据用imfinfo函数读取的图像文件的有关信息也可以确定图像的类型。

图像类型之间的转换有时非常有用。

表2是MATLAB提供的图像类型转换函数。

表2 MATLAB提供的图像类型转换函数函数功能dither 使用抖动方法,将灰度图像变成二值图像或由RGB图像创建索引图像gray2ind 根据一幅灰度图像创建索引图像grayslice 使用阈值截取方法,根据一幅灰度图像创建索引图像im2bw 使用阈值截取法,将灰度图像、索引图像或RGB图像转换为二值图像ind2gray 根据一幅索引图像创建一幅灰度图像ind2rgb 根据一幅索引图像创建一幅RGB图像mat2gray 通过数据缩放,在根据矩阵数据创建一幅灰度图像rgb2gray 根据一幅RGB图像创建一幅灰度图像rgb2ind 根据一幅RGB图像创建一幅索引图像上表中函数有类似的调用格式:函数的输入参数是图像数据矩阵(如果是索引图像,那么输入参数还包括调色板),返回值是转换后的图像(包括索引图像的调色板),只有函数im2bw的调用格式不同,其输入参数中还包括一个截取阈值,超过此阈值的像素被截取为1否则为0。

如:“[I_RGB, MAP]=imread('flowers.tif'); I_GRAY=rgb2gray(I_RGB);”将RGB图像转换为灰度图像。

5、代数运算设定A(x,y)和B(x,y)为输入图像,C(x,y)为输出图像。

(1) 加法运算C ( x , y ) = A ( x , y ) + B ( x , y )(2) 减法运算C ( x , y ) = A ( x , y ) —B ( x , y )(3) 乘法运算C ( x , y ) = A ( x , y ) ×B ( x , y )(4) 除法运算C ( x , y ) = A ( x , y ) / B ( x , y )图像相加的一个重要应用是对同一场景的多幅图像求平均值。

这点被经常用来有效地降低加性随机噪声的影响。

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

对M幅图像进行平均,使图像中每一点的平方信噪比提高了M倍,幅度信噪比是功率信噪比的平方根,因此达到了提高信噪比降低噪声的作用。

在MATLAB中,可人为地往一幅图像中加入随机噪声,并通过多次相加求平均的方法降低所加入的噪声对图像的影响。

MATLAB中提供了给图像加入噪声的函数imnoise,imnoise的语法格式为J = imnoise(I, type)J = imnoise(I, type, parameters)其中J = imnoise(I, type)返回对原始图像I添加典型噪声的有噪图像J。

参数type和parameters 用于确定噪声的类型和相应的参数。

例: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('加乘性噪声');代数运算中需要有若干幅带有随机噪声的图像数据,在这里我们运用MATLAB中的FOR循环语句来完成产生多幅带有噪声的图像数据及将这些图像数据进行相加运算。

MATLAB中FOR END循环的用法如下:for end循环这种循环允许一组命令以固定的和预定的次数重复,循环的一般形式为:for variable = expressionstatementsend例:图像加噪声再通过多次相加求平均的方法去除噪声[I, M] = imread('eight.tif');J = imnoise(I, 'gaussian', 0, 0.02);subplot(1,2,1), imshow(I), title('原图像');subplot(1,2,2), imshow(J), title('加噪声后图像');[m, n] = size(I);K = zeros(m, n);for i = 1 : 100J = imnoise(I, 'gaussian', 0, 0.02);J1 = im2double(J);K = K + J1;endK = K / 100; %求图像的平均figure; imshow(K), title('相加求平均后的图像');6、几何运算(1) 图像的缩放MATLAB图像处理工具箱中的函数imresize可以用上述的三种方法对图像进行插值缩放,如果不指定插值方法,则默认为最邻近插值法。

相关主题