二 读取、显示、存储图像

来源:互联网 发布:时间线管理软件 编辑:程序博客网 时间:2024/06/05 15:26

数字图像的表示


    一副图像可以被定义为一个二维函数f(x,y),其中x和y是空间平面坐标,f在任何
坐标点的振幅称为图像在该点的亮度。灰度表示黑白图像的亮度。图像关于x和y坐标
以及振幅连续。将坐标值数字化称为取样,将振幅数字化称为量化。
    一般图像处理将图像原点定义在(x,y)=(0,0)处,x表示行,y表示列。IPT,即MATLAB
图像处理工具箱,使用(r,c)表示行与列,并且该坐标系统的原点在(r,c) = (1,1)处。
IPT还采用一种较少使用的坐标约定,称为空间坐标,即用x来表示列,使用y来表示
行。所有的坐标表示法,坐标原点都在左上角,行和列分别向下和向右延伸。
    所以我们可以用矩阵形式来表示图像,在MATLAB中矩阵以变量的形式来存储。
一般说来,我们分别用字母M和N来表示矩阵中的行与列。一个1 * N矩阵称为一个行向量,
而一个M * 1矩阵称为一个列向量。一个1 * 1矩阵式一个标量。


读取图像


    使用函数imread可以讲图像读入MATLAB环境,在命令窗口输入
>>  f = imread('filename');
    当filename中不包含任何路径信息时,imread会从当前目录中寻找并读取图像文件。
命令后面要加分好,不加分号会把数据显示到命令窗口。
    函数size可以给出一副图像的行数和列数:
               >>  size(f)
  ans = 
420 1024
    此时没有加分号,数据显示到命令窗口。
    可以使用以下格式来自动确定一副图像的大小:
>> [ M, N] = size(f);
    该语法将返回图像的行数(M)和列数(N)。
    函数whos可以显示一个数组的附加信息。例如,语句
>> whos f
    会给出下列结果:
 Name      Size                    Bytes  Class


  f       420x1024                 430080  uint8 array


Grand total is 430080 elements using 430080 bytes


显示图像


    显示图像使用函数imshow,其基本语法为
    imshow(f, G)
    f是一个图像数组,G是显示该图像的灰度级数(针对灰度图)。若省略G,则默认
的灰度级数是256。语法
imshow(f, [ low high])
    会将所有小于或等于low的值显示为黑色,所有大于或等于high的值都显示为白色,
界于low和high之间的值将以默认的级数显示为中等亮度值。语法
imshow(f, [])
    可以将low设置为数组f的最小值,将high设置为数组f的最大值。
    pixval函数用来交互地显示单个像素的亮度值。在保证有图片正在显示时,在
命令窗口输入
>>  pixval
    把光标放在显示图像上,当光标移动时,光标所在位置的坐标和该点的亮度值会
在该图形窗口的下方显示出来。若按下鼠标左键不放并且移动,pixval将显示光标移动
经过的直线距离。
    当用imshow显示另一副图像时,MATLAB会在屏幕上用新图像替换旧图像。为保持
图像同事显示,可以使用如下的figure函数:
>> figure, imshow(g)


存储图像


    >> imwrite(f, 'test.tif')
    若filename中不包含路径信息,则imwrite会将文件保存到工作目录中。
    imwrite一种常用但只适用于JPEG图像的语法为
>> imwrite(f, 'filename.jpg', 'quality', q)
    其中,q是一个在0到100之间的整数,代表压缩百分比,q越小,图像的退化就越
严重。
    imfinfo可以得到图像相关的信息,例如
>> imfinfo test.jpg
    或者
    >> k = imfinfo('test.jpg');
    imwrite的另一种常用但只适用于tif图像的语法为
    imwrite(g, 'filename.tif', 'compression', 'parameter', ..., 
'resolution', [ colres rowres])
    'parameter'可以是如下主要的值之一:'none'表示无压缩;'packbits'表示
比特包压缩(非二值图像的默认参数);'ccitt'表示ccitt压缩(二值图像的默认
参数)。[ colres, rowres]包含两个整数,分别以每单位中的点数给出图像的
列分辨率和行分辨率(默认值为[ 72, 72])。使用标量res来指定分辨率与使用
[ res, res]是等价的。
    例如
>> imwrite(f, 'test.tif', 'compression', 'none',
'resolution', res)
0 0