织梦CMS - 轻松建站从此开始!

罗索

MATLAB在数字图像处理中的应用

落鹤生 发布于 2012-03-14 15:51 点击:次 
MATLAB对于我来说是一门全新的语言,一般在编辑框中编程存盘后在命令框内运行,在Figure框中显示图像。在用它作数字图像处理的过程中,最常碰到的问题有
TAG:

2.1 几个基本术语

在运用MATLAB进行数字图像处理之前,我们必须明确几个基本术语:

1)位图:是根据图像的尺寸和分辨率创建和保存的图像,由扫描输入。

2)矢量图:使用专用软件绘制的,以数学方程式的方式保存的图像,所以矢量图的清晰度与分辨率无关。

3)象素:是图像在计算机显示中的度量单位,可以变化,可大可小。

4)分辨率:是用于度量图像在显示器中清晰程度的一个参数,分辨率越高,图像越清晰。分辨率是与象素相关的,即单位长度上的象素数就是分辨率。由此可知,分辨率越高,象素的几何尺寸就越小。

5)图像文件的大小:指一幅图像在计算机中保存时所占用的磁盘空间,其大小与所用的颜色模式有关。灰度图像中的每一个灰度象素只占用一个字节(8位),RGB图像中红、绿、蓝各占用一个字节。另外,图像文件的大小也直接与其分辨率有关,原因是当分辨率增加时,一幅图像所包含的象素量急剧增加。

6)句柄:通俗地说就是对象的代号或标志,它能使计算机方便地从众多对象中找到所需要的对象并对之加以相应的操作。MATLAB中的句柄图形对象包括轴、文本、菜单、控制框、图像等。

2.2   MATLAB 图像文件格式简介

针对MATLAB的数字图像处理功能,我们讨论它可以处理的几种图像文件格式:

A)PCX格式。可处理1、4、8、16、24位等图像数据。文件内容包括文件头 、图像数据、扩展调色板数据。

B)BMP格式,即位图文件,整幅图可视为一个数字矩阵。它包括1、4、8、24位非压缩图像,8位RLE(行程编码)图像。文件内容包含文件头、位图信息数据块和图像数据。选择BMP格式保存一幅灰度模式图像时,可选择以Windows格式保存。而且在选中4位或8位位图时,还可选压缩(RLE)项,在用RLE方式压缩保存后图像将毫无损失。这是用得最广的图像格式之一,在本文中都对这种格式的图像进行操作。

C)HDF格式。有8位,24位光栅图像数据集。

D)JPEG格式。是一种联合图像专家组的图像压缩格式,是目前所用对静止灰度或彩色图像的压缩标准。它实际上定义了3种编码系统:

a.基于DCT的有损编码基本系统,可用于绝大多数压缩场合;

b.用于高压缩比、高精度或渐进重建应用的扩展编码系统;

c.用于无失真应用场合的无损系统。JPEG没有规定文件格式、图像分辨率或所用的彩色空间模型,这使它就有可能适用于MATLAB。

D)TIFF格式。处理1、4、8、24位非压缩图像,1、4、8、24位 packbit 压缩图像,1位CCITT压缩图像等。文件内容包括:文件头、参数指针表与参数域、参数数据表和图像数据四部分。它是一种用途广泛的文件格式,其特点是可移植性好,几乎所有的扫描仪及在Windows、Macintosh平台上常用的版面设计软件都支持TIFF文件格式。以这种格式保存的图像文件结构比较复杂,在不压缩存放时文件比较大。

E)XWD格式。1、8位Zpixmaps, Xybitmaps, 1位XYPixmaps。

F)TGA格式。处理1、4、8、16、24位非压缩图像和行程编码图像。文件包由5个固定长度字段和3个可变长度字段组成。

2.3   MATLAB图像文件类型

    根据数据矩阵和图像象素点颜色的匹配关系,MATLAB中的图像可分为三类:索引图像、灰度图像和RGB图像。

1)索引图像:它的数据信息包括一个数据矩阵和一个双精度色图矩阵,它的数据矩阵中的值直接指定该点的颜色为色图矩阵中的某一种。色图矩阵中,每一行表示一种颜色,每行有三个数据,分别表示该种颜色中红、绿、蓝的比例情况,所有元素值都在[0,1]内。

