A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

Matlab介绍

对于本系列的任务都是用Matlab或Octave。我们讨论了如何使用Python和OpenCV等。

Matlab或Octave的开源版本使其变得简单。在Matlab中,图像和矩阵运行得非常好。

来学习第一个Matlab命令:imread

>> img = imread('peppers.png');

这就是能阅读图像所需的全部内容。所以我们有这个功能,imread和我们将以文件peppers.png的形式读入。

注意那里的";"(分号),如果你不把这些分号放在那里,Matlab吐出所有数字,令人难以置信的痛苦。

>> imgreen = im(:,:,2);

这个命令取绿色通道,绿色通道可以索引,在Matlab中,图像具有一定数量的行,一定数量的列,以及颜色平面或层。

第一个冒号代表所有行,第二个冒号代表所有列,2 是绿色的。

注意:Matlab索引是从1开始的。正常的计算机:0代表红色,1代表绿色,2代表蓝色。

所以Matlab索引1是红色,2是绿色,3是蓝色。

>> imshow(imgreen)

imshow命名可以打印出这个图片。

>> line([1 512], [256 256], 'color', 'r')

这里的line的功能是在图片里面画一条红色的线。

>> plot(imgreen(256,:));

plot是绘制该图片的256行的所有列,显示的效果如下:

量化练习

由于数字图像是在空间中的离散位置采样的,因此它可以被写成二维数组或数值矩阵。

这里有一个例子。请注意,此矩阵具有小数值,包括正数和负数。

但是,如果我们只能表示一小组整数值,比如介于0和5之间呢?

假设我们总是向下舍入。例如,1.8变为1。任何小于下限0的,都应该转换为0,任何大于上限5的,都应该转换为5。

您将如何量化此矩阵,以便结果仅包含0到5的整数?

答案如下:

为了得到量子化矩阵,对每个数字进行转换,总是向下舍入。

给定范围内的整数值保持不变。超过上限的任何东西都变为5。类似地,任何小于0的东西,在这种情况下-1.3变为0,依此类推。

请注意:量化如何导致细节丢失。(超出范围的极值也会丢失)

图像大小和类型

如何使用Matlab输出图像的大小?代码如下:

>> disp(size(img));

运行代码后,假如输出:320   500

如何查看类型?代码如下:

>> disp(class(img));

运行代码后,假如输出:uint8

现在,uint8是什么意思?

有些人可能已经知道这一点,你代表无符号,这意味着这种数据类型不能代表负数。

Int代表整数,8代表8位或1字节。这有时被称为位深度。它表示分配用于存储每个强度值的位数。

检查像素值

假设我们想要找出特定位置的图像值。我们使用行号和列号指定此位置。

假设我们想要找出第50行第100列的值。代码如下:

>> disp(img(50,100));

运行代码后,假如输出:208.

同样,我们可以找出整行的值。代码如下:

>> disp(img(50,:));

运行结果会显示出在第50行的所有列的值。但是这不是查看整行值的有用方法。

但我们可以绘制这些值。代码如下:

>> plot(img(50:))

显示结果如下:

你可以清楚地看到蓝色的线的相对较高的值,然后其他相对较低的值。

我们继续来找到图片的101行到103行。201到203栏。

好的,为了选择所需的切片,我们指定了行和列的范围。

在这种情况下,行的范围是101到103。列数范围为201到203。

>> disp(img(101:103,201:203));

代码运行结果:81,77,77,81,78等。


1 个回复

倒序浏览
奈斯
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马