赞
踩
这里我们学习matlab数字图像处理的基本要求:
首先,在matlab中,根据图像的特征可以分为以下几种:
二值图像:整张图中只有0、1两种结果,比如在光学仿真专栏中,我们绘制的只有黑白两色的图形(下图左图):
灰度图像:从0(黑)-255(白)区分不同的灰度,并绘制成图像,也叫做灰阶图像(上图右图);
彩色图像:常见的有两种,RGB或者CMYK,分别有三、四种原色,按照不同的搭配形成彩色。
假彩色图像:常见颜色的波长是有固定的范围的,超出人眼可见光范围的光不可见。但是一些情况下,我们需要展示如红外光强度这样的不可见光的对比,需要使用不同的颜色。
接下来,我们对图像进行基础操作:
1、图像的读取:
- %A = imread(filename)
- 当然,imread()函数有很多的变形,具有不同的含义。比如
- % A = imread(filename,fmt)
- % A = imread(___,idx)
- % A = imread(___,Name,Value)
- % [A,map] = imread(___)
- % [A,map,transparency] = imread(___)
2、图像的显示:
- % imshow()
- % image()
- % imagesc()
这三个函数的具体区别我们通过一段代码来展示:
- clear;
- img = imread('1.jpg');
- I = rgb2gray(img);
- figure(1)
- subplot(1,3,1)
- imshow(img)
- colorbar
- title('by imshow()')
- xlabel('(a)')
- subplot(1,3,2)
- image(img)
- colorbar
- title('by image()')
- xlabel('(b)')
- subplot(1,3,3)
- imagesc(img)
- colorbar
- title('by imagesc()')
- xlabel('(c)')
-
- figure(2)
- subplot(1,3,1)
- imshow(I)
- colorbar
- title('gray by imshow()')
- xlabel('(a)')
- subplot(1,3,2)
- image(I)
- colorbar
- title('gray by image()')
- xlabel('(b)')
- subplot(1,3,3)
- imagesc(I)
- colorbar
- title('gray by imagesc()')
- xlabel('(c)')
结果1:
可以看出:
在显示RGB图像时,三种函数都是对RGB进行分析,得到彩色图像。
但是imshow输出的图像是原图形的样子,包括大小和纵横比例。
后两者会对图像进行一定程度的拉伸(放大或缩小)。
结果2:
在显示灰度图像时,只有imshow显示出了正常的灰度图像,后两者的输出是“假彩色”图像。
原因如下:
在绘制图形时,如果显示的是RGB图像,那就是正常显示,因为图形的矩阵中已经包含了颜色信息(存在第三个维度分别表征R、G、B)
如果是灰度图这种默认是索引图像的矩阵,矩阵中不是自带颜色信息的,需要和colormap一一对应。
简单来说,索引数组是(m*n)一个二维的矩阵,相当于棋盘格上的每一个点只有一个数字,这不能表示颜色,但是可以对应一个序号。
如果该图像矩阵对应的colormap是彩色的,就是一个k*3的矩阵,3表示每一行的三列分别代表R\G\B
这样,通过读取图像矩阵这样一个二维矩阵每个点的数值,就能对应到colormap矩阵的某一行上,这一行对应的三个数字就是该点对应的颜色值。
灰度图同理。
在我们用三种函数绘制图形的时候,imshow()、imagesc()、image()中,只有imshow()默认的灰度图和我们用rgb2gray()函数转换得到的灰度图用的是同一个colormap。
所以,后两者直接显示转换后的图像矩阵,得不到想要的结果。
当然,我们可以通过修改对应的colormap矩阵得到和imshow()一样的图像。
3、图像的输出
%imwrite(A,filename)
此 MATLAB 函数 将图像数据 A 写入 filename 指定的文件,并从扩展名推断出文件格式。imwrite 在当前文件夹中创建新文件。
输出图像的位深取决于 A 的数据类型和文件格式。
参考:
《高等光学仿真——光波导、激光》
MATLAB帮助文档
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。