2)灰度图像:它的数据矩阵中的元素值一般都在[0,1]或[0,255]之间,灰度图像根据这些数据利用线性插值来和色图中的颜色种类匹配。

3)RGB图像:图像中每个象素的颜色用三个数据来存储,分别指定红、绿、蓝三原色在象素颜色中的比例关系,组成一个三维数组。

2.4   MATLAB中图像的存储运算和显示方式

在MATLAB中,数值一般都采用double型(64位)存储和运算,为了节省存储空间,MATLAB为图像提供了特殊的数据类型uint8(8位无符号整数),以此方式存储的图像称为8位型像。函数image能够直接显示8位图像,但8位型数据和double型数据在image中意义不一样,对于索引图像,数据矩阵中的值指定该像素的颜色种类在色图矩阵中的行数。当数据矩阵中的值为0时,表示用色图矩阵中第一行表示的颜色绘制;当数据矩阵中的值为1时,表示用色图矩阵中的第二行表示的颜色绘制该像素,数据与色图矩阵中的行数总是相差1。所以,索引图像double型和uint8型在显示方法上没有什么不同,只是8位数据矩阵的值和颜色种类之间有一个偏差1。调用格式均为image(x); colormap(map);对于灰度图像,uint8表示范围[0,255],double型表示范围[0,1]。可见,double型和uint8型灰度图像不一样,二者转换格式为:

I8=uint8 (round (I64*255));

I64=double (I8)/255;

反之,imread根据文件中的图像种类作不同的处理。当文件中的图像为灰度图像时,imread把图像存入一个8位矩阵中,把色图矩阵转换为双精度矩阵,矩阵中每个元素值在[0,1]内;当为RGB图像时,imread把数据存入到一个8位RGB矩阵中。

本软件的处理统一针对BMP格式的灰度图。在编程时图像读入与输出均要求转换为uint8型,中间运算处理过程则要用double型。

2.5  从零开始学用MATLAB

     MATLAB对于我来说是一门全新的语言,一般在编辑框中编程存盘后在命令框内运行,在Figure框中显示图像。在用它作数字图像处理的过程中,最常碰到的问题有:

①     图像读入 imread (‘文件名.格式’,’格式’),必须是上文提过的MATLAB支持的7种格式之一,而用Photoshop制作的PSD图像保存了所有通道和图层的信息,不能直接用MATLAB来处理。显示图像用imshow (h) 语句,h 为图像句柄;在一幅图片中显示子图用subplot规定子图的位置和大小,用subimage(h)输出子图。输出图像若需要永久保存,则可用imwrite (h,map, ’filename.bmp’,’bmp’), 写入存储器。注意在该语句前要设置调色板,即map=(gray(256))。

②     结构化程序语句写法不同于C语言。比如if, for 之后要用end 表示这一块结束。有关条件的语句都不用加括号,而用冒号来表示递增,如

for   i=1:3:10

   表示 i从1以步长3递增到10,即做三次循环。

③     要注意图像格式的转化。须知不同的图像格式对应不同的处理方式,如果处理与格式不符,将引起错误。比如范例中的图片lena256.bmp表现为灰度图,但其实质仍为RGB图像。如果不用语句rgb2gray将其转化为256级灰度图,经变换后图像会变红或变蓝。

④     数组的定义方式与C语言不同。由于C语言中含N个元素的一维数组A的下标从0到N-1,数组定义为A[N];同样的数组,MATLAB规定的下标是从1到N,所以不能再用A[N]来表示数组,只能用它表示数组的第N个元素。赋值时用A代表数组。

⑤     由于在本演示软件中,涉及较多点运算,所以运行速度较慢。等待时未知其是否顺利运行。这时最好在最外层循环加上计数标志,即变量名,这样对程序运行的影响不大,却可以知道程序的运行情况,有助于查错。但如果在内层循环加标志的话,将大大减慢运行速度。

⑥     尽管MATLAB允许未定义使用数组,但在实际应用中这样经常出错,特别是遇到在double和uint8型之间的转换时。所以最好还是养成用前定义的习惯,避免出现不必要的错误。

⑦     在做完一定量的运算后,一般要用Clear清除内存变量,以防影响后面的程序运行。

(zhengym02)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201203/15827.html]
本文出处:百度博客 作者:zhengym02 原文
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容