在我们开始生成人工图像之前,我们需要清楚地了解数字图像究竟是什么。正如建造任何东西都需要了解其材料,生成合成图像需要了解其构成要素:像素和色彩。可以把这看作是写故事前学习字母。当我们生成图像时,我们本质上是在决定图像中每个小点的颜色。像素:图像的构成单元本质上,数字图像仅仅是由微小方格或点组成的网格,这些点被称为像素,是“图像元素”的缩写。每个像素是图像中可以被赋予颜色或强度的最小独立单位。想象一下由微小彩色瓷砖组成的马赛克;数字图像与之类似,只是这些瓷砖是按矩形网格排列的像素。图像的分辨率指的是它包含的像素数量,通常表示为宽度 × 高度(例如,1920 × 1080 像素)。更高的分辨率意味着更多的像素,从而能呈现更丰富的细节。当我们生成合成图像时,我们需要确定其分辨率 – 即它将有多少像素宽和高。graph G { rankdir=LR; node [shape=plaintext]; A [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0"><TR><TD WIDTH="25" HEIGHT="25" BGCOLOR="#e9ecef"></TD><TD WIDTH="25" HEIGHT="25" BGCOLOR="#adb5bd"></TD><TD WIDTH="25" HEIGHT="25" BGCOLOR="#495057"></TD></TR><TR><TD WIDTH="25" HEIGHT="25" BGCOLOR="#dee2e6"></TD><TD WIDTH="25" HEIGHT="25" BGCOLOR="#868e96"></TD><TD WIDTH="25" HEIGHT="25" BGCOLOR="#ced4da"></TD></TR><TR><TD WIDTH="25" HEIGHT="25" BGCOLOR="#adb5bd"></TD><TD WIDTH="25" HEIGHT="25" BGCOLOR="#e9ecef"></TD><TD WIDTH="25" HEIGHT="25" BGCOLOR="#868e96"></TD></TR></TABLE>>]; B [label="图像是像素网格。\n每个方块代表一个像素\n具有特定颜色或强度。"]; A -- B [style=invis]; }图像的简单表示,为一个3x3的像素网格。每个像素都包含颜色信息。强度表示:灰度最简单的图像类型是灰度图像。在灰度图像中,每个像素没有独特的颜色,而是表示其强度或亮度的单一值。这个值通常从0(表示黑色)到最大值(通常是255,表示白色),其间的所有数字对应不同的灰色深浅。这个范围(0-255)源于使用8位来存储每个像素的强度值($2^8 = 256$ 个可能的值)。尽管存在其他范围,8位灰度图像非常常见。生成合成灰度图像涉及为网格中的每个像素分配一个合适的强度值(例如0、128、255或介于两者之间的任何值)。添加色彩:RGB 模型我们平时接触的大多数图像都是彩色图像。为了表示颜色,每个像素需要的不仅仅是单一的强度值。计算机处理颜色最常用的方式是使用RGB色彩模型。在RGB模型中,每个像素的颜色是通过组合三种原色来确定的:红、绿、蓝。这是一种加色模型,意味着颜色是通过添加不同量的红、绿、蓝光来形成的。混合红光和绿光产生黄色。混合绿光和蓝光产生青色。混合蓝光和红光产生品红色。等量混合三者产生灰色或白色深浅。不混合任何光则产生黑色。RGB图像中的每个像素存储三个值:一个用于红色强度,一个用于绿色强度,一个用于蓝色强度。类似于灰度图像,这些值对于每个通道通常在0到255之间(每个通道使用8位)。这被称为24位色彩($3 \text{ 通道} \times 8 \text{ 位/通道} = 24 \text{ 位}$),使得每个像素可以有超过1600万($256 \times 256 \times 256$)种可能的颜色!{"layout": {"title": "橙色的RGB值", "xaxis": {"title": "颜色通道"}, "yaxis": {"title": "强度(0-255)", "range": [0, 255]}, "bargap": 0.5}, "data": [{"type": "bar", "x": ["红色", "绿色", "蓝色"], "y": [253, 126, 20], "marker": {"color": ["#f03e3e", "#37b24d", "#1c7ed6"]}}]}一个例子,说明了创建特定橙色($R=253, G=126, B=20$)所需的红、绿、蓝强度值(在0-255范围内)。生成合成彩色图像时,我们通常在RGB模型中操作,为每个像素定义R、G、B值,以产生所需的视觉效果。图像数据结构那么,这些信息在计算机中是如何存储的呢?数字图像通常表示为多维数组(或张量)的数字。灰度图像可以表示为二维数组(矩阵),其维度是高度 × 宽度。数组中的每个元素(h, w)存储位于行h列w的像素强度值(例如0-255)。RGB彩色图像通常表示为三维数组,维度是高度 × 宽度 × 通道。其中,第三个维度通常大小为3,表示红、绿、蓝通道。因此,一个元素(h, w, c)将存储位于行h列w的像素在特定通道c(0代表红色,1代表绿色,2代表蓝色)的强度值。理解这种数组结构是基础,因为当我们使用编程库(如Python中的NumPy)来生成或处理图像时,我们直接操作这些数值数组。定义维度(分辨率)并用适当的强度或颜色值填充数组元素是程序化图像创建的核心所在。了解像素、分辨率和颜色模型(尤其是RGB)这些基础知识,为我们思考如何生成简单合成图像提供了依据,接下来我们将对此进行介绍。我们将直接操作这些像素值,或者使用能处理底层数组结构的工具。