图像和图像处理

已完成

在探索图像处理和其他计算机视觉功能之前,在计算机程序的数据上下文中考虑图像实际是什么会非常有用

图像是像素数组

对于计算机而言,图像是数字像素值的数组。 例如,请考虑以下数组:

 0   0   0   0   0   0   0  
 0   0   0   0   0   0   0
 0   0  255 255 255  0   0
 0   0  255 255 255  0   0
 0   0  255 255 255  0   0
 0   0   0   0   0   0   0
 0   0   0   0   0   0   0

该数组由七行七列组成,表示 7x7 像素图像的像素值(称为图像分辨率)。 每个像素的值介于 0(黑色)到 255(白色)之间:这些边界之间的值表示灰色阴影。 此数组表示的图像类似于以下(放大后的)图像:

Diagram of a grayscale image.

此图像的像素值数组是二维的(表示行和列,或 x 和 y 坐标),并定义像素值的单个矩形。 像这样的单层像素值表示灰度图像。 实际上,大多数数字图像都是多维图像,包含三层(称为“通道”),这三层分别代表红色、绿色和蓝色 (RGB) 色调。 例如,我们可以通过定义三个通道的像素值来表示彩色图像,这些像素值可创建与之前的灰度示例相同的正方形形状:

Red:
 150  150  150  150  150  150  150  
 150  150  150  150  150  150  150
 150  150  255  255  255  150  150
 150  150  255  255  255  150  150
 150  150  255  255  255  150  150
 150  150  150  150  150  150  150
 150  150  150  150  150  150  150

Green:
 0    0    0    0    0    0    0          
 0    0    0    0    0    0    0
 0    0   255  255  255   0    0
 0    0   255  255  255   0    0
 0    0   255  255  255   0    0
 0    0    0    0    0    0    0
 0    0    0    0    0    0    0

Blue:
 255  255  255  255  255  255  255  
 255  255  255  255  255  255  255
 255  255   0    0    0   255  255
 255  255   0    0    0   255  255
 255  255   0    0    0   255  255
 255  255  255  255  255  255  255
 255  255  255  255  255  255  255

生成的图像如下所示:

Diagram of a color image.

紫色方块由该组合表示:

Red: 150 
Green: 0 
Blue: 255 

中心的黄色方块由该组合表示:

Red: 255
Green: 255
Blue: 0

使用筛选器处理图像

执行图像处理任务的一种常见方法是应用筛选器来修改图像的像素值以创建视觉效果。 筛选器由一个或多个像素值数组定义,称为筛选器内核。 例如,可以使用 3x3 内核定义筛选器,如以下示例所示:

-1 -1 -1
-1  8 -1
-1 -1 -1

然后,内核在整个图像中“卷积”,计算每个 3x3 像素补丁的加权总和,并将结果分配给新图像。 通过浏览分步示例,可以更轻松地了解筛选的工作原理。

让我们从之前探讨的灰度图像开始:

 0   0   0   0   0   0   0  
 0   0   0   0   0   0   0
 0   0  255 255 255  0   0
 0   0  255 255 255  0   0
 0   0  255 255 255  0   0
 0   0   0   0   0   0   0
 0   0   0   0   0   0   0

首先,将筛选器内核应用到图像的左上角补丁,将每个像素值乘以内核中的相应权重值并将结果相加:

(0 x -1) + (0 x -1) + (0 x -1) +
(0 x -1) + (0 x 8) + (0 x -1) +
(0 x -1) + (0 x -1) + (255 x -1) = -255

该结果 (-255) 成为新数组中的第一个值。 然后,我们将筛选器内核向右侧移动一个像素,重复该操作:

(0 x -1) + (0 x -1) + (0 x -1) +
(0 x -1) + (0 x 8) + (0 x -1) +
(0 x -1) + (255 x -1) + (255 x -1) = -510

同样,结果将添加到新数组,该数组现在包含两个值:

-255  -510

此过程将重复,直到筛选器已在整个图像中卷积,如以下动画所示:

Diagram of a filter.

筛选器在图像中卷积,计算新的值数组。 某些值可能超出 0 到 255 像素值范围,因此这些值经过调整以适应该范围。 由于筛选器的形状,像素的外部边缘不参与计算,因此应用填充值(通常为 0)。 生成的数组表示筛选器将原始图像转换为的一个新图像。 在本例中,筛选器具有突出显示图像中形状边缘的效果

若要更清楚地看到筛选器的效果,下面提供了应用于真实图像的相同筛选器的示例:

原始图像 筛选后的图像
Diagram of a banana. Diagram of a filtered banana.

由于筛选器在图像中卷积,因此这种图像操作通常称为“卷积筛选”。 本示例中使用的筛选器是一种特定类型的筛选器(称为 laplace 筛选器),用于突出显示图像中对象的边缘。 还有许多其他类型的筛选器可用于创建模糊、锐化和颜色反转等效果。