2.图像作为函数之图像的量化、大小、类型、...

244 阅读4分钟
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等。

更多免费技术资料可关注:annalin1203