Matlab图像处理(01)-Matlab基础
枫竹梦对于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)
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(image, \'image1\', \'tif\'); imwrite(image, \'image2.tif\');
在filename中不 包含路径信息,则将文件写在当前工作目录中。对于JEPG格式的图片,语法为:
imwrite(image, \'image3.jpg\', \'quality\', 70)
最后的数字70,表示JPEG的压缩的质量,为0~100之间,数值越大,质量越好。默认为75。
>> 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;