对于本系列的任务都是用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等。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |