图像概念详解 以及 PIL/Pillow 详解
一、图像概念详解
1、像素(Pixel)
- 定义:数字图像的最小组成单元,是一个具有特定颜色值的小方块,
- 特性:
- 每个像素包含颜色信息(RGB值、灰度值等)
- 像素本身没有物理尺寸,其显示大小取决于输出设备的分辨率
- 在内存中通常用 1-4 个字节表示(取决于色彩深度)
2、 图像尺寸(Image Size)
- 定义:图像在宽度和高度方向上包含的像素数量
- 表示方式:(宽度, 高度)像素
- 示例:1920×1080 表示宽1920像素,高1080像素
- 重要性:
- 决定图像文件大小(像素越多,文件越大)
- 影响图像显示质量(更多像素=更高细节)
- 决定打印尺寸(与DPI结合)
3、分辨率(Resolution)
-
分辨率是指设备屏幕宽度和高度的像素数,例如1920×1080。
-
PPI(Pixels Per Inch):PPI(Pixels Per Inch)是衡量显示设备像素密度的单位,表示每英寸线性长度上包含的像素数量。PPI的计算需要知道屏幕的分辨率(像素数)和屏幕的物理尺寸(英寸)。
- 每英寸包含的像素数量
- 影响打印尺寸:打印尺寸 = 图像尺寸(像素) / PPI
- PPI 的基本计算公式
PPI = √((水平像素数² + 垂直像素数²) ÷ 屏幕对角线尺寸(英寸))
-
DPI(Dots Per Inch):
- 打印时每英寸的墨点数
- 通常与PPI数值相同
4、色彩深度(Color Depth)
- 定义:每个像素使用的数据位数
- 常见类型:
- 1位:黑白二值图像(每个像素0或1)
- 8位:灰度图(0-255共256级灰度)
- 24位:真彩色(RGB各8位,约1677万色)
- 32位:带Alpha通道的RGB(RGBA)
5、图像的实际尺寸大小
显示设备的像素密度(PPI)确定了图像的实际尺寸大小,计算公式如下:
# 计算公式
物理宽度(英寸) = 图片宽度(像素) / 屏幕PPI
物理高度(英寸) = 图片高度(像素) / 屏幕PPI
其中 PPI(Pixels Per Inch):每英寸包含的像素数量
常见设备的PPI对比:
| 设备类型 | 典型PPI范围 | 1000×1000像素图片的物理大小 |
|---|---|---|
| 普通桌面显示器 | 90-110 PPI | 约 9-11英寸(23-28厘米) |
| 4K显示器 | 140-180 PPI | 约 5.5-7英寸(14-18厘米) |
| Mac Retina显示器 | 220-250 PPI | 约 4-4.5英寸(10-11厘米) |
| 智能手机 | 300-500 PPI | 约 2-3.3英寸(5-8.5厘米) |
| 平板电脑 | 250-330 PPI | 约 3-4英寸(7.6-10厘米) |
| 印刷品(300 DPI) | 300 DPI | 约 3.3×3.3英寸(8.4×8.4厘米) |
二、图片实际放大与滚轮放大的区别
1、图片实际放大
- 1、基本概念
- 输入:原始图像(例如 100×100 像素)
- 输出:放大后的图像(例如 200×200 像素)
- 核心问题:如何从较少的像素生成更多的像素?
- 2、像素数量的变化
- 放大倍数 = 新尺寸 / 原尺寸 例如:从 100×100 放大到 200×200
- 宽度放大倍数:200/100 = 2倍
- 高度放大倍数:200/100 = 2倍
- 总像素变化:从 10,000 像素增加到 40,000 像素
- 像素密度降低:每个原始像素需要"扩展"到更大的区域
当使用PIL放大图片时,原图像的像素和放大后的像素之间的差别主要体现在:放大后的图像是通过插值算法或其他相关算法在原图像像素的基础上“创造”了新的像素。这些新像素并不是原始图像中捕获的真实信息,而是根据周围原像素的颜色值计算出来的。
具体过程:
假设我们有一张2x2的原始图像,像素值如下:
[A, B]
[C, D]
现在要放大到4x4,也就是每两个原始像素之间要插入新的像素。
放大后的图像像素网格会变成:
[A, 插值1, 插值2, B]
[插值3, 插值4, 插值5, 插值6]
[插值7, 插值8, 插值9, 插值10]
[C, 插值11, 插值12, D]
这里的插值1、2、3…等都是通过选定的插值算法计算出来的。
PIL中常用的插值算法(重采样滤波器)有:
- NEAREST:最近邻插值。新像素的值直接取原图像中最近的那个像素的值。这种方法速度最快,但放大后会出现块状效应。
- BILINEAR:双线性插值。新像素的值由原图像中最近的2x2区域像素的线性插值计算得到。效果比NEAREST平滑。
- BICUBIC:双三次插值。使用原图像中最近的4x4区域像素进行三次插值计算。效果比双线性更好,但计算量更大。
- LANCZOS:Lanczos滤波器。使用原图像中最近的8x8区域像素计算。质量最高,但计算量也最大。
差别:
- 最近邻插值:放大后的图像会保留原图的像素感,即马赛克效果明显。
- 双线性插值:放大后的图像会比较平滑,但可能会有些模糊。
- 双三次和Lanczos:能够更好地保留图像的细节,同时平滑过渡,但双三次可能会产生一些振铃效应(边缘出现伪影),Lanczos通常能提供更好的质量。
因此,原像素与变化后的像素的差别在于,原像素是原始图像的真实数据,而放大后的图像中,除了原始像素点(在整数倍放大的情况下,这些点的位置可能会对应)外,其他像素都是通过插值算法计算出来的近似值。
肉眼观察差别:
- 当放大倍数较大时,最近邻插值会看到明显的锯齿(马赛克)。
- 双线性插值会看到图像比较模糊,细节损失。
- 双三次和Lanczos插值在放大倍数不是特别大时(如2-3倍)能够保持较好的清晰度,但放大倍数再大也会变得模糊,因为插值算法无法创造原始图像中不存在的细节。
所以,放大图像本质上是一种“无中生有”的过程,通过算法来猜测如何填充新的像素,从而使得图像在放大后看起来尽可能自然。但无论如何,放大图像都无法增加原始图像中不存在的细节,因此放大后的图像总会比同等分辨率的原始图像模糊。
2、滚轮放大
滚轮放大实际上与实际放大的视觉效果类似,随着滚动,即时调整当前大小图片的像素点,除了不改变真正的图片像素外,其他都大致相同,填充像素的算法与图片展示器有关。
