枫竹梦对于Matlab几乎是零基础,只是在上学的时候稍稍接触一点,万万没有想到现在还能用到Matlab。进入正题>>>
图像的基本概念
一幅图像可以被定义为一个二维函数f(x,y),x和y表示空间坐标,f在(x,y)处的取值(振幅)为图像在该点的亮度。对于灰度图像来讲,即为灰度。对于RGB彩色系统来讲,即为R、G、B三个分量图像的灰度的合成。
要将一幅图像转换为数字形式,就要求数字化坐标和振幅。将坐标数字化称为取样,将振幅数字化称为量化。当f和x,y分量的振幅都是有限且离散的量时,称该图像为数字图像。
一幅有着M行N列的图像,称图像的大小为MxN。在多数的图像处理书箱中图像的原点字义在(x,y)=(0,0)处。所以x的取值为从0到M-1,y的取值为从0到N-1。在Matlab中原点定义在(1,1)处。
Matlab图像处理基本函数
首先需要了解的是如何读取图像,显示图像,保存图像。
读取图像
读取图像使用imread()如:
imread('image_filename')支持的图像格式有TIFF、JPEG、GIF、BMP、PNG、XWD(X Window转储)。
注意:文件名需要写明扩展名,不可省略。文件名使用单引号来界定。如果需要让Matlab不输出读取结果,则以分号结尾。
当文件中不包含路径信息时,默认从当前目录中进行文件的查找,如果使用其他目录中的文件可以使用相对目录或者绝对路径的形式。
image = imread('test.jpg');将读取的数据保存在变量image中。
size(image)给出图像的大小,以数组的形式给出。当前为了得到图像的行数和列数,可以这样:
[M, N] = size(image);M即为图像的行数,N为图像的列数。
当然也可以使用whos命令进行查看:
>> whos image Name Size Bytes Class Attributes image 1029x1248 1284192 uint8
上面的>>为Matlab的命令提示符。
显示图像
显示图像的函数为
imshow(f, G)
f为图像的数组,也就是上面使用imread读取的结果。G是显示该图像的灰度级数,如果省略G,默认灰度级数是256。
imshow(f, [low, high])会将所有小于或等于low的值都显示为黑色。所有大于或等于high的值显示为白色。介于二者之间的按照默认的级数显示为中等亮度值。
imshow(f, [])会将low设置为数组f的最小值,将变量high设置为数组f的最大值。这对于输出动态范围较小或者既有正值又有负值的图像非常有用。
在Matlab中如果需要显示另一幅图片,直接使用imshow会在已打开的figure窗口中显示图像,若要在新的窗口中显示图像可以使用figure函数,如:
figure, imshow(image)
同时显示两幅图片:
imshow(image1), figure, imshow(image2)
在Matlab的较早版本中,使用pixval函数可以交互地显示像素的亮度值。在较的新的版本中使用impixelinfo函数替代了pixval。如下图左下角:
保存图像
保存图像的函数是imwrite,语法为imwrite(image, 'filename'),filename必须包含合法的图片扩展名,否则需要提供第三个参数如:
imwrite(image, 'image1', 'tif'); imwrite(image, 'image2.tif');在filename中不 包含路径信息,则将文件写在当前工作目录中。对于JEPG格式的图片,语法为:
imwrite(image, 'image3.jpg', 'quality', 70)最后的数字70,表示JPEG的压缩的质量,为0~100之间,数值越大,质量越好。默认为75。
使用函数imfinfo可以显示图像的其他信息,如:
>> imfinfo bubbles5.jpg ans = Filename: 'bubbles5.jpg' FileModDate: '24-Apr-2017 23:38:34' FileSize: 7904 Format: 'jpg' FormatVersion: '' Width: 720 Height: 688 BitDepth: 8 ColorType: 'grayscale' FormatSignature: '' NumberOfSamples: 1 CodingMethod: 'Huffman' CodingProcess: 'Sequential' Comment: {}可以看到,图像文件的大小为7904字节,宽高信息,8位灰度图像等。
当然可以将图像的信息保存在变量中,在后续的计算中进行使用。
k = imfinfo('bubbles5.jpg'); width = k.Width;