多媒体技术数字图像的初步操作.docx
《多媒体技术数字图像的初步操作.docx》由会员分享,可在线阅读,更多相关《多媒体技术数字图像的初步操作.docx(16页珍藏版)》请在冰点文库上搜索。
多媒体技术数字图像的初步操作
实验二数字图像的初步操作
一、实验目的
1、初步掌握MATLAB语言的基本用法
2、掌握MATLAB语言中图像数据与信息的读取方法;
3、掌握图像的基本类型,了解常用图像格式:
数据的格式,有图像和示例,图像类型之间的转换,图像的基本存储格式
4、掌握在MATLAB中绘制灰度直方图的方法。
二、实验原理
MATLAB是集数值计算,符号运算及图形处理等强大功能于一体的科学计算语言。
作为强大的科学计算平台,它几乎能够满足所有的计算需求。
MATLAB软件具有很强的开放性和适用性。
在保持内核不便的情况下,MATLAB可以针对不同的应用学科推出相应的工具箱(toolbox)。
目前,MATLAB已经把工具箱延伸到了科学研究和工程应用的诸多领域,诸如数据采集、概率统计、信号处理、图像处理和物理仿真等,都在工具箱(Toolbox)家族中有自己的一席之地。
在实验中我们主要用到MATLAB提供图像处理工具箱(ImageProcessingToolbox)。
1、MATLAB与数字图像处理
MATLAB全称是MatrixLaboratory(矩阵实验室),一开始它是一种专门用于矩阵数值计算的软件,从这一点上也可以看出,它在矩阵运算上有自己独特的特点。
实际上MATLAB中的绝大多数的运算都是通过矩阵这一形式进行的。
这一特点也就决定了MATLAB在处理数字图像上的独特优势。
理论上讲,图像是一种二维的连续函数,然而在计算机上对图像进行数字处理的时候,首先必须对其在空间和亮度上进行数字化,这就是图像的采样和量化的过程。
二维图像进行均匀采样,就可以得到一幅离散化成M×N样本的数字图像,该数字图像是一个整数阵列,因而用矩阵来描述该数字图像是最直观最简便的了。
而MATLAB的长处就是处理矩阵运算,因此用MATLAB处理数字图像非常的方便。
MATLAB支持五种图像类型,即索引图像、灰度图像、二值图像、RGB图像和多帧图像阵列;支持BMP、GIF、HDF、JPEG、PCX、PNG、TIFF、XWD、CUR、ICO等图像文件格式的读,写和显示。
MATLAB对图像的处理功能主要集中在它的图像处理工具箱(ImageProcessingToolbox)中。
图像处理工具箱是由一系列支持图像处理操作的函数组成,可以进行诸如几何操作、线性滤波和滤波器设计、图像变换、图像分析与图像增强、二值图像操作以及形态学处理等图像处理操作。
2、图像的基本类型和常见格式
首先介绍一个重要概念重要概念,调色板,它是包含不同颜色的颜色表,每一种颜色以红绿蓝三种颜色的组合来表示,图像的每一个像素对应一个数字,而该数字对应调色板重点一种颜色,如某像素值为1表示给颜色为调色板的编号为1的颜色。
调色板的单元个数是与图像的颜色书相对应当,256色图像的调色板就有256各单元。
真彩色图像的每个像素值直接用RGB三个字节来表示颜色,因此不需要调色板。
注意对于16色或256色图像并非全部的图像都采用相同的16中或256中颜色,由于调色板中定义的颜色不同用到的颜色是千差万别的,所谓16色或256色,只是表示该幅图像最多只能有16种颜色或256种颜色,不同的图像有不同的调色板。
图像格式指的是存储图像采用的文件格式。
不同的操作系统,不同的图像处理软件所支持的图像格式都有可能不同。
实际应用中经常会见到以下几种图像格式:
●BMP格式:
BMP格式是Windows操作系统中的标准图像文件格式,能够被多种Windows应用程序所支持,并被广泛应用。
这种格式的特点是包含的图像信息较丰富,几乎不进行压缩,但由此导致了它与生俱生来的缺点——占用磁盘空间过大。
它有这样一些特点:
该结构只能存放一幅图像;只能存储四种图像数据:
单色16色256色真彩色;图像数据有压缩或不压缩两种处理方式;调色板的数据存储结构较为特殊,其存储格式不是固定的,而是与文件头的某些具体参数密切相关。
BMP图像文件的文件结构可分为三部分:
表头调色板和图像数据.表头固定54字节,只有真彩色BMP图像文件内没有调色板数据,其余不超过256种颜色的图像文件都必须色定调色板信息。
●GIF格式:
GIF格式是美国一家著名的在线信息服务机构CompuServe针对当时网络传输带宽的限制,开发出的一种图像格式。
它的特点是压缩比高,磁盘空间占用较少,所以这种图像格式迅速得到了广泛的应用。
最初的GIF只是简单地用来存储单幅静止图像(称为GIF87a),后来随着技术发展,可以同时存储若干幅静止图像进而形成连续的动画,使之成为当时支持2D动画为数不多的格式之一(称为GIF89a),而在GIF89a图像中可指定透明区域,使图像具有非同一般的显示效果,这更使GIF风光十足。
但GIF有个小小的缺点,即不能存储超过256色的图像。
此外,考虑到网络传输中的实际情况,GIF图像格式还增加了渐显方式,即在图像传输过程中,用户可以先看到图像的大致轮廓,然后随着传输过程的继续而逐步看清图像中的细节部分,从而适应了用户的“从朦胧到清楚”的观赏心理。
●JPEG格式与JPEG2000格式:
JPEG格式也是常见的一种图像格式,由联合图像专家小组开发。
它用有损压缩方式去除冗余的图像和彩色数据,获取得极高的压缩率的同时能展现十分丰富生动的图像,即可以用最少的磁盘空间得到较好的图像质量。
同时,JPEG格式具有调节图像质量的功能,允许用不同的压缩比例对这种文件压缩,比如我们最高可以把1.37MB的BMP位图文件压缩至20.3KB。
实际使用中,需要我们在图像质量和文件尺寸之间找到平衡点。
JPEG2000格式作为JPEG格式的升级版,其压缩率比JPEG高约30%左右。
与JPEG不同的是,JPEG2000同时支持有损和无损压缩。
此外,JPEG2000的一个极其重要的特征在于它能实现渐进传输,这一点与GIF的“渐显”有异曲同工之妙,即先传输图像的轮廓,然后逐步传输数据,不断提高图像质量,让图像由朦胧到清晰显示,而不必是像原来的JPEG一样,由上到下慢慢显示。
●TIFF格式:
TIFF格式是苹果机中广泛使用的图像格式,它由Aldus和微软联合开发,最初是出于跨平台存储扫描图像的需要而设计的。
它的特点是图像格式复杂、存贮信息多,便于在Mac和PC机上移植。
正因为它存储的图像细微层次的信息非常多,图像的质量也得以提高,故而非常有利于原稿的复制。
该格式有压缩和非压缩二种形式。
●PSD格式:
PSD格式是著名的Adobe公司的图像处理软件Photoshop的专用格式。
它其实是Photoshop进行平面设计的一张“草稿图”,它里面包含有各种图层、通道和遮罩等多种设计的样稿,以便于每次打开文件时可以修改前一次的设计。
在Photoshop所支持的各种图像格式中,PSD的存取速度比其它格式快很多,功能也很强大。
●PNG格式:
PNG格式是一种新兴的网络图像格式。
在1994年底,由于Unysis公司宣布GIF拥有专利的压缩方法,要求开发GIF软件的作者须缴交一定费用,由此促使免费的PNG图像格式的诞生。
1996年由PNG向国际网络联盟提出并得到推荐认可标准,目前大部分绘图软件和浏览器开始支持PNG格式图像浏览。
PNG格式是目前保证最不失真的格式,它汲取了GIF和JPG二者的优点,存贮形式丰富,兼有GIF和JPG的色彩模式;能把图像文件压缩到极限以利于网络传输,但又能保留所有与图像品质有关的信息,因为PNG格式是采用无损压缩方式来减少文件的大小,这一点与牺牲图像品质以换取格式高压缩率的JPG格式有所不同;它显示速度很快,只需下载1/64的图像信息就可以显示出低分辨率的预览图像;PNG格式同样支持透明图像的制作,让图像和网页背景很和谐地融合在一起。
PNG的缺点是不支持动画应用效果,如果在这方面能有所加强,简直就可以完全替代GIF和JPEG了。
Macromedia公司的Fireworks软件的默认格式就是PNG。
●SVG格式:
SVG格式是基于XML,由WorldWideWebConsortium(W3C)联盟进行开发的。
严格来说应该是一种开放标准的矢量图形语言,用户可以直接用代码来描绘图像,可以用任何文字处理工具打开SVG图像,通过改变部分代码来使图像具有交互功能,并可以随时插入到HTML中通过浏览器来观看。
它提供了目前网络流行格式GIF和JPEG无法具备的优势:
可以任意放大图形显示,但绝不会以牺牲图像质量为代价;字在SVG图像中保留可编辑和可搜寻的状态;SVG文件比JPEG和GIF格式的文件要小很多,因而下载更快。
●其它非主流图像格式:
ØPCX格式:
PCX格式是ZSOFT公司在开发图像处理软件Paintbrush时开发的一种格式,这是一种经过压缩的格式,占用磁盘空间较少。
由于该格式出现的时间较长,并且具有压缩及全彩色的能力,所以现在仍比较流行。
ØDXF格式:
DXF格式是AutoCAD中的矢量文件格式,它以ASCII码方式存储文件,在表现图形的大小方面十分精确。
许多软件都支持DXF格式的输入与输出。
ØWMF格式:
WMF是Windows中常见的一种图元文件格式,属于矢量文件格式。
它具有文件短小、图案造型化的特点,整个图形常由各个独立的组成部分拼接而成,其图形往往较粗糙。
ØEMF格式:
EMF格式是微软公司为了弥补使用WMF的不足而开发的一种Windows32位扩展图元文件格式,也属于矢量文件格式,其目的是欲使图元文件更加容易接受。
ØEPS格式:
EPS是苹果机用户用得较多的一种格式。
它是用PostScript语言描述的一种ASCII码文件格式,主要用于排版、打印等输出工作。
ØTGA格式:
TGA格式是由美国Truevision公司为其显示卡开发的一种图像文件格式,已被国际上的图形图像工业所接受。
TGA的结构比较简单,属于一种图形图像数据的通用格式,在多媒体领域有着很大影响,是计算机生成图像向电视转换的一种首选格式。
图像类型是指数组数值与像素颜色之间定义的关系,注意其与图像格式概念的区别。
各类型的特点和区别见教材P4-6。
3、MATLAB语言的基本操作
MATLAB语言是一种运算纸型的运算语言,其特点就是与平时在运算纸上书写运算的形式相同,这使得它成为一种比较容易掌握的语言;其变量均以矩阵向量形式表示(单独一个数据可以认为是一维向量);其程序语法类似于C语言,只要有一点C语言基础的人可以很快掌握。
针对数字图像处理的需要,可以重点掌握以下几个内容:
矩阵、向量的输入和操作(包括如何输入一个矩阵,如何产生一个全零全一的矩阵,如何对一个矩阵的行列元素进行读取、写入);矩阵与向量的基本运算(包括加、减、点乘等)
主要介绍一下如何读取矩阵的指定行或指定列,举例说明:
x=4:
6%产生一个一维数组,范围从4到6,步长为1
x=
456
插入:
通过对x进行插入运算创建矩阵A
>>A=[x-3;x;x+3]%当然也可以用别的方法产生A矩阵此处只作为示例
A=
123
456
789
提取:
提取A的前两行和后两列形成矩阵C。
>>C=A(1:
2,2:
3)
C=
23
56
置零:
将矩阵A的第二行第二列的元素置零
>>A(2,2)=0
A=
123
406
789
将矩阵A的第一列全置1
A(:
1)=1
A=
123
106
189
强调一下矩阵的乘法与矩阵的点乘的不同,举例说明:
A=eye
(2)%产生二维单位矩阵
A=
10
01
>>B=[1,2;3,4]%直接法输入矩阵
B=
12
34
>>A+B%求A与B的和(符合矩阵求和原则)
ans=
22
35
>>A.*B%求A与B的点积(即两矩阵中对应元素分别相乘
ans=
10
04
>>A*B%求A与B的乘积(符合矩阵乘积原则A的列数与B的行数相等)
ans=
12
34
其他的一些用法请参考资料《matlab简单教程》。
注意:
由于实验室的管理规定所有的程序不能存在C盘和D盘,因此请大家在E盘建一个目录(matlab),在每次启动时都要将这个目录加入到MATLAB的搜索路径中,添加的方法为File----SetPath----Tool---AddPath
4、MATLAB中图像处理的一些简单函数
A、imread
imread函数用于读入各种图像文件,其一般的用法为
[X,MAP]=imread(‘filename’,‘fmt’)
其中,X,MAP分别为读出的图像数据和颜色表数据,fmt为图像的格式,filename为读取的图像文件(可以加上文件的路径)。
例:
[X,MAP]=imread(’flowers.tif’,’tif’);
比较读取二值图像,灰度图像,索引图像,彩色图像的X和MAP的特点,可以利用size函数用来显示数组的维数,了解数据的特点。
B=size(a)返回数组a的维数。
B、imwrite
imwrite函数用于输出图像,其语法格式为:
imwrite(X,map,filename,fmt)
imwrite(X,map,filename,fmt)按照fmt指定的格式将图像数据矩阵X和调色板map写入文件filename。
C、imfinfo
imfinfo函数用于读取图像文件的有关信息,其语法格式为
imfinfo(filename,fmt)
imfinfo函数返回一个结构info,它反映了该图像的各方面信息,其主要数据包括:
文件名(路径)、文件格式、文件格式版本号、文件的修改时间、文件的大小、文件的长度、文件的宽度、每个像素的位数、图像的类型等。
例:
imfinfo('rice.tif')
ans=
Filename:
'D:
\MATLAB6p1\toolbox\images\imdemos\rice.tif'
FileModDate:
'26-Oct-199606:
11:
58'
FileSize:
65966
Format:
'tif'
FormatVersion:
[]
Width:
256
Height:
256
BitDepth:
8
ColorType:
'grayscale'
FormatSignature:
[7373420]
ByteOrder:
'little-endian'
NewSubfileType:
0
BitsPerSample:
8
Compression:
'Uncompressed'
PhotometricInterpretation:
'BlackIsZero'
StripOffsets:
[8x1double]
SamplesPerPixel:
1
RowsPerStrip:
32
StripByteCounts:
[8x1double]
XResolution:
72
YResolution:
72
ResolutionUnit:
'Inch'
Colormap:
[]
PlanarConfiguration:
'Chunky'
TileWidth:
[]
TileLength:
[]
TileOffsets:
[]
TileByteCounts:
[]
Orientation:
1
FillOrder:
1
GrayResponseUnit:
0.0100
MaxSampleValue:
255
MinSampleValue:
0
Thresholding:
1
ImageDescription:
[1x166char]
5、MATLAB中图像文件的显示
imshow
imshow函数是最常用的显示各种图像的函数,其语法如下:
imshow(X,map)
其中X是图像数据矩阵,map是其对应的颜色矩阵,若进行图像处理后不知道图像数据的值域可以用[]代替map。
(1)二进制(二值)图像显示方法,在MATLAB中一幅二值图像是uint8或双精度的,该矩阵仅包含0和1。
如果希望工具箱中的函数能将图像理解为二进制的,那么所有数据都要是逻辑数据,必须对其进行设置(将所有数据标志均设置on).可以对数据利用“~”取反操作实现图像逆转即黑白反色。
(2)灰度图像的显示方法,正常情况下无需指定灰度图像的调色板格式。
可以是使用imshow函数指定要显示灰度级数目,格式imshow(I,n),n为指定的灰度级数目。
用户也可以指定数据的范围,格式imshow(I,[lowhigh])其中low和high参数分别为数据数组的最小值和最大值。
如果为空矩阵([]),那么imshow函数将自动进行数据标度。
(3)索引图像,imshow(x,map)对于x的每个个像素,imshow显示存储map中相应行的颜色。
(4)RGB图像的显示,它直接对颜色进行描述而不使用调色板,格式imshow(RGB)。
RGB(:
,:
,1)RGB(:
,:
,2)RGB(:
,:
,3)
(5)
特殊显示,如多幅图像的显示,需要显示多幅图像时。
可以使用figure语句,它的功能就是重新打开一个图像显示窗口。
例:
I=imread(‘rice.tif’);
Imshow(I);
J=imread(‘flowers.tif’);
figure,imshow(J);
也可以将多幅图像显示在同一个单独的图像窗口中,有两种方法:
一种是联合imshow和subplot函数;另一种是联合使用subimage函数和subplot函数,subplot(m,n,p)这种格式将图形窗口划分为m*n个矩形显示区域并激活第p个显示区域。
A
[x1,map1]=imread('trees.tif');
[x2,map2]=imread('forest.tif');
subplot(1,2,1),imshow(x1,map1)
subplot(1,2,2),imshow(x2,map2)
B
[x1,map1]=imread('trees.tif');
[x2,map2]=imread('forest.tif');
subplot(1,2,1),subimage(x1,map1)
subplot(1,2,2),subimage(x2,map2)
6、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)
6、图像类型转换:
图像类型之间的转换有时非常有用。
MATLAB提供的图像类型转换函数
函数
功能
dither
使用抖动方法,根据灰度图像船舰二进制图像和根据RGB图像创建索引图像
gray2ind
根据一幅灰度图像创建索引图像
grayslice
使用阈值截取方法,根据一幅灰度图像创建索引图像
im2bw
使用阈值截取方法,根据一幅灰度图像,索引图像或RGB图像创建二进制图像
ind2gray
根据一幅索引图像创建一幅灰度图像
ind2rgb
根据一幅索引图像创建一幅RGB图像
mat2gray
通过数据缩放,在根据矩阵数据创建一幅灰度图像
rgb2gray
根据一幅RGB图像创建一幅灰度图像
rgb2ind
根据一幅RGB图像创建一幅索引图像
上表中函数有类似的调用格式:
函数的输入参数是图像数据矩阵(如果是索引图像,那么输入参数还包括调色板),返回值是转换后的函数(包括索引函数的调色板),只有函数im2bw的调用格式不同,其输入参数中还包括一个截取阈值,超过此阈值的像素被截取为1否则为0。
示例:
A、loadtrees
BW=im2bw(X,map,0.4);
imview(X,map),imview(BW)
B、
I=imread('snowflakes.png');
X=grayslice(I,16);
imview(I)
imview(X,jet(16))
7、MATLAB还提供了图像存储类型之间的转换函数,这些函数包含im2doble、im2uint8
和im2uint16,这些函数可以自动的进行原始数据的重新标度和偏移.调用格式简单,输入为图像矩阵,输出为转换后的图像:
如:
以下命令将一个描述双精度RGB1图像的矩阵(数据范围为[0,1]转换为uint8的图像矩阵([0,255]范围内)RGB2=im2uint8(rgb1);也可以使用MATLAB函数对图像存储类型进行转换。
例如,double函数可以将uint8或uint16的数据转化为双精度数据。
存储类型之间的转变将改变matlab及其工具箱理解图像数据的方式,如果用户希望转换后得到的数组能够被正确的理解为图像数据,那么转换时需要重新标度或偏移数据。
当使用较少的类型来描述数字图像时,通常可能丢失用户图像的一些信息。
9、图像格式之间的转换,可以间接利用图像读写函数来完成;首先使用imread函数按照原有的图像格式进行图像读取,然后调用imwrite函数对图像进行保存,并指定图像的保存格式。
如将BMP格式转换为PNG格式,
bitmap=imread(‘mybitmap,bmp’,’bmp’)
imwrite(bitmap,‘mybitmap,png’,’png’)
三、实验要求
1、掌握实验的原理,熟悉所给的几个简单函数的使用。
2、用MATLAB在自建的文件夹中建立example1.m文件,在这个文件的程序中,将MATLAB目录下的pout.tif图像文件读出,用到imread,imfinfo等文件,观察一下图像数据,了解一下数字图像在MATLAB中的处理就是处理一个矩阵。
将这个图像显示出来(用imshow),尝试修改map颜色矩阵的值,再将图像显示出来,观察图像颜色的变化。
(用figure函数再打开一个图像对话框)。
打开PIC文件夹下的文件,观察图像数据的特点,体会彩色图像、索引图像、灰度图像各自数据的特点。
3、选择一幅图像进行图像类型和格式之间的转换。
4、用MATLAB在自建的文件夹中建立example2.m文件,在这个文件的程序中,将pic目录下文件夹中的rice.png图像文件读出,显示它的图像及灰度直方图,根据你对直方图的理解,编程实现直方图的显示。