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等。
|