目的

1.熟悉图像的四种类型。

2.熟练掌握图像的读、写操作以及显示方法。

3. 熟悉图像的类型转换以及格式转换。

  1. 实验原理

1. 图像的表示以及数字化

广义的图像是指视觉信息。举凡照片、图画、电视画面以及由透镜、光栅及全息

图所构成的光学成像等均属之。我们观察一幅单色静止图像,其亮度的明暗变化就构成图像视觉。所以,一幅单色(monochrome)静止的图像可以表示为强度或亮度的二维分布

,其中F代表图像亮度或者强度,(x,y)是二维平面点坐标。对于黑白图像,通常用不同的灰度级来表示其亮度的差异;对于彩色图像,可以视为由单个单色的二维图像组合形成的。例如,在RGB彩色系统中,一幅彩色图像是由三幅独立的分量图像(红、绿、蓝)按不同的比例组成的。因此,许多为黑白图像处理开发的技术适用于彩色图像处理,方法是分别处理三副独立的分量图像即可。此时,每一幅分量图像只有亮度的二维分布,如图1所示。

通常我们看到的图像是一幅亮度在空间连续变化的模拟图像(即图像关于亮度F以及空间坐标x,y连续)。例如在显微镜下看到的就是一副光学模拟图像。连续的模拟图像经过离散化处理后变成计算机能够识别的点阵图像,称为数字图像。把模拟图像转换成数字图像其实就是数字化 (即离散化)图像亮度F以及空间坐标x,y。将坐标数字化称为取样;将亮度数字化称为量化。采样和量化的过程如图2所示。二维图像平面经过数字化后,变成一个个方形的像素(pixel),亮度数字化之后变成一个二维的数值矩阵。所以一副数字图像对应于一个数值矩阵,该矩阵通常称为图像的数据矩阵。图像数据矩阵的大小即是图像像素的数目,矩阵的行与列决定一个像素点,矩阵元素值(也称像素值)反映该像素点的灰度。例如图2右边所示的图像数据矩阵为8×8的二维矩阵,那么该数字图像包含8×8=64个像素,第一行第一列代表第一个像素,其像素值(元素值)1表达该像素的灰度。

由于数字图像和数值矩阵之间有着十分自然的对应关系,所以MATLAB非常适合用来处理数字图像。

图1 RGB彩色图像及其分量图像。其中,每个分量图像越亮的地方表示该组分在源图像中所占比例越大。

图2 图像的采样和量化

2. 图像的类型

MATLAB采用4种不同的方式把图像数据矩阵中的元素值(又称像素值)解释为对应像素的颜色:

  • 强度图像(Intensity images)
  • 二值图像(Binary images)
  • 索引图像(Indexed images)
  • RGB图像(RGB images)

(1) 强度图像(Intensity images)

也称灰度图像(grayscale)。一幅强度图像就是一个数据矩阵,矩阵的每个元素对应一个图像像素,元素值(像素值)代表像素的亮度或者灰度级。像素值的数据类型可以是uint8或uint16或者double型。如果是uint8或uint16,则像素值的范围分别是[0,255]和[0,65536],其中0代表黑色(亮度最低或灰度级最低),255或者65536代表白色(亮度最高或者灰度级最高),其他整数介于两者之间;若像素值是double类,系统规定双精度型像素值的取值范围是[0,1],0代表黑色,1代表白色,其余介于两者之间。例如图2中的数据矩阵,如果该图是强度图像,则第一个像素值1代表该像素的亮度是仅次于黑色的灰度级,余者类推。

(2) 二值图像(Binary images)

对于一幅二值图像,其数据矩阵中像素值的取值只有0和1两个逻辑数,分别代表黑色和白色,所以二值图像只有黑色和白色两种颜色。下图描绘了一幅二值图像。

图3 二值图像及其像素值

(3) 索引图像(Indexed images)

在强度图像和二值图像中,数据矩阵中的像素值直接代表像素的亮度(即颜色),而索引图像的像素值则并不直接代表颜色,而是把像素值按照一定的规则映射到颜色表(colormap)或者调色板中的某一个颜色。所以索引图像也叫映射图像,一幅索引图像包含一个图像数据矩阵和一个预先定义的色图(Colormap)矩阵。色图矩阵是一个m×3的double型数组,矩阵的元素值介于[0 1]之间。色图矩阵的每一行代表一种彩色,它是个3元行数组,分别代表R分量(红色分量)、G分量(绿色分量)、B分量(蓝色分量)的比例,例如(0 0 1)代表蓝色,(1 1 1)代表白色等。色图矩阵的列数m代表颜色的种类。图像数据矩阵的类型可以是uint8或uint16或者double型。对于uint8或uint16类型,像素值0映射到色图矩阵(即颜色表)的第一行,表示该像素使用颜色表的第一个颜色绘制,像素值1映射到色图矩阵的第二行,类此类推,可见uint8或uint16型的像素值和颜色种类之间有一个偏差1。对于数据矩阵是double型的,像素值1映射到色图矩阵的第一行,2映射到第二行,以此类推。由上可见,索引图像数据矩阵的像素值也就是对颜色表的索引值(Index)。

注意,索引图像的颜色都是预先定义的,并且可供选用的一组颜色也很有限,索引颜色的图像最多只能显示256种颜色。当读入索引图像文件时,必须同时读入其数据矩阵和色图矩阵,即绘图用的颜色表。图4所示代表一幅索引图像,其数据矩阵是double类型。

(4) RGB图像(RGB images)

RGB图像也称真彩色图像。其图像数据矩阵是一个m×n×3数组,数组中的元素值定义了相应像素的红(R)、绿(G)、蓝(B)颜色分量,其中沿第3维(即“页”维)方向的第一页

图4 索引图像的double型数据矩阵及其色图矩阵

代表像素的R颜色分量,第二页是G分量,第三页是B分量。所以RGB图像不需要色图

矩阵或颜色表,每个像素点的颜色由其R、G、B分量直接指定。例如,像素点(10,5)的红、绿、蓝分量分别储存在数据矩阵的(10,5,1)、(10,5,2)、(10,5,3)三个元素中。数据矩阵的类型有double、uint8或uint16。对于double型,每个颜色分量介于0和1之间,如果像素的颜色分量是(0 0 0),则是黑色像素,(1 1 1)是白色像素。图5显示一幅RGB图像的数据矩阵。

图5 RGB图像的数据矩阵及其三个颜色分量,第1个平面(即第1“页”)为R分量,

第2个平面是G分量,第3个是B分量。

2. 图像的读、写与图像信息查询

Matlab为用户提供了特殊的函数用于从图像格式文件中读写图像数据。其中读取图像格式文件的函数是imread,写入图像格式文件的函数是imwrite,查询图像信息的函数是imfinfo。下面分别介绍它们的用法。

(1) imread

[X,MAP]=imread(’filename’,’fmt’)

其中,X,MAP分别为读出的图像数据和颜色表数据(色图矩阵),fmt为图像的格式,如bmp、jpg、png、tif、gif格式等,filename为读取的图像文件(可以加上文件的路径)。

例: [X,MAP]=imread(’flowers.tif’, ’tif’);

或者 [X,MAP]=imread(’flowers.tif’);

如果读取的是RGB图像或者强度图像,色图矩阵一般为空,即MAP=[]。

(2) imwrite

imwrite函数用于输出图像,其语法格式为:

imwrite(X, MAP, ’filename’, ’fmt’)

按照fmt指定的格式将图像数据矩阵X和颜色表MAP写入文件filename。

(3) imfinfo

imfinfo函数用于读取图像文件的有关信息,其语法格式为

imfinfo(’filename’, ’fmt’)

imfinfo函数返回一个结构体,该结构体包含图像的各方面信息,其主要数据:文件名(路径)、文件格式、文件格式版本号、文件的修改时间、文件的大小、文件的长度、文件的宽度、每个像素的位数、图像的类型等。

例:imfinfo('rice.png'); % 注意查看图像类型和颜色表

3. MATLAB中图像文件的显示

MATLAB图像处理工具箱提供了imshow函数来显示各种图像,其语法如下:

imshow(I, n)

imshow(BW); imshow(X, MAP); imshow(RGB)

其中imshow(I, n)用于显示强度(灰度)图像,I是图像数据矩阵,n为灰度级数目,缺省值为256。其它的分别用于显示二值图像、索引色图像和RGB真彩色图像。另外,对RGB彩色图像,还可以用imshow( RGB(:, :, 1) )、imshow( RGB(:, :, 2) )、imshow( RGB(:, :, 3) )分别显示RGB图像的R、G、B三个分量(这里RGB代表图像数据矩阵),但是注意,这样显示出的图像是各分量所对应的灰度图像,见图1所示。

4. 图像类型转换

用imfinfo函数读取图像文件的有关信息可以确定图像的类型。图像类型之间的转换有时非常有用。下表是MATLAB提供的部分图像类型转换函数:

函 数 功 能
gray2ind 根据一幅灰度图像创建索引图像
im2bw 用阈值截取法将灰度图像、索引图像或RGB图像转换为二值图像
ind2gray 根据一幅索引图像创建一幅灰度图像
ind2rgb 根据一幅索引图像创建一幅RGB图像
rgb2gray 根据一幅RGB图像创建一幅灰度图像
rgb2ind 根据一幅RGB图像创建一幅索引图像

上表中函数有类似的调用格式:函数的输入参数是图像数据矩阵(如果是索引图像,那么输入参数还包括颜色表),返回值是转换后的函数(包括索引函数的调色板),只有函数im2bw的调用格式不同,其输入参数中还包括一个截取阈值LEVEL,超过此阈值的像素被截取为1否则为0。如:

[X, MAP]=imread('trees.tif');

X0=im2bw(X,0.4); % 将RGB图像转换为二值图像(黑白图像),截取阈值=0.4

5、图像文件格式的转换

图像文件格式之间的转换,可以间接利用图像读写函数来完成;首先使用imread函数按照原有的图像格式进行图像读取,然后调用imwrite函数对图像进行保存,并指定图像的保存格式。如将BMP格式转换为PNG格式:

bitmap=imread(’mybitmap.bmp’, ’bmp’)

imwrite(bitmap, ’mybitmap.png’, ’png’)

  1. 拓展尝试

1.利用imread( )函数分别读取下列四副图像:peppers.png、pout.tif、forest.tif、circles.png(注:Matlab安装目录下\toolbox\images \imdemos文件夹里,系统附带了各种类型的图片),判断它们各属于哪种类型的图像,并回答思考题1。

2.读取一幅RGB图片,并将它转换成其他几种图像类型(通过帮助系统自学相应转换函数的具体用法);

3. 读取一幅TIF格式的图像,将它转换成JPG文件格式,并尝试使用不同的压缩品质(使用help imwrite 查询其‘quality’参数的用法)压缩文件,比较压缩前后文件的大小和图像质量。

4.读取一幅索引图像,将图像显示出来。尝试修改MAP颜色矩阵的值,再将图像显示出来,对比观察图像颜色的变化。

Matlab数字图像处理仿真基础教学相关推荐

  1. MATLAB说明图像增强,MATLAB数字图像处理(二)图像增强

    1         图像增强 1.1            直方图均衡化 对于灰度图像,可以使用直方图均衡化的方法使得原图像的灰度直方图修正为均匀的直方图. 代码如下: 1 2 3I2=histeq( ...

  2. 《精通Matlab数字图像处理与识别》一6.2 傅立叶变换基础知识

    本节书摘来自异步社区<精通Matlab数字图像处理与识别>一书中的第6章,第6.2节,作者 张铮 , 倪红霞 , 苑春苗 , 杨立红,更多章节内容可以访问云栖社区"异步社区&qu ...

  3. MATLAB数字图像处理系统-形状分类

    MATLAB数字图像处理系统-形状分类 摘 要 数字图像处理是一门新兴技术,随着计算机硬件的发展,数字图像的实时处理已经成为可能,由于数字图像处理的各种算法的出现,使得其处理速度越来越快,能更好的为人 ...

  4. matlab对于处理数字图像的优点,学习MATLAB数字图像处理经验谈

    学习MATLAB数字图像处理经验谈 学习数字图像处理经验谈 (赵小川) 一.面向应用:层层分解.抓住要点 我们学习数字图像处理的最终目的还是应用,不管是用它来研制产品还是研发项目抑或是研究课题,都要用 ...

  5. MATLAB数字图像处理系统[多功能]

    MATLAB数字图像处理系统[多功能] 目录 实验一 MATLAB数字图像处理初步 实验二 图像的代数运算 实验三 图像增强-空间滤波 实验四 图像分割 2 实验一 MATLAB数字图像处理初步 一. ...

  6. MATLAB数字图像处理复习概览

    MATLAB数字图像处理 第1章 绪论 数字图像的概念 数字图像处理 第2章 数字图像处理基础 数字图像的生成与表示 数字图像的数值描述 第3章 图像基本运算 图像几何变换 几何变换基础 位置变换 几 ...

  7. matlab fspeical,MATLAB数字图像处理.doc

    MATLAB数字图像处理 MATLAB常用图像操作 转换图像类型 例1.对一幅图像进行二值化处理,代码及结果如下: load trees BW=im2bw(X,map,0.4); imshow(X,m ...

  8. Matlab数字图像处理——图像处理工具箱Image Processing Toolbox

    Image Processing Toolbox 图像处理工具箱包含的功能: 图像的读取和保存 图像的显示 创建GUI 图像的几何变换 图像滤波器设计及线性滤波 形态学图像处理 图像域变换 图像增强 ...

  9. Matlab数字图像处理——图像文件的读取

    文章目录 一.Matlab中获取图像信息的函数 imfinfo 二.Matlab读取图像文件的函数 imread 三.Matlab保存图像文件的函数 imwrite 完整目录 一.Matlab中获取图 ...

最新文章

  1. 并查集-hdu3083-How Many Answers Are Wrong
  2. NFC Basics(基本NFC)——翻译自developer.android.com
  3. windows使用ssh2远程登陆ubuntu
  4. java 如何开启一个线程_Java-开启一个新的线程
  5. VMM2012应用指南之2- 准备VMM2012虚拟机
  6. 20+ 家标杆车企实践总结,数字化转型的秘诀都在这儿
  7. android实现自动抢红包,Android手机辅助功能实现自动抢微信红包功能
  8. 【渝粤题库】广东开放大学 现代服务学概论 形成性考核 (2)
  9. Python高级——多继承问题(super与mro)
  10. 澳大利亚新南威尔士大学 巩东博士 招收若干名计算机视觉和机器学习方向PhD...
  11. 有哪些相见恨晚的运动常识
  12. win10家庭版与专业版有什么区别?
  13. RNN系列之四 长期依赖问题
  14. python信用评分卡建模(附代码)
  15. 【Excel学习笔记13】对一个单元格内容进行条件分列,分列成多列
  16. 乌镇互联网大会官方首次使用AI同传,搜狗为雷军提供机器翻译
  17. Python的全局安装源配置
  18. Java编译成功但是运行不成功的原因
  19. 使用element回到顶部组件报错“Error: target is not existed: .page-component__scroll .el-scrollbar__wrap“
  20. 【转载】sdcard中平添文件总是提示Failed to push the item(s)Failed to push XXXXX.txt on emulato...

热门文章

  1. CVPR 2022 | 清华字节提出FGD:针对目标检测的重点与全局知识蒸馏
  2. python改造电脑解决盲人看电视问题的试验
  3. matlab运行一直正忙,matlab一直显示正忙,没反应,求大神帮助
  4. 程序员接私活必备的10款开源前端后台框架
  5. python字典的存储结构_解决python字典结构内存暴涨问题
  6. JavaScript 转换数字为整数的方法
  7. 美国大学研究生院计算机专业排名,美国大学研究生院计算机工程专业排名真得细心的去考察...
  8. 精通JavaScript--10移动设备JavaScript开发
  9. 腾讯视频通话TRTC
  10. littleVGL学习笔记4——Tasks任务系统